一道c语言题目,请大家指点下
main(){inti=1,j=1,k=2;if((j++||k++)&&i++)printf("%d,%d,%d\n",i,j,k);}执行后输出结果是A)1,1,2B...
main()
{ int i=1,j=1,k=2;
if((j++||k++)&& i++)
printf("%d,%d,%d\n",i,j,k);
}
执行后输出结果是
A)1,1,2
B)2,2,1
C)2,2,2
D)2,2,3
系统给的答案是c,但是我想是D,还请高手说下,为什么选c,麻烦把原因说详细点,谢谢 展开
{ int i=1,j=1,k=2;
if((j++||k++)&& i++)
printf("%d,%d,%d\n",i,j,k);
}
执行后输出结果是
A)1,1,2
B)2,2,1
C)2,2,2
D)2,2,3
系统给的答案是c,但是我想是D,还请高手说下,为什么选c,麻烦把原因说详细点,谢谢 展开
4个回答
展开全部
j++和k++和i++都是先使用各自初始值,再对他们执行++操作运算。这个if语句他是先算的(j++ || k++),||是只要有一边为真整个就为真。这里两边都不为0,所以是真的,使用完他们后,就各自执行了++运算,各自增加了1(最后是2)。然后他又执行(j++ || k++) && i++)。&&是要两边为真整个才为真,i的值也不为0,左边也为真,所以这个if语句就为真了。接着,就执行printf语句,接下来输出的值就是C啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言中&&、||运算都是短路双目运算,&&只要第一个参数为假就不计算第二个参数的值了,||运算只要第一个参数为真则就不计算第二个参数的值了,整个表达式的值为真
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你想到先C,也就是把i,j 的值你算透了,为什么没有算到k的值呢?
i++,j++,k++它们都是一样的,都会自增的,所以选C
i++,j++,k++它们都是一样的,都会自增的,所以选C
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询