一道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,麻烦把原因说详细点,谢谢
展开
 我来答
snje1987
2008-06-08 · TA获得超过160个赞
知道小有建树答主
回答量:89
采纳率:0%
帮助的人:109万
展开全部
c进行条件判断的时候执行的是“短路求值”,就是说 如果一些并列的条件互相之间是“或”的话,找到第一个对的之后就不再计算后面的了,如果是“与”那找到第一个不对的就不向后计算了,所以执行if((j++||k++)&& i++)时发现j++||k++中 j++ 不为0,整个条件一定为真,k ++ 就没计算,所以最后k为2.
rofan
2008-06-08 · TA获得超过120个赞
知道答主
回答量:136
采纳率:0%
帮助的人:0
展开全部
j++和k++和i++都是先使用各自初始值,再对他们执行++操作运算。这个if语句他是先算的(j++ || k++),||是只要有一边为真整个就为真。这里两边都不为0,所以是真的,使用完他们后,就各自执行了++运算,各自增加了1(最后是2)。然后他又执行(j++ || k++) && i++)。&&是要两边为真整个才为真,i的值也不为0,左边也为真,所以这个if语句就为真了。接着,就执行printf语句,接下来输出的值就是C啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
WCYSE
2008-06-08 · 超过11用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:32.8万
展开全部
C语言中&&、||运算都是短路双目运算,&&只要第一个参数为假就不计算第二个参数的值了,||运算只要第一个参数为真则就不计算第二个参数的值了,整个表达式的值为真
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
z周云云
2008-06-09 · 超过30用户采纳过TA的回答
知道答主
回答量:141
采纳率:0%
帮助的人:99万
展开全部
你想到先C,也就是把i,j 的值你算透了,为什么没有算到k的值呢?
i++,j++,k++它们都是一样的,都会自增的,所以选C
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式