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

C语言计算1到1/100的分数和运行返回1,问题出在哪里?

问题原因分析
  • 整数除法截断问题:C语言中两个整数类型做除法运算时,结果会自动截断小数部分,只保留整数部分。你代码中1和i都是int类型,因此当i >= 2时,1/i的计算结果都是0,只有i=1时1/1=1,后续循环sum累加的都是0,最终结果自然是1。
  • sum变量类型错误:你要计算的是含小数的分数和,用int类型的sum无法存储小数部分,需要改用浮点数类型(如double)。
  • main函数写法不规范:你当前使用的是旧C标准的非规范main函数写法,标准C要求main函数返回值为int类型。
修正后的代码
#include <stdio.h> 

int main(void){ 
    int i;
    double sum = 0.0;
    for (i=1;i<=100;i++){ 
        // 1.0是double类型,触发浮点数除法,保留小数结果
        sum = sum + (1.0 / i);
    }
    printf("%.2f", sum); // 可自行调整输出的小数位数,示例为保留2位
    return 0;
}
补充说明

你之前的逻辑理解是建立在浮点数运算的基础上,但原代码所有运算都是整数运算,才会出现结果不符合预期的问题。修改后1.0/i运算时,i会自动隐式转为double类型再做除法,就能得到正确的小数结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:36:07