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

C语言程序修改需求:仅统计正分数并将平均值改为浮点数

解决你的C语言分数统计问题

我来帮你修复代码里的两个问题,同时对齐你想要的输出效果。先梳理下原代码里的关键问题,再一步步修正:

问题分析

  1. 未初始化变量导致循环异常:原代码中score进入for循环前没有赋值,score>0的初始判断属于未定义行为,程序可能直接跳过循环或出现异常。
  2. 负数被错误计入统计数量:输入负数时,i仍会自增,导致统计的分数数量多算一次(比如输入-1的那次也被计入了)。
  3. float平均值计算逻辑错误:sum和i都是int类型,整数除法会直接丢弃小数部分,就算把average改成float,得到的也是整数结果转float,自然看不到小数。
  4. 输出内容与格式不符:缺少你期望的初始提示语,平均值输出格式也没匹配到保留两位小数的要求。

修改后的完整代码

#include <stdio.h>

int main() {
    int i = 0, score, sum = 0;
    float average;

    // 打印初始提示语
    printf("The program calculates the average of scores you enter. End with a negative integer.\n");

    while (1) {
        printf("Enter score (4-10): ");
        scanf("%d", &score);

        // 遇到负数直接退出循环
        if (score < 0) {
            break;
        }

        // 只累加合法正分数并统计数量
        sum += score;
        i++;
    }

    printf("You entered %d scores.\n", i);
    // 强制浮点除法:将sum转为float后再计算,避免整数截断
    average = (float)sum / i;
    // 格式化输出保留两位小数的平均值
    printf("Average score: %.2f\n", average);

    return 0;
}

关键修改说明

  • 初始化变量+重构循环逻辑:把i初始化为0,避免未定义行为;将for循环改成while(1)无限循环,遇到负数就break退出,逻辑更清晰直观。
  • 正确忽略负数统计:只有输入的score是非负数时,才累加分数sum和统计数量i,负数直接跳出循环,不会被计入统计。
  • 修复浮点平均值计算:通过(float)sum将整数类型的sum强制转换为float,让除法运算按照浮点规则执行,得到带小数的正确结果。
  • 对齐期望输出:添加了初始提示语,用%.2f格式化平均值输出,保留两位小数,和你想要的6.71格式完全匹配。

可选优化(按需添加)

如果需要限制分数必须在4-10之间,可以在非负数判断后再加一层校验:

if (score >= 4 && score <= 10) {
    sum += score;
    i++;
} else {
    printf("Invalid score! Please enter a number between 4 and 10.\n");
}

这样就能完全符合你的需求啦~

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:41:17