main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf("%d %d %d\n",i,j,k); } 求过程
7个回答
展开全部
个人觉得这题答案应该是2,2,2. 原因是:if((j++||k++) && i++) 首先执行的是j++,返回true,此时j=2。 但是后面的||部分(即k++)是不执行的,此时仍然是k=2。 然后再执行i++,返回true,此时i=2。 最后输出2,2,2 补充: 但是后面的||部分(即k++)是不执行的.这里是关键点! 因为||与&&的区别就是||只要在一个条件成立下就返回真值; 而&&则必须要在所有的条件都成立的情况下才返回真值。 追问: 谢谢!刚我打错了答案
展开全部
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
{
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
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
i++和 k++先做判断是否相等,然后再做++运算
++j 先做++运算,在判断值是否相等
也就是
(i==1) i++
j++ (j==3)
(k==3) k++
++j 先做++运算,在判断值是否相等
也就是
(i==1) i++
j++ (j==3)
(k==3) k++
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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++;
}
{
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++;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
133 ++j为3不用算后面k不变 i++先使用i再自增故成立所以继续输出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询