#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和元素编写打印语句,我会得到以下输出:
平均(月):2
X 中的元素:0 2 4 6 8
大于平均值的元素数量:3
这不是一个 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
以获得正确的结果