下面对 C++ 代码执行后输出的描述,正确的是( )。
cin >> N;
cnt = 0;
for(int i = 1; i < N; i++)
cnt += 1;
cout << cnt;这题核心就是看循环到底跑了几次。变量 i 从 1 开始,只要 i 小于 N 就继续,每次加 1,所以循环体执行的次数就是 N-1 次。cnt 初始是 0,每次加 1,最后结果自然是 N-1。
最容易栽跟头的就是直觉误判,以为输入个 N 就执行 N 次,完全忽略了循环变量 i 的起始值是 1 以及终止条件是严格小于(i<N)。比如 N=2 时,很多人会觉得循环一次都不执行,或者执行两次,其实 i=1 时 1<2 成立,会执行一次,cnt 变成 1,输出 1。还有选项 A 把 N≤2 笼统说输出 0,这明显错了,因为 N=2 时输出 1。
本题考查 GESP 一级"循环结构"的核心能力:准确判断循环执行次数以及累加变量的最终值。命题人专门卡住学生对"输入 N 就执行 N 次"的直觉误判——绝大多数考生会下意识以为"输入 N 就执行 N 次",完全忽略了循环变量 i 的起始值和终止条件。
拿到这种带循环的代码,首先要锁定三个关键信息: 1. 循环变量 i 的初始值是多少?代码里写的是 for(int i = 1; i < N; i++),所以 i 从 1 开始。 2. 循环终止条件是什么?条件是 i < N,只要 i 小于 N,循环就会继续。 3. 循环体执行几次?因为 i 从 1 开始,每次加 1,直到 i 达到 N 才停止,所以实际执行的次数就是 N-1 次(当 N=1 时,1<1 不成立,一次都不执行)。
cnt 初始为 0,循环体里 cnt += 1 执行 N-1 次,所以最终 cnt 的值必然是 N-1。只要 N≥2,输出就是 N-1;N≤1 时 cnt 保持 0。
如果把循环条件改成 i<=N,输出就会变成 N,此时 B 错 C 对;如果 cnt 初始值改为 1,输出变成 N,所有选项都错。刷到类似题时先问自己:"循环到底执行几次?"——这才是破题关键。
从题库数据看,"循环结构"是绝对高频考点,共考过 609 题,覆盖 12 个考试级别(2008-2026)。逐年分布上,2023 年考了 77 题,2024 年考了 128 题,2025 年考了 158 题,2026 年考了 161 题,呈现逐年上升趋势。分赛事来看,GESP 一级考了 139 题,GESP 二级考了 172 题,三级 89 题,四级 87 题,NOIP 普及组初赛 56 题,NOIP 提高组初赛 23 题。这说明循环结构不仅是一级入门必考,也是中高级竞赛的基石。
基于给定数据与经验,未来 GESP 一级和二级考试中,循环结构仍将是高频考点,尤其是涉及循环次数计算、累加变量、边界条件判断这类题目。命题人可能会继续用类似"i<N"与"i<=N"的对比来挖坑,或者把循环嵌套、循环与数组结合出题。暂无足够依据预测具体题型变化,但"循环执行次数"这一核心能力必将是考察重点。