如下 C++ 代码执行时,其说法错误的是( )。
int N, M;
cin >> N >> M;
if (N > M)
cout << "A " << (N - M);
else
cout << "B " << (M - N);答案C。if-else可以嵌套,if子句和else子句都可以嵌套if-else。else与最近的未匹配if结合。
else与最近的未匹配且未加花括号的if结合。建议用花括号明确层次。
【考点】输入输出|条件分支|基本运算
考纲定位:GESP一级《C++基础语法》控制流模块,命题人用一道"if-else"判定卡住所有没分清"真/假/等"边界的学生。
解题思维:先读题——代码按N与M大小关系输出不同前缀和差值。关键观察:只有N>M走A分支,否则(含N=M)走B分支。代入每组数据:4>3→A 1;3<4→B 1;3=3→B 0;4=4→B 0。直接比对选项,C说输出A 0,与执行结果矛盾。
陷阱拆解:C项是典型偷换概念陷阱。命题人把"N=M"归入else分支却故意写成A的前缀,诱导只背"if-N>M-A, else-B"模板的考生掉进"等号算if"的误区。绝对化表述"如果输入3 3,将输出A 0"正是错误所在。
反命题思维:若把条件改成N>=M,则3 3会输出A 0,C就变正确;若把else改为仅N==M时输出B,则4 4会输出B 0,D仍对。刷到类似题先问"命题人想考我什么",别只记结论。