main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf("%d %d %d\n",i,j,k); } 求过程

 我来答
渣110147062628
2015-02-15 · TA获得超过196个赞
知道答主
回答量:105
采纳率:0%
帮助的人:118万
展开全部
个人觉得这题答案应该是2,2,2. 原因是:if((j++||k++) && i++) 首先执行的是j++,返回true,此时j=2。 但是后面的||部分(即k++)是不执行的,此时仍然是k=2。 然后再执行i++,返回true,此时i=2。 最后输出2,2,2 补充: 但是后面的||部分(即k++)是不执行的.这里是关键点! 因为||与&&的区别就是||只要在一个条件成立下就返回真值; 而&&则必须要在所有的条件都成立的情况下才返回真值。 追问: 谢谢!刚我打错了答案
飘零的狐狸
推荐于2018-03-11 · TA获得超过1.8万个赞
知道大有可为答主
回答量:9251
采纳率:77%
帮助的人:2347万
展开全部
main()
{
int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k);
}
首先 i++==1&&(++j==3||k++==3) 是一个逻辑表达式
i++==1&&(++j==3||k++==3) 分为两部分
i++==1 和 (++j==3||k++==3)
他们的关系是 并且的关系
所以 两部分都会被执行
i++==1
是先 判断i是否等于1 (因为++在后面) 此时i=1;
在这句话执行完之后i=2
然后执行第二部分
(++j==3||k++==3)
又分为两部分
++j==3 和 k++==3 两部分
这两部分是 或者的关系
如果第一部分满足条件 就不执行后面的
如果第一部分不满足条件 就执行后面的部分
++j==3
是j先自己加1然后判断j是否等于3
这部分的结果为真
所以后面的部分不执行
最后的结果为 i=2 j=3 k=3
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fec0ca6
2011-06-17 · 超过10用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:30.8万
展开全部
i++和 k++先做判断是否相等,然后再做++运算
++j 先做++运算,在判断值是否相等
也就是
(i==1) i++
j++ (j==3)
(k==3) k++
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
thebabe
2011-06-17 · TA获得超过829个赞
知道小有建树答主
回答量:729
采纳率:66%
帮助的人:518万
展开全部
if(i==1)
{
i++;
++j;
if(j==3)
{
if(k==3)
{
k++;
printf("%d %d %d\n",i,j,k); // 所以结果为:2 3 4
}
else
{
k++;
}
}
else
{
k++;
}
}
else
{
i++;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冰山珀西
2011-06-17 · TA获得超过3392个赞
知道小有建树答主
回答量:1673
采纳率:0%
帮助的人:446万
展开全部
133 ++j为3不用算后面k不变 i++先使用i再自增故成立所以继续输出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式