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

C语言计算用户输入奇偶数字平均值出现舍入错误如何排查

C语言平均值计算错误问题修复方案

核心错误原因

你的代码存在4类问题,共同导致了计算结果异常:

  • 整数除法截断:C语言中两个int类型变量直接运算时会执行整数除法,会直接舍弃小数部分,哪怕最终赋值给double类型也不会触发浮点运算。例如25/2的运算结果是12而非12.5,赋值后只会得到12.000000
  • 统计逻辑错误
    1. 未单独统计奇数、偶数的输入个数,直接用总输入数减1作为所有平均值的分母,完全不符合平均值计算规则(平均值应为对应类型的总和除以对应类型的输入个数)
    2. 作为终止标记的0被错误计入偶数统计:用户输入0时会触发偶数判断逻辑,被加到偶数总和中,同时也被计入总计数
  • 输出逻辑错误:两次打印的文案均为偶数平均值,第二次奇数平均值的文案错误,且打印时输出的分母和计算时使用的分母数值不一致
  • 边界隐患:如果用户首次输入就为0,会触发除零错误导致程序崩溃

修复后完整代码

#include <stdio.h>
#include <stdlib.h>

void funkcja()
{
    int sumaNiep = 0; // 奇数总和
    int sumaPa = 0; // 偶数总和
    int liczbaNiep = 0; // 奇数个数
    int liczbaPa = 0; // 偶数个数
    int userInput = 1;
    int i = 0;

    while(userInput != 0)
    {
        printf("%d. Podaj calkowita liczbe: ", i+1);
        scanf("%d", &userInput);
        // 输入为0直接退出,不参与统计
        if(userInput == 0) {
            break;
        }
        i++;
        if (userInput % 2 == 0)
        {
            sumaPa += userInput;
            liczbaPa++;
        } else {
            sumaNiep += userInput;
            liczbaNiep++;
        }
    }

    // 计算前先判断个数避免除零,强转分子为double触发浮点除法
    double sredniaNiep = liczbaNiep > 0 ? (double)sumaNiep/liczbaNiep : 0;
    double sredniaPa = liczbaPa > 0 ? (double)sumaPa/liczbaPa : 0;

    printf("\nsrednia parzysta %d / %d : %lf", sumaPa, liczbaPa, sredniaPa);
    printf("\nsrednia nieparzysta %d / %d : %lf", sumaNiep, liczbaNiep, sredniaNiep);

}

int main()
{
    funkcja();
    return 0;
}

关键修改说明

  • 新增两个计数变量分别统计奇数、偶数的有效输入个数,平均值计算时分母使用对应类型的计数
  • 输入为0时直接终止循环,不参与任何统计和计数
  • 除法运算前将分子强制转换为double类型,触发浮点除法保留小数部分
  • 增加计数非零判断,避免除零错误
  • 修正输出文案、分母数值和实际计算逻辑的对应关系

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:45:08