int i=1,j=1,k=2; if(j--||k++&&++i) printf("%d,%d,%d\n",i,j,k); 怎么做,求详解、
6个回答
展开全部
结果是1,0,2
解释:if条件句中的
j--||k++&&++i是一个逻辑表达式,逻辑运算符的结合性是左结合,当逻辑表达式进行运算时,首先判断j--的真值,其真值为非零(也就是1),这样就可以判断出逻辑表达式为真,所以逻辑表达式后面的语句将不再执行,最后结果是i不变,j-1,k不变
解释:if条件句中的
j--||k++&&++i是一个逻辑表达式,逻辑运算符的结合性是左结合,当逻辑表达式进行运算时,首先判断j--的真值,其真值为非零(也就是1),这样就可以判断出逻辑表达式为真,所以逻辑表达式后面的语句将不再执行,最后结果是i不变,j-1,k不变
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
优先级
&&
大于
||
,只是j--||k++&&++i相当于j--
||
(k++
&&
++i),把(k++
&&
++i)当做一个整体表达式,而不是(j--||k++)&&++i而已,告诉你需要用到后面的时候的一个运算顺序,而不是(k++
&&
++i)先做运算,运算的先后关系是由if语句的顺序决定的,而if的判断顺序是从左到右的顺序,&&和||的优先级无关。
其他的参考“倒霉熊lujin”的答案。
&&
大于
||
,只是j--||k++&&++i相当于j--
||
(k++
&&
++i),把(k++
&&
++i)当做一个整体表达式,而不是(j--||k++)&&++i而已,告诉你需要用到后面的时候的一个运算顺序,而不是(k++
&&
++i)先做运算,运算的先后关系是由if语句的顺序决定的,而if的判断顺序是从左到右的顺序,&&和||的优先级无关。
其他的参考“倒霉熊lujin”的答案。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
前面的大哥说得很对,关键就是while()语句里面的特点是j--,先用j的值比较再减1的,所以最后一次循环的情况是:
i=5:
j=1(来自语句
j=i%2
)
k=7
j=0
k=8
j=-1(拿此时的j与0比较不成立,只是不执行相应语句而已,但是条件里的语句要执行,再自减1)
j=-2
i=5:
j=1(来自语句
j=i%2
)
k=7
j=0
k=8
j=-1(拿此时的j与0比较不成立,只是不执行相应语句而已,但是条件里的语句要执行,再自减1)
j=-2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
j--满足条件就不看k++,所以k不变,然后j--之后,j为0,k为2
++i当中i不变,i为1
++i当中i不变,i为1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询