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

CS50第2周hours练习:使用float仍截断平均时长问题排查

CS50 Week 2 Hours 练习题:平均时长被截断为整数的问题解决

你的代码计算总时长没问题,但平均时长变成整数的原因很明确:整数除法的截断特性。

在计算平均的分支里,你写的是return (float) (tot / weeks);——这里tot和weeks都是int类型,C语言会先执行整数除法tot / weeks,直接丢掉小数部分得到整数结果,之后再把这个整数转成float,自然就没有小数了。

修正方法

只需要把其中一个操作数先转换成float,让除法按浮点数规则运算:

把原有的平均分支return语句改成下面任意一种都可以:

  • return (float) tot / weeks; // 先将tot转为float,weeks会自动提升为float类型参与运算
  • return (float)tot / (float)weeks; // 显式把两个操作数都转成float

修正后的完整calc_hours函数

float calc_hours(int hours[], int weeks, char output)
{
    int tot = 0;

    for (int i = 0; i < weeks; i++)
    {
        tot = hours[i] + tot;
    }

    if (output == 'T')
    {
        return (float) tot;
    }
    return (float) tot / weeks;  // 这里是修正后的代码
}

这样计算平均时,除法会保留小数部分,最终输出的结果就是正确的浮点数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:42:11