通过将值从int改为float,总值就会发生变化.有人能解释为什么吗?plz



我试过几次来确定原因,但都做不到,所以如果有人被确认了,请告诉我。。

#include <stdio.h>

int main()
{
int i,n=1;
float div=0,sum=0,j=1;
for(i=1;i<=7;i++)
{
j=1;
for(n=1;n<=i;n++)
{
j=j*n;
}
div=i/j+div;

}
printf(" %f",div);
return 0;
}

实际上它是一个程序;编写使用For Loop:添加以下系列的前七项的程序

(1/1!)+(2/2!)+(3/3!)+…………  "      

通过运行上面的程序,我们得到的结果是2.72,这是正确的。但是如果我们运行低于的代码

#include <stdio.h>
int main()
{
int i,n=1,j=1;
float div=0,sum=0;
for(i=1;i<=7;i++)
{
j=1;
for(n=1;n<=i;n++)
{
j=j*n;
}
div=i/j+div;

}
printf(" %f",div);
return 0;
}

但实际所做的是将CCD_ 1从int更改为float,反之亦然。但结果各不相同。。

这里有区别:

div=i/j+div;

当在第二段代码中计算/运算符时,两个操作数都具有类型int,因此执行整数除法,截断任何小数部分。当j被声明为类型double时,执行浮点除法并且不发生截断。

您不能除以整数并期望一个浮点答案,您可以将j强制转换为浮点,如下所示:

div = i / (float)j + div;

它会给你想要的答案

最新更新