C语言求助。

C语言求助。结果为什么是1和2

这个考到了两个知识点
知识点1,优先级: “s=c1==c2”这条语句中“==”高于“=”所以先算"c1==c2",相当于s=(c1==c2) ("=="是判断两个数是否相等,相等则返回“1”,不相等返回“0”)所以由第四行的赋值语句可以知道两者相等,故返回“1”。所以s=1(给s赋值)
知识点2,或运算的短路(表达式1||表达式2):当表达式1的返回值为1时,就不用执行表达式2了。当表达式1返回值为0时,则继续执行表达式2,且表达式2的返回值作为整个表达式的值。所以这里(s1=c1==c2)为表达式1,因为它的返回值为1了,就短路了,也就不用执行表达式2。所以程序输出语句中s的值就为1,t的值没被赋值,为原来的值:2.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-02-01

    程序都是从右往左执行的,你看(s=c1==c2)是先执行c1==c2,c1==c2是一个判断,c1等于c2则c1==c2的值是1,1又赋值给s,所以s=1;

    因为(s=c1==c2)||(t=c3>c4)只要||前面的(s=c1==c2)成立了后面的(t=c3>c4)就不执行,所以t还是最上面的t=2,因此结果是这样的,你可以单独输出c1==c2,结果一定是1;

本回答被提问者采纳
第2个回答  2018-02-01
==优先于=,而c1==c2结果为真,其值为1,故整个或运算符结果为真,发生“短路”,或符号右边的语句不执行
第3个回答  2018-02-01
1:先说 s=c1==c2,因为c1==c2结果为true(true代表1),所以s=1;

2:“||”这是“短路或”,前面已为true,“||”后面的没有参与运算,所以t的值不变,还是2
第4个回答  2020-01-13
相似回答