#include <stdio.h>
#include <omp.h>
#define N 5
int X[N];
int main() {
int num = 0;
int moy = 0;
// Initialize the array (you should populate it as needed)
for (int i = 0; i < N; i++) {
X[i] = i * 2; // Example initialization
}
// Calculate the average
#pragma omp parallel for reduction(+:moy)
for (int i = 0; i < N; i++) {
moy += X[i] / N;
}
// Count elements greater than the average
#pragma omp parallel for reduction(+:num)
for (int i = 0; i < N; i++) {
if (X[i] > moy) {
num++;
}
}
printf("%d\n", num);
return 0;
}
如果我为数组的mean、num和elements编写print语句,我会得到以下输出:
平均值(百万美元):2
X中的元素:0 2 4 6 8
大于平均值的元素数:3
1条答案
按热度按时间yhuiod9q1#
这不是一个openmp问题,你将
moy
声明为int
,然后计算你所做的平均值:moy += X[i] / N;
你的
X
数组包含0, 2, 4, 6, 8
和N = 5
,当执行除法时,你试图把double
放在int
里面,所以你的总和本质上是:0/5 = 0
+2/5 = 0
+4/5 = 0
+6/5 = 1
+8/5 = 1
=0+0+0+1+1
=2
您需要将
moy
和X
设为double
,或者更好地将moy
设为double
,对moy
中的所有元素求和,然后执行moy/N
以获得正确的结果