下面这段简单的c源码为什么改变一个语句,两次运行结果不一样?
正确源码如下
#include<stdio.h>
/*打印摄氏温度-华氏温度对应表*/
main()
{
float fahr,celsius;
float upper,lower,step;
printf("celsius to fahr\n");
lower = -17.8;
upper = 148.89;
step = 11.11;
celsius = lower;
while(celsius <= upper)
{
fahr = 9 * celsius / 5 + 32;
printf("%6.2f\t%3.0f\n",celsius,fahr);
celsius = celsius + step;
}
}
如果把fahr = 9 * celsius / 5 + 32;改为fahr = 9 / 5 * celsius +32;
结果为什么不一样,变量都是声明的float。
[解决办法]
会先计算9 / 5,这两个数都是整数
写成9.0 / 5
[解决办法]
因为9/5等于0
fahr = 9.0f * celsius / 5.0f + 32.0f;
fahr = 9.0f / 5.0f * celsius +32.0f;
别忘了常量也有类型。
[解决办法]
隐式类型转换问题
[解决办法]
类型转换
[解决办法]
fahr = (float)9 * celsius / 5 + 32;
fahr = (float)9 / 5 * celsius +32;
ok!!!!
[解决办法]
整数除法,结果是整数
[解决办法]
double就行了。9换成9.0或者5换成5.0
[解决办法]
学习了。。常量也有类型。。