下面 C++ 代码用于判断 $N$ 是否为质数(素数),约定输入 $N$ 为大于等于 $2$ 的正整数,请在横线处填入合适的代码( )。
int N = 0, i = 0;
cout << "请输入一个大于等于2的正整数:";
cin >> N;
for (i = 2; i < N; i++)
if (N % i == 0) {
cout << "非质数";
__________; // 此处填写代码
}
if (i == N)
cout << "是质数";这题考循环控制里的 break。拿到题先想:质数判断只要找到一个约数就能立刻停止,否则循环会一直跑到 N-1 甚至超时,所以必须选能跳出循环的语句。
最容易掉进 continue 的坑,觉得跳过本次循环就行,其实 continue 只跳过 if 块,循环还会继续 i++,导致非质数判完后可能误判成质数。其次有人会想 exit 或 return,要么程序直接结束连最后的输出都没了,要么语法都不对。
【考点】for 循环控制|流程控制语句|质数判断逻辑
这道题属于 GESP 二级 C++ 循环控制模块,重点考察 for 循环终止机制与流程控制语句。命题人专门卡住“看到非质数就立刻停止检查”这个思维——很多考生会误选 continue 或 exit,说明没理解循环中断的本质。
看到题先想“质数判断逻辑”——循环从 2 到 N-1 逐个试除,一旦找到约数就立刻判定“非质数”,否则循环结束后 i 自动等于 N 才输出“是质数”。这里 i 的更新完全由循环控制,只要让循环提前终止即可,否则 i 会继续自增。
逐个拆:B 选 continue 是“偷懒”思维——以为跳过本次循环就行,但 continue 只是跳过本次 if 块,循环会继续执行 i++,导致非质数判断后仍可能走到“是质数”分支;C 选 exit 是“过度”思维——直接退出程序,连最后“是质数”的输出都省了;D 选 return 是“语法”思维——这是函数内才用的,题目里根本没有函数定义。命题人最阴险的细节是“非质数”输出后还要不要继续循环?如果你只背结论、不理解 break 的本质,就会掉进选 continue 的坑。
反命题视角:把 i < N 改成 i <= N,那 i 最终会等于 N+1,条件 i==N 永远不成立,输出结果全错;把“非质数”输出改成“找到约数:i”,那题目就变成“找出 N 的最小约数”,答案就要选 continue 保证继续循环找下一个。刷到类似题先问自己“循环终止后 i 的值代表什么意义”,这才是命题人想考的核心。
考频与趋势:循环控制在题库中非常稀缺,仅考过 5 题,覆盖 3 个考试级别(2019-2024);逐年分布:2019 年 2 题、2023 年 2 题、2024 年 1 题;分赛事:CSP 提高级 2 题、GESP 二级 2 题、GESP 一级 1 题。虽然总体考频低,但 2023 年 GESP 二级正好考了 2 题,说明命题组对这类基础流程控制还在持续考察。从数据看,未来大概率仍会出现在 GESP 二级或 CSP 提高级的初赛流程控制大题中,但不会大规模铺开。
预测:基于给定数据与经验,暂无足够依据预测未来会考多细的变式,但可预判仍会侧重“循环提前终止”与“循环后变量值”的辨析,这是命题人最爱挖坑的地方。