我不确定这里发生了什么,但是我有一个代码示例,它没有产生我期望的,这里有一部分问题(只是一个部分):
printf("Now enter a Fahrenheit to convert to Centigrade\n");
fflush(stdout);
scanf("%f",&c);
d = (c-32)*(5/9);
printf("%f\n",c);
printf("Your result in Centigrade is %f\n",d);
输入212输入的结果是:您的摄氏度结果为0.000000
当我做一个小改动时:
printf("Now enter a Fahrenheit to convert to Centigrade\n");
fflush(stdout);
scanf("%f",&c);
d = (c-32)*5/9;
printf("%f\n",c);
printf("Your result in Centigrade is %f\n",d);
当我输入212输入时的结果是:你的摄氏度结果是100.00000,这是正确的。
在数学中(a + b)*(c / d)与(a + b)* c / d相同;那么只有额外的括号,零结果会发生什么?
答案 0 :(得分:3)
由于两个操作数都是整数,5/9
因为执行整数除法而得到0。请改用5./9
。
答案 1 :(得分:0)
在这里,你需要注意两件事。
首先,()
运算符的优先级高于*
或/
运算符。
其次,如果表达式包含float
和int
,int
将自动转换为float
。
现在你的第一种情况是:
(c - 32)
,(此处32转换为32.0并完成计算)。 (比如说这等于x
)(5/9)
。这两个表达式都是int
,因此没有任何内容转换为float。对于int
计算,5/9
等于0
。假设这等于y
x
* y
,由于y
为0
,您的答案为0.0
。 然而,在你的第二种情况下会发生什么:
(c - 32)
,(此处32转换为32.0并完成计算)。(c - 32)
* 5
已计算完毕。这里5转换为5.0
并完成计算。 (说这等于x
:x
是浮动的)x / 9
。此处9
转换为9.0
并完成计算。 所以,你可以在第二种情况下看到,没有与0
相乘 - 就像第一种情况一样 - 因此你得到一个非零(希望是正确的)答案。