C语言逻辑语言运算顺序有这样一个问题:int a=1,b=2,c=3,d=4,m=5,n=6;a=(m=a>b)&&(n=c>d)||++a==b--;要求输出a,b,m,n的值?另外再问一下在哪些情况下逻辑语句不用每条都完全运算出来?

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/09 03:45:19
C语言逻辑语言运算顺序有这样一个问题:inta=1,b=2,c=3,d=4,m=5,n=6;a=(m=a>b)&&(n=c>d)||++a==b--;要求输出a,b,m,n的值?另外再问一下在哪些情况

C语言逻辑语言运算顺序有这样一个问题:int a=1,b=2,c=3,d=4,m=5,n=6;a=(m=a>b)&&(n=c>d)||++a==b--;要求输出a,b,m,n的值?另外再问一下在哪些情况下逻辑语句不用每条都完全运算出来?
C语言逻辑语言运算顺序
有这样一个问题:
int a=1,b=2,c=3,d=4,m=5,n=6;
a=(m=a>b)&&(n=c>d)||++a==b--;
要求输出a,b,m,n的值?
另外再问一下在哪些情况下逻辑语句不用每条都完全运算出来?

C语言逻辑语言运算顺序有这样一个问题:int a=1,b=2,c=3,d=4,m=5,n=6;a=(m=a>b)&&(n=c>d)||++a==b--;要求输出a,b,m,n的值?另外再问一下在哪些情况下逻辑语句不用每条都完全运算出来?
a=(m=a>b)&&(n=c>d)||++a==b--;
首先是
m=a>b,a>b为假,所以m=0.
&&是有一个是0就是假,||是有一个为1就为1,
所以不短路的条件都看运算符前的,
如果&&前是0,不运算后面,结果必为0;
如果||前是1,不运算后面,结果必为1.
所以(m=a>b)&&(n=c>d)前面的是0,所以必为假,因此)(n=c>d)就不用看了,也不计算,n的结果也没改变,还是6.(m=a>b)&&(n=c>d)结果就是0.
变成 0 ||++a==b--;
所以要看后面的,a,b之前值没改,所以++a是2,b--是先赋值后减,所以赋值时还是2.
所以++a==b-- 结果是1.然后赋值给a,因此a=1,b因为前面自减,所以赋值2自减的结果是1,所以b=1.
结果 1 1 0 6