c语言的一个迷惑

来源:百度知道 编辑:UC知道 时间:2024/05/21 09:48:54
#include<stdio.h>
main()
{
int m=7,n=4;
float a=38.4,b=6.4,x;
x=m/2+n*a/b+1/2;
printf("%f\n",x);
}
这个题的答案是27.000000 为什么啊,不是加法的优先级别比乘法高啊,应该先算乘法啊,
前面那个打错了,应该是要先算加法啊, 我的意思是优先级别的事,是哪个先算,哪个后算啊,答案怎么来的我知道啊,还有这个题在计算过程中应该存在数据类型的转换,是怎么转换的呢?

是正确的,1/2=0,如果写成1.0/2结果就是0.5,前面没错就是27.优先级是先乘除,后加减,类型转换顺序是double<-float<-int
按你的例子来说:
先看优先级/比+要高,先算/,但有3个/,按照从右至左的顺序,就是先算1/2.
1,2都是整型,1/2的结果也是整型
然后是n*a/b,还是从右至左顺序,先算a/b,a,b是浮点型,结果就是float型,a/b的结果又和n相乘,a/b的结果是float型,按照类型转化顺序要将n转化成float再计算,结果是float型
同理,m/2的结果是3.
然后是加法,就不罗嗦了,还是按从右至左的顺序计算
计算过程:
1/2=0
a/b=6.000000
6.00000*n=24.000000
m/2=3
0+24.0000=24.00000
24.00000+3=27.000000
看在我打了这么多字的份上以及是第一个回答你问题的份上,把分给我吧

从左往右算,还有算术优先级

m/2 = 3 (整型)

n*a/b = 24.000000 (全部转为float计算)

1/2 = 0 (整型)

最后计算全部转为float

类型转换的问题,整形和整形计算,结果为整型,所以不会有小数位,当和float计算时就转成float型

m/2=3
n*a/b=24
1/2=0
所以x=27

本来就是27嘛。仔细算算