You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:36:03