【发布时间】:2020-12-28 14:51:01
【问题描述】:
我正在尝试为我的平均成绩制作一个计算器,但我似乎找不到我错在哪里。
#include <iostream>
#include <conio.h>
#include <cmath>
using namespace std;
int main()
{
string subject[17] = {"Biology", "French"}; //"Sport", "Ed.Antreprenoriala", "Geografie", "Mate", "TIC", "Psihologie", "Romana", "Chimie", "Fizica", "Istorie", "Engleza", "Religie", "Info", "Desen", "Muzica"};
int mark, numberOfMarks;
float sumaNote = 0;
double average, averageSum = 0, finalAverage;
for(int i=0; i<2; i++){
cout << subject[i] << ":" << "\n";
cout << "How many marks?" << "\n";
cin >> numberOfMarks;
for(int j=0; j < numberOfMarks; j++){
cin >> mark;
sumaNote += mark;
}
average = sumaNote / numberOfMarks;
averageSum += round(average);
}
cout << endl;
finalAverage = averageSum/2;
cout << finalAverage;
getch();
return 0;
}
它应该像这样工作:
1) 从字符串数组中获取主题;
2)问我这门课得多少分;
3)平均分数的总和;
4)重复直到超出数组元素(主题)
5) 得到所有科目平均分的总和,对这些平均分并输出答案;
***每个非自然平均值都需要向上或向下舍入(因此使用了 round() 函数);
***一共17个科目,但我只用了2个做实验用;
示例:生物学: 多少分? 2 8 10(应该是(8+10)/2) 法语: 多少分? 3 7 9 10(应该是(7+9+10)/3
输出应该是 9+9/2 = 9
但我的代码没有这样做,并且无法弄清楚原因
【问题讨论】:
-
但我的代码没有这样做,也无法弄清楚为什么这就是调试器的用途。使用它来查看您的代码实际在做什么。调试通常涉及一次执行代码 1 行,查看每一步的变量。调试不是按下播放按钮并期待调试器告诉你一些有用的东西。
-
您不应该有时将
sumaNote重置(归零)吗?在调试器中花一分钟应该可以帮助您找到这一点。 -
是的,在您计算出平均值后,您不想将之前的总和用于不同的主题。
-
我不明白为什么人们将答案放在 cmets 中,而它本来可以是答案。其他人可以在答案中使用它,并获得积分。
-
除了您得到的答案:
sumaNote最好是整数类型,并在average = static_cast<double>(sumaNote) / numberOfMarks;中转换为double