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

CS50课程学习中C语言平均分计算向下取整问题求解

问题解决:整数除法导致平均分取整的问题

你的猜测完全正确,问题确实出在整数除法上。C语言里,如果两个整数做除法,结果会直接舍弃小数部分只保留整数——哪怕你最后把结果赋值给float变量,也只是把这个已经取整后的整数转成了浮点数,所以输出会是.0000的格式。你之前改int为float没解决,是因为没改到关键:sum和s都是int类型,它们的除法运算本身还是整数运算,和最终赋值的变量类型无关。

两种可行的解决方法:

方法1:强制转换其中一个操作数为float

把除法表达式里的任意一个操作数转成float,C语言会自动把另一个操作数也提升为float,执行浮点数除法:

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int s = get_int("how many scores? ");
    int sum = 0;
    int score[s];
    
    for(int i = 0; i < s; i++)
    {
        score[i] = get_int("score: ");
        sum = sum + score[i];
    }
    // 将sum强制转换为float后再执行除法
    float avg = (float)sum / s;
    printf("average: %f\n", avg);
}

方法2:将sum定义为float类型

一开始就把sum设为float类型,累加分数时直接用浮点数存储,最后除以int类型的s时,会自动触发浮点数除法:

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int s = get_int("how many scores? ");
    // 初始化为float类型的0.0
    float sum = 0.0;
    int score[s];
    
    for(int i = 0; i < s; i++)
    {
        score[i] = get_int("score: ");
        sum = sum + score[i];
    }
    float avg = sum / s;
    printf("average: %f\n", avg);
}

两种方法都能解决问题,第一种适合保留整数累加的特性,第二种逻辑更直观,根据你的习惯选就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:45:39