C语言的一个比较莫明的问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 15:20:07
我用的是VC++6.0,小弟我尚处于入门阶段,问了什么火星问题还望各位见谅
void main()
{
double c,F,a;
printf("请输入华氏温度:\n");
scanf("%lf",&F);
a=F-32;
c=5/9*a;
printf("摄氏温度为:%.2f\n",c);
}
这样一段代码在编议运行之后无论我怎么输入,输出结果总是0.00
而我只要把c=5/9*a那句改成c=5*a/9就一切正常了,哪位大哥能告诉下小弟这是什么原因吗?

受浮点精度影响, 5/9 = 0.00
要获得 0.555556 可以先将运算对象赋给变量来参与运算或者做强制类型转换

void main()
{
double c,F,a,w,j;
printf("请输入华氏温度:\n");
scanf("%lf",&F);
a=F-32;
w=5;
j=9;
c=w/j*a;
printf("摄氏温度为:%.2f\n",c);
}

//强制类型转换
c=(double)5/9*a;
的确是个很有意思的问题,在C中,会遇到很多像这样形形色色的怪问题。

表达式优先级问题,
c=5/9*a; -》5/9=0,后面再计算0*a
改过后没有这个问题

因为5和9都是int型的,你只要一除,结果还是int型的,结果就是0了呀。
你修改之后a是double型,编译器自然自动给你把5转换成double型了,当然不是0了。
你这么写看看:
c = 5.0/9.0*a;
你试试。呵呵。

这是运算的优先级问题.一般*比/优先

void main()
{
double c,F,a;
printf("请输入华氏温度:\n");
scanf("%lf",&F);
a=F-32;
c=5/9*a;/*就这里定义错误,应强制转换为double型*/
printf("摄氏温度为:%.2f\n",c);
}
改后源程序如下:
void main()
{
double c,F,a;
printf("请输入华氏温度:\n");
scanf("%lf",&F);
a=F-32;
c=5.0