下面 C++ 代码执行后的输出是( )。
int m = 14;
int n = 12;
if (m % 2 && n % 2)
cout << "都是偶数";
else if (m % 2 == 1 && n % 2 == 1)
cout << "都是奇数";
else
cout << "不都是偶数或奇数";这题考取模运算与逻辑运算符的结合。别被‘都是偶数’的直觉带偏,先算 m%2 和 n%2 的值,再看&&的短路求值,最后才决定进哪个分支。
很多新手看到 m=14,n=12 都是偶数,就下意识觉得第一行 if 会成立,直接选 A。其实&&要求两边都为真才为真,这里两边都是 0,第一行假;第二行又要求两边都等于 1,显然也不成立,只能落到 else。另外,C 项‘不都是偶数或奇数’读起来拗口,容易让人怀疑是不是命题人写错了,实际上它只是对‘非(都偶 或 都奇)’的直译,逻辑上完全正确。
【考点】取模运算|逻辑运算符|条件分支
1. 考纲定位:GESP 一级「算术运算」与「逻辑表达式」交叉点。命题人专盯新手对&&短路求值的直觉误判——把m%2 && n%2当“都是偶数”的判据。
2. 解题思维:m=14,n=12,两数均偶,故 m%2=0,n%2=0,第一行条件 0&&0 为假;第二行 0==1 且 0==1 亦假;落入 else 输出“不都是偶数或奇数”。通法:先算取模结果再代入逻辑链,别凭“偶数”直觉跳步。
3. 陷阱拆解:A 项诱骗点在于把&&误作“或”的关系;B 项直接错判奇偶;C 项才是 else 的默认出口。最阴险处是第一行看似“都是偶数”却因&&为 0 而失效。只背结论不看求值顺序必掉坑。
4. 反命题思维:若把&&改成||,第一行即真,输出会变;若改数为奇数,第二行才真。刷到同类题先问“逻辑运算符到底在干什么”,别被表象带偏。
5. 考频与趋势:取模运算在题库共考过 1295 题,覆盖 11 个考试级别(2008-2026);逐年分布:2008 年 1 题、2011 年 1 题、2019 年 3 题、2023 年 287 题、2024 年 413 题、2025 年 401 题、2026 年 109 题、null 年 80 题;分赛事:GESP 一级 332 题、GESP 二级 283 题、GESP 三级 215 题、GESP 四级 186 题、GESP 七级 91 题、GESP 八级 79 题、GESP 六级 78 题、GESP 五级 23 题、CSP 提高级 3 题、CSP 入门级 3 题、NOIP 提高组 初赛 2 题。控制结构(含 if-else 链)共考过 429 题,覆盖 7 个级别,其中 2023 年 81 题、2024 年 138 题、2025 年 160 题、2026 年 45 题,GESP 一级 133 题、二级 133 题、三级 84 题、四级 76 题。这两类考点在 GESP 一级中占比极高,说明命题人偏爱用简单算术包装逻辑判断,尤其喜欢把“都是偶数/奇数”这种直观结论拆成多条件分支,让学生必须一步步模拟。
6. 预测:基于数据,2023-2025 年取模与逻辑结合题占比持续攀升(2025 年 401 题),且 GESP 一级控制结构题量稳定在 130+,未来仍会高频出现此类“先算后判”的陷阱题。暂无足够依据预测具体年份题干形式变化,但可预期会继续用看似合理的分支条件诱导学生跳步。
7. 总结:这题核心就是别被“都是偶数”的表象迷惑,老老实实算 m%2 和 n%2,再按&&规则走一遍逻辑链,答案自然落到 C。