在C语言中 main() {int a=1,b=2,c=3; printf("%d,%d,%d,%d\n",a=b=c,a=b==c,a==(b==c),a==(b==c);}运行结

在C语言中
main()
{int a=1,b=2,c=3;
printf("%d,%d,%d,%d\n",a=b=c,a=b==c,a==(b==c),a==(b==c);}运行结果为什么不是3,3,3,3 这个是如何运算出来的 谁解释下
为何我运算出的结果是3,1,0,0

a=b=c //将c的值3赋给b,再将b=c的值3赋给a,整个表达式的值是3
a=b==c //VC2005测试结果是3,我自己算应该是1,这个我不是很清楚。
a==(b==c) //先判断b==c,结果是1,再判断a==1,结果是0
a==(b==c) //先判断b==c,结果是1,再判断a==1,结果是0
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-01

a=b=c,a=b==c,a==(b==c),a==(b==c)
第一个 a=b=c 是一个赋值语句 使得 a=b=c=3 所以输出 3
第二个 a=b==c 先对 b==c判断 即 3==3 是正确的 所以 a=1
第三个 a==(b==c) 由之前的赋值可以知道 b=c=3 所以 b==c 判断为 1
再对a==1 进行判断 ,结果为真 所以是1
第四个 和第三个一样 也是一样的
后来我在Cfree5.0测试了一下
发现用这样
#include <stdio.h>
main()
{
int a=1,b=2,c=3;
a=b=c;
a=b==c;
printf("%d",a);
}
你会发现输出的值是1
而如果是用
#include <stdio.h>
main()
{int a=1,b=2,c=3;
printf("%d,%d,%d,%d\n",a=b=c,a=b==c,a==(b==c),a==(b==c));}
发现是 3,0,0,0
第二个是0
我怀疑是printf函数的处理表达式的问题
每一个编译器的处理 应该是不一样的
我在第二个加了括号,也没用。结果还是0
我们现在还在学逗号运算符,这些,都是我自己推的。。
仅是愚见本回答被提问者采纳
第2个回答  2011-04-01
第一个a=b=c 是赋值语句,最终结果是a=3传给前面;第二个a=b==c,是先作比较运算==,结果为真,即非0,一般为1,所以此时a=1,并把结果赋予前面;第三个是判断语句,b==c为真,结果为1,a==1,结果为真,即1,并赋予前面;第四个同样为1;
所以最终结果是3,1,1,1的哦追问

运行结果是3 1 00

追答

这个分析归分析啊,c语言实际上是一种规范,国内大部分讲c语言的书都是基于vc6.0编译环境的,建议你在所用的环境下,设置断点,然后逐步执行,并同时设置变量监测,这个百度都可以查到的,有了这些,你就可以看到相应结果了,因为你这个题也没什么奖励,就不进一步展开了

第3个回答  2011-04-01
因为先a==(b==c);运算返回0,==是关系运算符,b==c返回0 ,a==(b==c)返回0
然后 a==(b==c), 同样得到0,
a=b==c, a的值就变成0了
a=b=c a,b,c都值为3,整个表达式返回3
所以输出 3,0,0,0
第4个回答  2011-04-01
因为后面三个是“==”(等于号),显然c是不等于b的,按逻辑值处理成0.
程序如下:
#include <stdio.h>
main()
{int a=1,b=2,c=3;
printf("%d,%d,%d,%d\n",a=b=c,a=b==c,a==(b==c),a==(b==c));}
结果为3,0,0,0
相似回答