C语言中,a=b=c,a=b==c,a==(b=c),a==(b==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,1,0,0 这个我实际操作过了。首先=和==的意思楼上各位已经说的很清楚了,一个是赋值,一个是判断,==的优先级高于=,==两边的值若相等,则判断为真,整个表达式的值为1,否则为0。这是前提,下面来看这个问题。刚才我的错误在误以为printf函数是自左向右执行,就像我们的书写习惯一样,不过实际不是。由于printf执行参数输出时是压栈操作(为了支持不定个数的参数的输出,故从后向前执行),所以会先对最后一个进行操作,也就是从右向左输出(脸红,老师貌似也讲过,不过。。。悔不该当初啊)。所以整个printf执行步骤如下:第一步是最后一个a==(b==c),b是2,c是3,明显不等,所以b==c的值是0,然后a是1,和0又不等,所以整个式子值为0;第二步为倒数第二个,a==(b=c),先将c赋给b,此时b和c都为3,再判断a与b是否相等,a为1,不等,整个式子为0;第三步:a=b==c,经过上一步,此时b和c都为3,所以判断b==c为真,值为1,然后将1赋给a,输出a,就是1;第四步:a=b=c,自右向左,先将c值赋给b,再将b值赋给a,输出a,即为3,结果3,1,0,0。这个题目告诉我们上课一定要认真听讲(再次脸红)。累死我了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-25
其实就是两个表达式的值:
赋值表达式:a=b的值是b,执行后a为b的值
关系表达式:a==b可能是 0(当a和b不相等),1(当a和b的值相等)
实例分析如下:
a=b=c执行结果是a、b、c都等于3,整个a=b=c的赋值表达式值(即要打印出来的值)也是3
a=b==c:运算符优先级相当于:a=(b==c);对于关系表达式a==c的值为0,故相当于a=0,而a=0表达式的值是0(即打印出来的值)
以此类推
第2个回答  2011-01-30
=是赋值语句 是将后头的赋给前边的变量
==是逻辑语句 是判断符号两边是否相等的
printf是从后往前判断的所以
你这个题重先判断a==(b==c)这个语句 结果为0
再判断a=b==c 因为b=c 所以b=3 a==(b=c)结果为0
再判断a=b==c 因为==优先级高 所以 b==c的结果是1 所以a=1 所以结果是1
最后判断a=b=c 从右向左算 所以最后结果为1
所以答案应该是 1,1,0,0
第3个回答  2018-03-30

“=”是赋值符,把c的值赋给b赋给a,最后a、b、c的值都相等,“==”是判断符,结果为BOOL型。

1、C语言其语言同其语言般区 ,赋值操作符 与 等于 运算符C语言区。

2、= 赋值 == 等于运算 说 a=b=c, 表达式运行a值赋给b、c运行完abc值相等。

3、 a=b==c,复合表达式先a值赋给b与c比较相等则返0,否则返非零值。

4、a==(b=c),复合表达式先执行括号内容(即b值赋给c)比较a、c相等则返0否则返非零值。

5、a==(b==c),复合表达式先比较b、c值相等则返0否则返非零值比较a与(b==c)返值,看C区 = 跟 ==。

6、 PS:LZ程序风格且习惯引用stdio.h希望改附我改写程序: #include<stdio.h> int 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));  return 0; }  运行结:3,0,0,0

本回答被网友采纳
第4个回答  2011-01-24
a=b=c b=3;a=3;
a=b==c b==c结果为1,再a=1,输出为3;
a==(b=c) 等价于a==3,输出为1;
a==(b==c) b==c结果为1,a==1结果为0,输出为0;
最后的输出是 3,3,1,0

C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)有什么区别
“=”是赋值符,把c的值赋给b赋给a,最后a、b、c的值都相等,“==”是判断符,结果为BOOL型(结果只有0和1,只有对和错)第二句b与c比较是否相等再赋值给a,我也不多说了,你自己也应该能理解其他的了。

