GESP 一级 · GESP 202509 C++ 一级 第 7 题

选择题 · 答案 D

← 整套速查表 GESP 一级 全部真题

题目

当前是 9 月,编写 C++ 代码求 N 个月后的月份。横线处应填入的代码是( )。

int N, M;
cin >> N;
M = ___________;
if (M == 0)
    printf("%d个月后12月", N);
else
    printf("%d个月后是%d月", N, M);
答案:D

解题思维

答案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 月”,整道题就变成考察边界判断而非月份映射。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断