GESP 二级 · GESP 202403 C++ 二级 第 9 题

选择题 · 答案 C

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

题目

下面 C++ 代码执行后的输出是?( )

int n, masks, days, cur;
n = 17, masks = 10, days = 0;
cur = 2;
while (masks != n){
    if (cur == 0 || cur == 1)
        masks += 7;
    masks -= 1;
    days += 1;
    cur = (cur + 1) % 7;
}
cout << days;
答案:C

解题思维

别急着套公式,这道题就是考你手能不能稳、心能不能静。变量 cur 是个 7 进制的计数器,只有碰到 0 或 1 才会给 masks 加个 7,其他时候就是老老实实减 1。把初始值 10 和终止值 17 代入,一步步模拟循环,数数 days 加了几个,答案自然出来。

常见错误

最容易栽跟头的地方是初始值陷阱:很多人看到题目只盯着循环逻辑,下意识以为 masks 是从 0 开始累加到 n,结果会多算 10 次,直接选错。其次是取模运算的边界:cur 从 6 变 0、从 1 变 2 这个顺序要是搞反了,整个节奏就乱了。还有人会把 if 里的 || 看成 &&,以为必须同时满足 cur 才是 0 或 1 才加 7,那加 7 的条件就永远不成立,days 就会变成 17。最后别忽略了 while 的终止条件,masks 等于 n 时立刻跳出,千万别多执行一次判断。

详细解析(节选)

【考点】while 循环|条件分支|取模运算|变量追踪

这道题考查的是对循环结构的动态模拟能力,核心在于理解变量 cur 的周期性变化以及它在条件判断中的特殊作用。命题人专门用这道题卡住两类考生:一类是习惯用 for 循环思维的人(容易忽略循环条件动态变化),另一类是只背结论不模拟的人(容易误选 6 或 8)。这类题在 GESP 二级循环结构中非常典型,属于高频考点。

拿到题先想什么?别一上来就列公式,最直接的办法就是模拟执行,但模拟不是瞎跑,要抓住关键规律:cur 按 7 进制循环(2→3→4→5→6→0→1→2…),只有遇到 0 或 1 时才 masks+=7,其他时候就是老老实实减 1。从初始 masks=10 起,连续减 1 到 5 需 5 次,此时 cur=0;第 6 次循环 masks 先 +7 再 −1 到 11;第 7 次循环 masks 再 +7 减 1 到 17,循环终止。

下面把过程掰开揉碎讲清楚,每一步都对应代码里的实际执行:

初始状态:n=17, masks=10, days=0, cur=2。

第 1 次循环:cur=2,不满足 if 条件,masks 减 1 变 9,days 加 1 变 1,cur 更新为 (2+1)%7=3。 第 2 次循环:cur=3,masks 减 1 变 8,days=2,cur=4。 第 3 次循环:cur=4,masks 减 1 变 7,days=3,cur=5。 第 4 次循环:cur=5,masks 减 1 变 6,days=4,cur=6。 第 5 次循环:cur=6,masks 减 1 变 5,days=5,cur=(6+1)%7=0。 第 6 次循环:cur=0,满足 if 条件,masks 先加 7 变 12,再减 1 变 11,days=6,cur=(0+1)%7=1。 第 7 次循环:cur=1,满足 if 条件,masks 先加 7 变 18,再减 1 变 17,days=7,cur=(1+1)%7=2。

此时 masks 等于 n=17,while 条件 masks!=n 不再成立,循环终止。程序输出 days 的值,即 7。对应选项 C。

易错点方面,初始值陷阱最致命:masks 从 10 而非 0 开始,很多人默认从 0 算,会多减 10 次,选错答案。条件分支陷阱也很常见:cur==0||cur==1 是或关系,若误写成 && 会永远不触发 +7,结果变成 17。取模陷阱在于(cur+1)%7 当 cur=6 时得 0,当 cur=1 时得 2,顺序易错。终止条件陷阱是 masks!=n 是严格不等,等于时立刻退出,很多人会多执行一次以为要 +7。

从考频趋势看,控制结构在题库中共考过 429 题,覆盖 7 个考试级别(2009-2026);逐年分布:2009 年 2 题、2023 年 81 题、2024 年 138 题、2025 年 160 题、2026 年 45 题、null 年 3 题;分赛事:GESP 一级 133 题、GESP 二级 133 题、GESP 三级 84 题、GESP 四级 76 题、CSP 入门级 1 题、NOIP 提高组 初赛 1 题、NOIP 普及组 初赛 1 题。循环结构更是重中之重,题库共考过 609 题,覆盖 12 个考试级别(2008-2026);逐年分布:2008 年 7 题、2009 年 3 题、2010 年 3 题、2011 年 6 题、2012 年 5 题、2013 年 7 题、2014 年 8 题、2015 年 4 题、2016 年 12 题、2017 年 11 题、2018 年 13 题、2019 年 4 题、2022 年 1 题、2023 年 77 题、2024 年 128 题、2025 年 158 题、2026 年 161 题、null 年 1 题;分赛事:GESP 二级 172 题、GESP 一级 139 题、GESP 三级 89 题、GESP 四级 87 题、NOIP 普及组 初赛 56 题、NOIP 提高组 初赛 23 题、GESP 五级 16 题、GESP 六级 9 题、CSP 入门级 8 题、CSP 提高级 5 题、GESP 七级 3 题、GESP 八级 2 题。数据很明确,循环结构在 GESP 二级中占比最高(172 题),且 2024 年和 2025 年考频持续攀升(分别为 128 题和 158 题),说明这类动态模拟、带条件修正的循环题是命题人的偏爱方向。

基于现有数据,暂无足够依据预测未来具体会考到哪个变体,但可以合理推断:未来 GESP 二级及更高级别的循环题仍会高频出现,且更倾向于考察变量在循环中的非线性变化(如本题的 cur 周期性修正 masks)。备考时务必强化模拟执行能力,不能只背结论,要养成“变量值随循环变化”的动态视角。

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