GESP 一级 · GESP 202312 C++ 一级 第 8 题

选择题 · 答案 C · 考点:循环结构

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

题目

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

N = 10;
cnt = 0;
while(1){
    if(N == 0) break;
    cnt += 1;
    N -= 2;
}
cout << cnt;
答案:C

考点

循环结构

解题思维

这道题考查循环结构与条件判断。拿到题先模拟执行:N从10开始,每次减2,直到N等于0时break。注意break在循环体开头,意味着N=0那一次不会执行cnt++。

常见错误

最容易错在把N=0当成最后一次循环,误以为要执行cnt+=1,从而得出6次或10次。还有人会直接把10除以2得到5,却忽略了题目里是N-=2(减2)而不是N/=2(除以2),导致计算错误。此外,break语句的位置很关键,它在if(N==0)后面,一旦满足条件直接跳出,不会执行后面的cnt和N的更新,这是命题人专门挖的坑。

详细解析(节选)

【考点】循环结构|条件判断

1. 考纲定位 这道题属于GESP一级循环结构模块。命题人把这道题放在这里,就是专门卡住那些只背“循环次数=初值/步长”公式的考生——很多人会脱口而出10÷2=5,却完全没意识到要验证循环何时真正终止。同时,break语句的位置也是考点之一,它写在循环体开头,意味着一旦满足条件就立即跳出,不会执行后面的cnt++和N-=2,这是很多学生容易忽略的细节。

2. 解题思维 看到题先想循环条件与终止点。N从10开始,每次减2,终止条件是N==0。代入验证:10→8→6→4→2→0,共执行5次。关键观察在于break写在循环体开头,意味着当N==0时直接跳出,不会再执行cnt++和N-=2。因此cnt只会在N=10,8,6,4,2这五次时各加1,最终cnt=5。

3. 陷阱拆解 选项A把N=0误算成最后一次循环,选项B完全忽略除法逻辑,选项D把初值当10却少算一次。最阴险的是“如果(N==0) break”——命题人故意把判断放在循环体开头,让你误以为会多执行一次。如果你只背结论、不理解本质,看到类似结构就会掉进这个陷阱。此外,有些同学会误以为N-=2是除以2,从而得出错误结果,这也是常见的概念混淆。

4. 反命题思维 若把条件改成if(N==1) break,答案会变10;若把N-=2改成N-=1,答案也会变10。这类题的核心永远是“循环何时停止”。刷到类似题,先问自己“循环体执行了几次,终止条件在何时触发”。

5. 考频趋势 循环结构在题库中已考过609题,覆盖12个考试级别(2008-2026),其中2025年158题、2024年128题、2026年161题,说明近年循环相关题目热度持续上升。GESP一级中循环结构考了139题,占比很高,说明该级别对循环掌握要求严格。控制结构整体考过429题,GESP一级占133题,可见循环是控制结构的核心部分。

6. 预测 基于近年数据,循环结构在GESP一级中的考频仍保持高位,预计2026年及以后会继续出现类似题目,重点考察break语句位置和循环终止条件。暂无足够依据预测具体题型变化,但可推测命题人会继续在循环体内设置条件判断,增加干扰项。

同考点真题

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