C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)有什么区别
C语言和其他语言不同,在其他语言中,一般不区分 赋值操作符 与 等于 运算符,但是C语言很区分。= 是赋值 == 是等于运算 也就是说,a=b=c, 是一个表达式,运行到这里时,将a的值赋给b、c,运行完后abc的值相等;a=b==c,是一个复合表达式,先将a的值赋给b,然后与c比较,如果相等则返回...

a=b=c,a=b==c,a==(b=c)和a==(b==c)的区别
a=b=c 表示把c的值赋给b,然后把b的值赋给a,所以a=b=c=3 a=b==c 表示先判断b是否等于c,(“==”表示判等。b=2,c=3,b不等于c)所以a=0.a==(b=c)表示把c赋值给b,然后将a的值和b的值进行比较。a==(b==c)表示先判断b是否等于c,然后其值再与a判断。注意:==的值只有...

C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)为什么结果是3,3,0,0?
a = b == c:这是一个赋值和相等运算符的组合表达式。由于相等运算符(==)的优先级高于赋值运算符(=),所以首先计算b == c。如果b和c相等,则表达式的结果为1,否则为0。然后,将这个结果赋给a。假设b和c的值都为3,那么a的值将被设置为1。a == (b = c):这是一个赋值和相等运算...

c语言a==b==c跟a==b&&b==c的区别
答案为1,然后1==C,即1==0,答案为假,即最后答案为0而对于A==B&&B==C来说,A==B,0==0,正确即为1,接着计算 B==C,即 0==0,答案正确即为1,最后计算 1==1,答案正确,即为1,所以最后答案 为 1,明白了吗,但千万不要用 A==B==C这种式子来编程哦,切记!

c语言a==b==c跟a==b&&b==c的区别
!= (不等于)运算符的优先级要大于&&(逻辑与)的优先级,在运算中优先级高的运算符先参与运算,其实是这样的 if((a!=c)&&(a!=b)&&(b!=c));如果a不等于c,并且a不等于b,并且b不等于c,判断a,b,c三者不相等,然后执行一个空语句;也就是啥也没做。

a== b和b== c的区别有哪些?
这个太有区别了!a==b==c 是一个关系表达式,由于运算符"=="具有左结合性,故其运算顺序是:((a==b) ==c )若a=5,b=5,c=5,则a==b的值为1,而1==c的结果为0 a==b,b==c是分别判断a和b以及b和c关系运算 补充,楼上说a==b==c是先执行b==c是错误的,因为C语言中只有赋值...

c语言中a= b= c的区别是什么?
一、a==b>c和a==(b>c)是一样的表达方式,先判断b>c是否成立,如果成立,用1和a比较,如果a=1,则整个表达式为1。1、若为真,a为1则该表达式为真,即该符合表达式的值为1。2、若为假,a不为0则该表达式为假,即该符合表达式的值为0。二、a=b>c和a=(b>c)是一样的表达方式,先...

C语言程序中a=b==c是什么意思
(a>b>c) 的 表达方式 在 c语言 中是错误的。但编译器 不显示 出错信息。正确的写法 是 (a>b && b>c ) 真=1,假=0,(a>b && b>c ) 条件成立得真,就是得1,d=1; 否则 d=0; 178rtrdux | 发布于2011-06-25 举报| 评论 2 0 首先因为==号比=的优先级高,所以先执行b==c,明显b等2...

c语言中 a=b>c 和a==b>c 中有啥子不同
c语言中 a=b>c 和a==b>c区别为:执行步骤不同、结果值不同、结果对象不同。一、执行步骤不同 1、a=b>c:a=b>c的执行步骤为b>c。2、a==b>c:a==b>c的执行步骤为先b>c,再a==(b>c)。二、结果值不同 1、 a=b>c:如果b比c大,则 a的结果值为true;如果b比c小或相等,...

相似回答