在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

int a=1,b=2,c=3; printf("%d%d%d\\n",a=b=c,a=b==c,a==(b=c),a==...
答案应该是3 1 0 0 从右向左计算并压栈:a==(b==c),由于b!=c,所以b==c=0;而a!=0,所以a==(b==c)=0。a==(b=c)使b=3,而a!=3,所以a==(b=c)=0。a=b==c,由于b==c成立(上面已经使b=c=3了),所以b==c=1;所以a=b==c是把1赋给a,使a=1。a=b=c,...

...main () { int a=1,b=2,c=3; if (a>c) b=a;a=c;c=b; printf ("%d...
a=c;\/\/ 执行 c=b; \/\/ 执行 也就是说只有 b=a 是 if 条件成立时执行的语句。由于 a>c 条件不成立,所以不执行 b=a;

C语言中设a=1,b=2,c=3,d=4;执行printf(%d%d%d\\n",a==b==c,c=a==b...
答案 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,...

main( ) { int a=1,b=2,c=3; printf(“%d”,c>b>a); }
c>b结果是1 然后再继续 1>a 结果为零。再不然,你把a初始化为0,结果为1

main(){ int a=1,b=2,c=3;if(c=a)printf("%d\\n",c);else printf("%\\n...
if(c=a)在c语言中 =是赋值运算符, 运算结果 c=1,c=a 作为整个表达式的结果,是运算后的值也就是 1,if 语句需要一个条件表达式,任何非零的值就是 真值,而零就是假值 另c语言中的相等比较运算符是 ==

...main() { int a=1,b=2,c=3,d=4; printf("%d\\n",(a+b,b+c,c+d...
这里的(a+b,b+c,c+d)是一运算表达式,有"+"运算和","运算,printf("%d\\n",(a+b,b+c,c+d))就是将这个运算表达式的结果打印到屏幕上。

...main() { int a = 1,b = 2; printf ("%d\\n",a=a+); }
1.a= b+ c 所以表达式值为非零,为真,执行printf ("###\\n");2.自增运算符后缀,所以先引用,后自增,m为2,m>2为假,然后m自增一值为3,执行else部分,m+2=5 7.注意是x=2 ,是=,赋值号,也就是x被赋值为2,表达式非零,为真执行y= y+2;8.i为10,所以到case 10部分i+=1;i值为11...

...x*(x-1) main(){ int a=1,b=2; printf(“%d\\n
define MAX(X) X,在编译时候,只做简单替换。比如说 在main()函数中,int x=MAX(a+b)*MAX(a+b),c编译器在编译的时候,将MAX替换,变成a+b*a+b。

c语言中int a=1,b=2,c=3;(a=b+c)||(++b);printf("a=%d,b=%d,c=%d\\...
||运算符的短路效应,导致左操作数求值后,由于左操作数的值为5(真),故没有对右操作数求值,即b的值没有变化 故a值为5,bc都仍是原值

C语言中int a=1,b=2,c=3; c=(a+=a+2),(a=b,b+3); printf
int a=1,b=2,c=3; c=(a+=a+2),(a=b,b+3); printf("c=%d",c);程序运行后,将输出:c=4 因为, c=(a+=a+2),(a=b,b+3);是一个逗号表达式,它等价于:(c=(a+=a+2)),(a=b,b+3); \/\/因为逗号运算符的优先级为最低。

相似回答