2014-10-07 172 views
1

我想查找二维数组中所有列的平均值并将它们存储到一维数组中。 从那个一维数组中,我想返回最低数字的位置。 这里是我的代码,它确实产生了一个答案(没有编译/运行时错误),但它给出的答案是不正确的。查找二维数组中每列的平均值

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

你的'averages'是一个整数列吗? – dragosht 2014-10-07 07:25:10

+0

平均数是双打数组。 – user2159301 2014-10-07 07:26:02

+0

您是否初始化平均值数组? – Igor 2014-10-07 07:26:30

回答

1

你不表明你初始化averages0

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 
    } 
} 

的准确性另一个问题(但我不认为这是双重价值的情况下)是当更准确首先计算平均值的近似值,然后计算:avg(X) = x1 + avg(X - x1)其中x1avg(X)的猜测值。

+0

谢谢。加入平均数[n] = 0。在内部循环的外部和外部做了诀窍。 – user2159301 2014-10-07 08:04:23

3

在for循环第一for应采取所有列和第二for所有行。 例如:column = 1然后你用第二个for去得到该列上所有行的值row = 1,row = 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 
    } 
} 
+0

我仍然收到不准确的答案。例如,当它返回21.63时,它实际上返回21.14。 88.64而不是88.40等等 – user2159301 2014-10-07 07:53:53