如何统计用户输入的大于80的分数数量?(无数组实现+代码修复)
问题分析与修复
你的代码统计大于80的分数数量时出现错误,核心问题有三个:
- 多余的内层
for循环:每当输入的分数大于80时,你用了一个循环5次的内层循环给greater加1,这直接导致每次符合条件就加5,所以结果必然是5的倍数。 - 分数判断的时机错误:你在输入验证前就判断分数是否大于80,这会导致用无效的输入(比如120)来统计,而用户修正后的有效分数却没被正确判断。
- 统计结果输出时机错误:你把统计结果的输出放在了循环内部,每次符合条件就输出,这会导致多次重复输出,且结果不完整。
修复后的代码
#include <iostream> using namespace std; int main() { int score, sum = 0, greater = 0; for(int i = 1; i <= 5; i++) { cout << "Enter the score: "; // 接收用户输入分数 cin >> score; // 输入验证:直到输入有效为止 while (!(score >= 0 && score <= 100)) { cout << "Invalid Input. Enter the score between the range 0 - 100" << endl; cout << "Enter the score: "; cin >> score; } // 验证通过后,判断分数是否大于80并统计 if(score > 80) { greater++; // 直接加1,不需要内层循环 } sum += score; // 累加分数到总和 } float avg = sum / 5.0; // 计算平均分 // 循环结束后统一输出统计结果和平均分 cout << "There are " << greater << " scores more than 80" << endl; cout << "Average of scores: " << avg << endl; return 0; }
关键修改点说明
- 移除内层
for循环:当分数大于80时,直接执行greater++即可完成计数,不需要循环多次累加。 - 调整判断顺序:先完成输入验证,确保
score是0-100之间的有效分数后,再判断是否大于80,避免用无效值统计。 - 调整输出位置:把统计结果的输出移到循环结束后,确保所有分数处理完成后,输出最终的统计数量。
内容的提问来源于stack exchange,提问作者Tehreem
相关产品推荐
相关产品推荐

