救命啊!!!!!!!1分析下个C程序 基础题

来源:百度知道 编辑:UC知道 时间:2024/05/09 11:43:35
1/2为什么对于0? 它是float 类型啊 又不是整型 不是0。5吗 ?

还有s2的结果为什么是9。000000啊?
main()
{
float a=2,b=4,h=3,s1,s2;
s1=(1/2)*(a+b)*h;
s2=h/2*(a+b);
printf("s1=%f\ns2=%f\n",s1,s2);
}
结果:s1=0.000000
s2=9.000000 为什么?

因为立即数默认是整型数啊 - 所以1/2运算结果是0. 你改成1.0/2.0就好了
关于s2, 因为h被声明成浮点类型, 所以就按浮点运算了

因为在TC环境下,对与“/”的用法是除号两边至少有一个带小数点,既FLOAT类型,改为1.0/2或1/2.0或1.0/2.0都可以得到正确答案
S1的问题同第一个一样,主要是1/2没的到解决,改成FLOAT类型(就是加小数点)就可以了,对与S2是因为C语言里有考虑优先级的问题,你的本意可能是2乘以(A+B)后再被H除,但因为优先级的问题(括号优先级最高,乘优先级小于除)所以会得到S2是9.000000的答案,要想得到正确答案,把H/2改成H/2.0再加括号就可以了