当前是 9 月,编写 C++ 代码求 N 个月后的月份。横线处应填入的代码是( )。
int N, M;
cin >> N;
M = ___________;
if (M == 0)
printf("%d个月后12月", N);
else
printf("%d个月后是%d月", N, M);答案D。先分析已有代码的功能,确定输出目标,再反推横线处需要的代码。可用代入法验证。
将每个选项代入横线处验证是最可靠的方法。注意代码的完整逻辑和输出格式。
【考点】取余运算|循环计数
🎯 考纲定位 GESP 一级“基础编程”模块,考查取余运算在周期场景的应用。命题人专盯“忘记加起始月份”这一新手硬伤,用 0 代表 12 月的特殊输出规则放大错误。
🧠 解题思维 月份是模 12 循环:(9 + N) % 12 直接得到 1-12 余数(0 对应 12 月)。若用 N % 12 会忽略起始月,导致 N=12 时错误输出 9 月;若用 9 + N % 12 会溢出 12(如 N=20 得 17),只有 D 项能同时处理“加法进位”与“模数归一”。
🪤 陷阱拆解 A 项漏加起始月,N=12 时错判为 9 月;B 项先取余再加 9,N=20 时 9+8=17 越界;C 项是年份计数而非月份;D 项 (9+N)%12 正确映射 9+N 到 0-11,0 触发"12 月”输出,完美契合题意。
🔄 反命题思维 若把起始月换成 1 月,答案变为(1+N)%12;若把输出条件改成“余 0 输出 0 月”,整道题就变成考察边界判断而非月份映射。