我试图找到2D数组中所有列的平均值并将它们存储到一维数组中。 从那个1D阵列我想要返回最低数字的位置。 这是我的代码,它确实产生了答案(没有编译/运行时错误)但是它给出的答案是不正确的。
int function(){
int m, n,p;
for(m = 0; m < NROW; m++){//I think the problem must be within this set of for loops.
for(n = 0; n < NCOL; n++){
averages[n] += twoD[n][m]; //averages is an array of type double
}
}
for(p = 0; p < NCOL; p++){
averages[p] = (((double)averages[p])/((double)NROW));
}
int d, location;
int lowest = averages[0];
for ( d = 1 ; d < NCOL ; ++d )
{
if ( averages[d] < lowest )
{
lowest = averages[d];
location = d;
}
}
return location;
}
答案 0 :(得分:3)
在for循环中,第一个for
应该占用所有列,第二个for
占用所有行。
例如: column = 1 然后您使用第二个for
并获取该列上所有行的值行= 1,行= 2 等等。
for(n = 0; n < NCOL; n++){ \\for each column
for(m = 0; m < NROW; m++){ \\take each row of each column
averages[n] += twoD[m][n]; //row m, column n
}
}
答案 1 :(得分:1)
您没有表明您将averages
初始化为0
:
for(n = 0; n < NCOL; n++){
averages[n] = 0.;
for(m = 0; m < NROW; m++){
averages[n] += twoD[n][m]; //averages is an array of type double
}
}
准确性的另一个问题(但我不认为是双值的情况)是在计算平均值时更准确,方差很小,先得到平均值的近似值然后计算:{{ 1}}其中avg(X) = x1 + avg(X - x1)
是x1
的猜测。