首页 > 试题广场 >

以下程序的运行结果是

[单选题]
以下程序的运行结果是:
#include <iostream>
using namespace std;
int main(void) {
    int m = 5;
    if (m++ > 5)
        cout << m << endl;
    else
        cout << --m;
    return 0;
}
  • 4
  • 5
  • 7
  • 6
推荐
B。
m=5,if(m++)>5判断时,++在判断后执行,因此判断为false,之后m自增为6;然后执行cout << --m,自减操作在输出前执行,因此输出5.
编辑于 2016-11-03 08:05:22 回复(6)
注意条件判断,做题一定要注意。if与else的组合时,根据条件判断要执行哪一个分支。
m=5,if(m++)>5判断时,++在判断后执行,因此判断为false,之后m自增为6;然后执行cout << --m,自减操作在输出前执行,因此输出5.
C++ primer解释前缀和后缀,用顺序点和副作用,解释的很清楚。
发表于 2016-05-21 13:13:32 回复(0)
这道题简直是一个坑啊, if(m++>5)cout<<m<<endl;这个if里面的表达式虽然不成立,但是m的值自增了1,变成了6,最后输出的时候自减一次又变成了5.
发表于 2016-03-07 19:20:48 回复(0)
虽然不符合判断条件,但是判断了就会就行自增运算
发表于 2016-10-09 21:31:56 回复(0)
C++对前缀和后缀有个副作用和顺序点,所以if(m++)>5,不是一个完整的表达式,完整的顺序点,整的顺序点一般以;号结尾。
是先用原值比较值再加一,所以if并没有通过,执行else,
到else里的时候,m的值才会变成6,这时,cout 语句是一个完整的表达式,所以m的值会--,打印出5.
在C++ primer解释前缀和后缀,用顺序点和副作用,解释的很清楚。
发表于 2015-08-26 09:42:01 回复(0)
int main(void){
    int m = 5;
    if(m++ > 5){        // 先判断m > 5,为false,随后m+=1,m=6
        cout<<m<<endl;
    }
    else{
        cout<<--m;      // 此时m=6,--m后,m=5
    }
}

发表于 2020-10-05 11:08:49 回复(0)
m=5,if(m++)>5判断时,++在判断后执行,因此判断为false,之后m自增为6;然后执行cout <<--m,自减操作在输出前执行,因此输出5.
发表于 2021-11-02 10:10:36 回复(0)
虽然if条件不成立,但是m的值自增为6,执行else时再自减变为5。
发表于 2023-10-07 19:05:28 回复(0)
晕,先加后减
发表于 2023-03-08 09:01:58 回复(0)
先判断再++,最后输出
发表于 2022-04-27 10:59:40 回复(0)
即使判断失败,m也是++为6,然后再执行--m,最后值为5
发表于 2022-03-12 21:49:39 回复(0)
<p>判断ture与false后,执行自加和自减的。若为false仅仅不执行大括号内的语句?</p>
发表于 2020-12-25 12:47:27 回复(0)
if(m++>5),此时m++的值为5,但是运行完之后m=6,--m的值为5且m=5
发表于 2020-08-05 16:32:40 回复(0)
符号在后就后加减±
发表于 2019-02-25 10:15:38 回复(0)
intmain(void){
 intm=5;
 if(m++>5)cout<<m<<endl;  //m++>5为false,此时m的值为6
 elsecout<<--m;  //--m,输出m的值为5
}
发表于 2017-06-20 15:06:25 回复(0)
有一点坑
发表于 2017-06-13 18:07:53 回复(0)
m++还是执行了
发表于 2017-04-18 22:46:09 回复(0)