C语言设计问题 为什么会出现这样的问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 10:23:28
#include<stdio.h>
int main()
{
double i,n;
while(scanf("%lf",&n)!=EOF)
{
i=5/9*(n-32);
printf("%.3lf\n", i);

}
return 0;

}

这道题是华氏温度转化成为摄氏温度。 看,无论输出什么数都是0,
但是如果把
i=5/9*(n-32);
改成
i=(n-32)*5/9;
结果又变成正确的了
有没有哪位高手可以解释一下

i=5/9*(n-32);
所有操作数都是整型,这样的结果也是整型,5/9得到的值为整数0,所以结果为零改为 i=5.0/9*(n-32);即可

运算顺序不同!
5/9等于0
建议写成:
i=(n-32)*5.0/9.0;
除法尽量写在运算的最外层,以减少误差

因为5和9都是int型数据- -

其实你可以用
(double)5/9*(n-32)
将5强制转换为double型,除9后就也是double型的了- -

因为5/9*(n-32);
先进行的是5/9=0计算,所以0*(n-32)=0
下面是先进行括号内运算,所以结果正确。