【问题标题】:Compute average on each rows and store in the last element计算每行的平均值并存储在最后一个元素中
【发布时间】:2017-10-04 12:40:48
【问题描述】:

我需要计算每一行的平均值并存储在最后一个元素中。我设法做到了,但随后的行是前一行的累积平均值。 例如:

输入:

1 2 3 0

4 5 6 0

输出:

1.00 2.00 3.00 2.00

4.00 5.00 6.00 7.00(应该是 5.00)

这是我的代码

   void findAverage2D(float matrix[4][4])
     {    
       int i,j = 0;
       float sum,avg=0;

       for(i=0;i<4;i++)
     {
        for(j=0; j<4;j++)
        {
            sum+= matrix[i][j];
        }
        avg = sum/3;
            matrix[i][3] =avg;

    }
}

提前致谢。 :)

【问题讨论】:

  • 计算完avg后,应将sum设置为0
  • 您应该在开始内部 for 循环之前将 sum 设置为 0
  • 您应该将 sum 设置为 '0' 作为 for-i 循环的第一条语句。目前也不能保证sum 一开始就是0.0。
  • 空白很便宜。请使用它来提高可读性。
  • 我知道这与总和有关。谢谢大家!

标签: c arrays multidimensional-array average


【解决方案1】:

在第一个for循环中移动变量“sum” -

 for(i=0;i<4;i++)
 {
    float sum = 0;

【讨论】:

    【解决方案2】:

    函数有两个bug。

    第一个是变量sum最初没有初始化,在外循环的每次迭代中也没有初始化。

    第二个bug是每行的最后一个元素不应该参与平均值的计算。

    考虑到这一点,函数可以如下所示

        void findAverage2D( float matrix[][4], size_t n )
        {
            const size_t M = 4;
    
            for ( size_t i = 0; i < n; i++ )
            {
                float sum = 0.0f;
                for ( size_t j = 0; j < M - 1; j++ )
                {
                    sum += matrix[i][j];
                }
                matrix[i][M-1] = sum / ( M - 1 );
            }
        }
    }
    

    必须使用两个参数调用该函数,其中第二个参数是给定数组中的行数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 2014-01-24
      • 2018-01-01
      • 1970-01-01
      相关资源
      最近更新 更多