c++ - 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;
}
}
解决方案
基本上这是您的代码的错误。首先,您的列长度只有 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;
}
推荐阅读
- javascript - 使用 Hooks 与 React Native 一起返回时刷新屏幕 A
- arrays - 在 Python 中,假设数组/列表中的所有值都是非负的,找到数组/列表中两个整数的最小乘积?
- python - 如何在无服务器中与 Python 正确共享代码?
- jquery - 在内容上单击 -> 隐藏 div -> 隐藏不需要的物化日期选择器
- c++ - 我怎样才能有一个使用类的链表?
- angular - 了解ngrx/data的能力
- python - 从网站抓取动态变化图像的 URL
- python - 如何使用pyplot绘制时间?
- javascript - GHOST - 发布特征图像未显示在 index.hbs 中
- javascript - 节点js子进程超时