首页 > 解决方案 > c++ average function not working properly

问题描述

I am fairly new with c++, I am still learning; so please forgive me ahead of time :) I need some help with this c++ program. The program takes an array of grades and displays all the grades and outputs the average. Can someone check to see if there is a problem with my average algorithm? I am sure it is something simple. The results displayed aren't what I expect. see below..

expected

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

output

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

Here is my code-

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

标签: c++arraysmath

解决方案


基本上这是您的代码的错误。首先,您的列长度只有 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;
    }

推荐阅读