C ++平均功能无法正常工作

时间:2018-06-21 16:25:53

标签: c++ arrays math

我对C ++还是很陌生,我仍在学习;所以请您原谅我:)我需要有关此C ++程序的帮助。该程序采用一系列成绩并显示所有成绩并输出平均值。有人可以检查我的平均算法是否有问题?我相信这很简单。显示的结果不是我期望的。见下文。

预期

Student Grade 1 Grade 2 Grade 3 Grade 4 Ave Wt Ave
1   85  88  90  81  86.0    86.6
2   73  68  75  77  73.2    72.9
3   94  89  82  91  89.0    88.3
4   88  79  81  84  83.0    82.4
5   71  65  78  73  71.8    71.7

输出

Student  Grade 1  Grade 2  Grade 3  Grade 4  Average  Wt Average
-------  -------  -------  -------  -------  -------  ----------
1        85        88        90        81        3.44788        86.6
2        73        68        75        77        3.16131        159.5
3        94        89        82        91        3.70485        247.8
4        88        79        81        84        3.45602        330.2
5        71        65        78        73        3.05328        401.9

这是我的代码-

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{

    double avg = 0;
    double weightAve;

    //data type array name [rows] [columns]
    double grades[5][7] = {{1, 85.0, 88, 90, 81}, {2, 73, 68, 75, 77}, {3, 94, 89, 82, 91}, {4, 88, 79, 81, 84}, {5, 71, 65, 78, 73}};


    for (int row = 0; row < 5; row++)
    {
        for (int column = 0; column < 7; column++)
        {
            //sum += grades[row][column];
            avg += grades[row][column];
            avg /=4; //divide avg by 4
            grades[row][5] = avg;
        }


            weightAve+=(0.2*grades[row][1]);
            weightAve+=(0.3*grades[row][2]);
            weightAve+=(0.3*grades[row][3]);
            weightAve+=(0.2*grades[row][4]);

            //store the wt avg
            grades[row][6]=weightAve;
    }





    //printing arrays
    cout << "Student  Grade 1  Grade 2  Grade 3  Grade 4  Average  Wt Average" << endl;
    cout << "-------  -------  -------  -------  -------  -------  ----------" << endl;
    for (int row = 0; row < 5; row ++)
    {
        for (int column = 0; column < 7; column++)
        {

            cout <<grades[row][column] << "        ";

        }

        cout << endl;
    }
}

2 个答案:

答案 0 :(得分:5)

基本上,这是您的代码错误。首先,您的列长度只有5,所以将其运行到7并不是一个好主意。其次,您正在括号内分割,这意味着第一个值一进入,它就会被分割。

例如85/4 +(85/4 + 88)/ 4 ....

这就是为什么您得到错误答案的原因。解决方法是

for (int row = 0; row < 5; row++)
    {   
        avg =0;
        weightAve =0;
        for (int column = 1; column <= 4; column++)
        {
            //sum += grades[row][column];
            cout << grades[row][column] << endl;
            avg += grades[row][column];


        }
            avg /=4;
            grades[row][5] = avg;

            weightAve+=(0.2*grades[row][1]);
            weightAve+=(0.3*grades[row][2]);
            weightAve+=(0.3*grades[row][3]);
            weightAve+=(0.2*grades[row][4]);

            //store the wt avg
            grades[row][6]=weightAve;
    }

答案 1 :(得分:3)

你分得太频繁了。
将除法移出循环:

    {
        //sum += grades[row][column];
        avg += grades[row][column];
        avg /=4; //divide avg by 4
        grades[row][5] = avg;
    }

->

    {
        //sum += grades[row][column];
        avg += grades[row][column];
    }
    avg /=4; //divide avg by 4
    grades[row][5] = avg;

此外,为了不依赖未初始化的变量,请仅汇总您初始化的前4个条目(贷记JeJo):

for (int column = 0; column < 7; column++)

->

for (int column = 0; column < 4; column++)

如弗朗索瓦(信用)所述,重置变量,以在每行之后清除。
将它们移到外部循环中并对其进行初始化。

    for (int row = 0; row < 5; row++)
    {
        double avg = 0.0;
        double weightAve=0.0;