繁体   English   中英

C ++用平均值填充部分填充的2D数组

[英]C++ Filling partially filled 2D array with Average

我正在尝试在C ++中使用2D数组进行实验,并且正在开发一个项目,该项目制作了一个4x4 2D数组,该数组可以容纳许多学生成绩,但部分通过文本文件填充。 4列中仅填充3个。 我想用每列前几行的平均成绩来填充最后一列。

问题是我不知道如何准确地填充最后一列。

这是我的代码,用于计算平均值。

const int SIZE = 4;

const int ROWS = 4;
const int COLS = 4;

int total = 0;

for (int i = 0; i < ROWS; i++)
{
    total = 0;

    for (int j = 0; j < COLS - 1; j++)
    {
        total += studentGrades[i][j];

        average = total / (COLS - 1);

        studentGrades[0][3] = average;
        studentGrades[1][3] = average;
        studentGrades[2][3] = average;
        studentGrades[3][3] = average;
    }
}

好像我接近了,因为我得到了很好的结果,但是最后一列显示的值不正确,而且我觉得有一种更有效的方法来填充最后一列,而不是手动插入每个索引。

您每次都将最后一次计算的平均值分配给所有行。 这意味着最后您将获得所有4列中第4行的平均值。 还可以考虑将变量( studentGradestotal )更改为浮点类型,以提高准确性。

const int SIZE = 4;

const int ROWS = 4;
const int COLS = 4;

for (int i = 0; i < ROWS; i++)
{
    int total = 0;

    for (int j = 0; j < COLS - 1; j++)        
        total += studentGrades[i][j];

    studentGrades[i][COLS - 1] = total / (COLS - 1);
}

您还可以使用标准库:

#include <numeric>

// ...

constexpr int Rows = 4, Cols = 4, NGrades = Cols - 1; 

for (int i = 0; i < Rows; i++)
    studentGrades[i][NGrades] = std::accumulate(studentGrades[i], studentGrades[i] + NGrades, 0) / NGrades;

与我的第一个解决方案一样,请考虑使用浮点类型。 要启用浮点运算,请将std::accumulate0更改为0.00.0f

std::accumulate的解释。

逻辑是错误的。 您只能计算平均值并合计其他各列之后填充最后一列,并且一次只能填充一行,而不是尝试一起完成所有四行。 这是正确的循环

for (int i = 0; i < ROWS; i++)
{
    total = 0;
    for (int j = 0; j < COLS - 1; j++)
    {
        total += studentGrades[i][j];
    }
    average = total / (COLS - 1);
    studentGrades[i][3] = average;
}

这只是在正确的顺序和正确的时间做事的问题。

另外,您应注意Yksisarvinen指出的整数除法问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM