C语言中设a=1,b=2,c=3,d=4;执行printf(%d%d%d%d\n",a==b==c,c=a==b,c==(a=b),b=c);的结果是什么

如题所述

答案 1113
从右到左运行:
第一步:b=c 其他值 a b c d
1 3 3 4
第二步:c==(a=b) 先运行a=b,值为3,在运行c==3,c的值为3, 结果为1,其他的值 a b c d
3 3 3 4
第三步:c=a==b 先运行a==b,第二步可以看出a=3,b=3,a==b的值为1,将其付给c ,即c=1
其他值为 a b c d
3 3 1 4
第四步:a==b==c,先运行a==b,第三步可以看出a=3,b=3,a==b值为1,在求(a==b)==c,第三步c的值为1,所以(a==b)==c为1.
注: 第一:==运算符具有左结合性
第二:关系运算符优先级高于赋值运算符,即==比=高,先运行==
第三:其实printf运行的顺序不一定是从右到左,也有从左到右的,这个要看电脑和程序的,所以,一般都是先测试下,看看是从右到左,还是从左到右,我电脑是从右到左,结果已给,如果从左到右,按我给的步骤分析,可以出来的
^_^
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-16
#include<stdio.h>
int main()
{
int a=1,b=2,c=3,d=4;

printf("%d%d%d%d\n",a==b==c,c=a==b,c==(a=b),b=c);///执行顺序是从右向左的先执行b=c,此时b和c都是3,b赋给a a的值也3,所以c==(a=b)等式成立返回1 前面的两个式子均成立返回1.输出仍从左向右输出一次为 1 1 1 3
return 0;
}追问

为什么要从右到左执行呀?

追答

这是printf函数的功能就是这样的,具体的三楼的说的已经很细致了,我也不再赘述了

第2个回答  2011-11-16
结果1113
a==b==c相当于a==(b==c)
从右到左
b=c,是给b赋值 b=3;
c==(a=b),这个时候 b为3,a被赋值3,
a和c相等,在c语言中c==(a=b)的结果为1,c语言没有bool数据类型
a==b==c同上也是真追问

为什么是这个答案呀

相似回答