我对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;
}
}
答案 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;