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

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

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

题目

下面 C++ 代码用于判断一个数是否为质数(素数),在横线处应填入代码是( )。

cin >> N;
cnt = 0;
for (int i = 1; i < N + 1; i++)
    if (N % i == 0)
        _____;
if (cnt == 2)
    cout << N << "是质数。";
else
    cout << N << "不是质数。";
答案:D

考点

循环结构

解题思维

这题考的是质数判断里计数器该不该累加。看到循环里 N%i==0 就知道每找到一个约数就要把 cnt 加 1,而 C++ 里只有 += 能正确累加,= 是赋值,=+1 还语法错误,所以选 D。

常见错误

最容易掉进的坑有两个:一是看到 cnt 就下意识想“设个值”,把 += 看成 =,选了 A 或 B,结果计数器永远只变一次,所有数都被判成质数或完全判错;二是被 C 项的 =+1 迷惑,觉得看起来像累加,其实这是非法语法,编译器直接报错。另外,很多人会忽略题目已经声明 cnt=0 这个初始状态,以为需要重新赋值,掉进死板赋值的误区。

详细解析(节选)

【考点】循环结构|算术运算符|赋值与累加的区别

1. 考纲定位 本题考查《GESP 一级 算法与程序设计》中“循环与分支”模块。命题人放这道题,就是为了卡住那些“只认符号不认含义”的考生:在 C++ 里 = 是赋值,+= 才是累加。很多初学者看到变量名 cnt 就下意识想“设个值”,却忽略了它已经初始化为 0 且需要累加。

2. 解题思维 看到题先想:质数只有两个约数(1 和自身)。这题用循环从 1 到 N 找约数,每找到一个约数就 cnt 加 1。循环结束后若 cnt==2 才是质数。所以横线处必须是“cnt 加 1”。C++ 里写 cnt += 1 或 cnt++ 都行,选项里只有 D 符合。

3. 陷阱拆解

最阴险的细节是:题目已经声明 cnt = 0,很多考生会忽略这个初始状态,以为需要重新赋值,掉进 A/B 的坑。

4. 反命题思维 如果把循环改成 for (int i = 2; i <= N; i++),那 cnt 统计的是大于 1 的约数个数,此时质数判断条件要改成 cnt == 1。命题人可能还会把 cnt 改成 cnt++ 放在条件里,比如 if (N % i == 0) cnt++; 放在循环里,考察“语句块位置”——很多考生会误以为赋值必须在条件里,其实无论放哪都行,只要逻辑正确。

5. 考频与趋势

6. 预测 基于以上数据,运算符与表达式类题目在 GESP 一级中占比极高(72 题),且循环结构类题目近年考频持续走高(2025-2026 年分别 158、161 题)。未来这类“辨析赋值与累加”的陷阱题仍大概率出现在 GESP 一级、二级及 CSP 入门级考试中,命题方式可能从单纯填空扩展到“补全后判断输出结果”或“修改循环范围后重新判断”等变式,但核心仍是考察对 = 与 += 语义的精准理解。暂无足够依据预测具体年份或题号分布。

同考点真题

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