C语言如何统计输入成绩序列中最高分的出现次数
C语言成绩统计功能(最大值+出现次数)修复方案
现有代码问题梳理
- 未过滤终止输入的
-1,会将其错误计入总分、人数、最大值比较逻辑 - 缺失最大值出现次数的计数逻辑,导致统计次数的变量始终为0
- 平均分计算逻辑错误,额外加1的操作无意义,且计入了无效的终止符数值
- 未做1~20的成绩区间校验,不符合需求设定
- 人数判断逻辑错误,原代码把终止符的一次输入计入人数,导致判断条件偏差
修复后完整代码
#include <stdio.h> int main(void) { int num, total_score = 0, valid_count = 0, avg = 0, max_score = 0, max_count = 0; printf("请输入3个及以上1~20区间的成绩,输入-1结束录入:\n"); while (1) { scanf("%d", &num); // 遇到终止符直接结束循环 if (num == -1) { break; } // 校验成绩合法性 if (num < 1 || num > 20) { printf("成绩仅支持1~20区间,请重新输入:\n"); continue; } // 最大值及次数统计逻辑 if (num > max_score) { max_score = num; max_count = 1; } else if (num == max_score) { max_count++; } // 累计总分、有效人数 total_score += num; valid_count++; } if (valid_count >= 3) { avg = total_score / valid_count; printf("班级平均分为:%d\n", avg); printf("最高分为:%d,出现次数:%d次\n", max_score, max_count); } else { printf("错误:有效成绩不足3个,无法计算\n"); } return 0; }
核心逻辑说明
- 最大值统计:每次录入合法成绩后和当前最大值比较,大于当前最大值就更新最大值,同时把出现次数重置为1
- 最大值计数:如果当前录入成绩等于当前最大值,直接给次数加1即可
- 输入过滤:先判断是不是终止符、是不是合法成绩,再参与统计计算,避免无效数据干扰结果
内容的提问来源于stack exchange,提问作者jsovsa
相关产品推荐
相关产品推荐

