几个关于逻辑运算的C语言题目

来源:百度知道 编辑:UC知道 时间:2024/07/07 08:25:24
.a.b.c.d.m.n均为int型变量,且a=5,b=6,c=7,d=8,m=2,n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后n的值为?
答案:2

2.设x、y、z均为int型变量,则执行语句:x=y=3;t=++x||++y;后y的值为?
答案:3

3.#include<stdio.h>
main()
{int a=0,b=0,c=0;
if(++a>0||++b>0)
++c;
printf("\na=%d,b=%d,c=%d"a,b,c);}
答案:a=1,b=0,c=1

求答案的解答说明啊!!!!
呃……都是书上给出的答案啊,有错吗????
求答案的解释说明啊!!!!!!

哦,这个我知道,书上和老师都会提到这个问题的,在逻辑运算中会出现“短路”的现象,例如“&&”并列语句当中如果第一个为假的话就结果直接为零,不执行后面的运算;“||”或语句中如果第一为真结果直接为1,不执行后面的语句。这样你就明白为什么第一道题中的n不是0而是原来的值2,第二道题仲的y是3而不是4,第三道题仲的b是0而不是1啦

5>6是假,所以&&的结果肯定是假,右边的n=c>d就没有运算了,所以n仍为2

同理++x=4,为真,所以||结果肯定是真,右边的++y没有运算

还是同理,++a=1>0为真,所以++b没有运算,++c算了

(m=a>b)&&(n=c>d) 结果该是0 因a不大于b m=就为假 后面的C++就不运算了

第二个是对的
++a 所以A=1
后面++b不执行
然后++c;

应该没错,典型的短路求值。
分析一个吧:
(m=a>b)&&(n=c>d)
a > b false
m = a >b m = 0
(m = a>b) 整个表达式结果也是0
因为左边表达式结果为假,根据短路求值规则,右边不用求解,所以n不变
结果是: 2

(m = a > b)结果为0
(n = c > d)结果为1
(m = a > b) && (n = c > d)结果为1
n = 2

2楼的回答很好,给他加分