c++问题:i最后等于多少?

来源:百度知道 编辑:UC知道 时间:2024/05/21 19:26:00
int i = 1;
int j = i++;
if((i>j++) && (i++ == j)) i+=j;

我认为i=1,因为i>j++ 不满足,所以下面都不执行。
怎么答案上是5呢?

我算错了啊!
i>j++是满足的。 i=2,j++后j才等于2.
i>j++后i=2,j=2.
i++ == j后i =3,j=2.
所以等于5

答案就是5!

第二句: j=1,然后i++后变成2
i>j++ 先比较i>j(结果为真)
再j++ ,j变成2
i++ == j 先比较i == j(结果也为真)
再i++ ,i变成2
最后i+=j //i = 2 + 3 = 5

希望我的回答对你有所帮助

在if语句之前,i和j的值分别为2和1(j=i++是先取i的值(i=1)给j,再把i加1,i的值变成2)。

在if语句中,从左到右进行判断,i>j++的顺序是取j的值(此时j的值是1)和i做比较(此时i等于2,j等于1),2>1,所以“&&”左边的逻辑表达式成立;
之后,j再自加1,此时i和j的值分别是2和2;

再取i和j比较,都为2,所以“&&”左边的逻辑表达式也成立,再把i加1,此时i和j的值为3和2;
由于i>j++和i++==j这两个表达式都成立,所以执行i+=j,最终i的值就为 5 了。

int i = 1;
int j = i++; //j=1;赋值后i=2
if((i>j++) //i=2,j=1,比较后j++,j=2
&& (i++ == j)) //i=2,j=2,比较后i++,i=3
i+=j; //i=5,j=2

i>j++ 满足,因为 ++前缀表达式增1.后缀表达式不增1

2