GESP 二级 · GESP 202312 C++ 二级 第 3 题

选择题 · 答案 D · 考点:循环控制

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

题目

以下 C++ 代码实现从小到大的顺序输出能整除 $N$ 的数($N$ 的因子),例如 $N=18$ 时输出 1 2 3 6 9 18,横线处应填入 ( )。

cin >> N;
for(__________)
    if(N % i == 0)
        cout << i << " ";
答案:D

考点

循环控制

解题思维

这道题核心就是找因子,因子定义是能被整除的正整数。拿到题先想:循环变量 i 代表什么?取值范围是 1 到 N。所以初值必须从 1 开始,条件必须能跑到 N,也就是 i < N + 1,否则 N 本身会被漏掉。

常见错误

最容易掉进两个坑:一是把初值写成 0,看似遍历更完整,但 0 做除数会直接除零异常,程序跑飞;二是条件写成 i < N,以为只要小于 N 就行,结果 N 这个最大因子永远进不去循环,输出少一个数。这两个错误在代入验证时特别隐蔽,尤其是 A 和 C 选项,初值 0 会触发运行时错误,B 选项逻辑上看似合理但终值不对,只有 D 既避开了除零又完整覆盖了范围。

详细解析(节选)

1. 考点与概念

本题直指二级大纲中的“循环结构”与“整除判定”。要输出 N 的所有因子,必须遍历 1 到 N 的每一个整数,用取模运算符判断是否能整除。C++ for 循环语法是 for(初始化; 条件; 步进),三个部分缺一不可:初始化决定起点,条件决定终点,步进控制步长。这里步长固定为 1,关键是起点和终点。

2. 命题视角

命题人故意把 N % i 放在循环体内,就是要卡住那些只背模板、不懂循环变量语义的考生。选错初值,代码能跑但结果全错(除零);选错终值,漏掉最后一个因子。这题看似简单,实则考察对“因子定义”的精准理解——因子必须是正整数,且最大因子就是 N 本身。

同考点真题

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