注册 登录
编程论坛 C语言论坛

这段代码1和1.0到底有什么区别,求大佬解答!

hzc904217071 发布于 2021-03-07 17:33, 1512 次点击
#include<stdio.h>
float fun(int m)
{
    float sum=0;
    int i=1,count=0;
    //请在该注释语句下方编写代码
    for( ;i<=m;i++)
    {
        if(i%3==0 && i%7==0)
        {
            sum=1.0/i+sum;
            count++;
        }
    }
    printf("%d\n",count);
    return sum;
}
int main()
{
    float sum=fun(100);
    printf("%f\n",sum);
    sum=fun(200);
    printf("%f\n",sum);
    sum=fun(300);
    printf("%f\n",sum);
    return 0;
}



在这段代码中
为什么
sum=1.0/i+sum;
是对的

sum=1/i+sum;
是错的
3 回复
#2
zbjzbj2021-03-07 18:05
这是因为计算机没有人聪明。计算机认为1.0不等于1。计算机看到小说点,他认为是实数,没看到小数点,他认为是整数。
这个很麻烦,计算机计算整数的时候,他准备了四个字节存储空间,计算实数的时候,他要准备8个字节(举例)存储空间,也就是说炒菜锅都不一样大小。
炒菜的规矩就更不一样了。
#3
apull2021-03-07 18:12
1 int,1/i运算结果类型是int,小数部分直接舍去
1.0 float,1.0/i运算结果类型是float,保留小数部分。
#4
rjsp2021-03-08 11:03
整数运算的结果仍然是整数,比如 7/2 的结果是 商3余1
浮点数运算的结果仍然是浮点数,比如 7.0/2.0 的结果是 3.5
整数与浮点数运算,先将整数提升为浮点数再运算
1