下面 C++ 代码用于求正整数的所有因数,即输出所有能整除一个正整数的数。如,输入 10,则输出为 1、2、5、10;输入 12,则输出为 1、2、3、4、6、12;输入 17,则输出为 1、17。在横线处应填入代码是( )。
int n = 0; cout << "请输入一个正整数:"; cin >> n;
for (__________________) // 此处填写代码 if (n % i == 0) cout << i << endl;
这道题核心就是看 for 循环的边界和步长。先想清楚:因数要跑到 n 本身,所以循环条件必须能取到 n,即 i < n + 1;再看步长,i + 1 只是表达式,i 永远不变,会死循环,只能选带 i++ 的选项,这样一排除就锁定 D 了。
学生最容易掉进两个坑:一是以为 i < n 就能覆盖到 n,其实 i 最大只能到 n-1,漏掉 n 这个因数;二是分不清 i + 1 和 i++,把 i + 1 当成自增,结果 i 永远停在 1,程序直接死循环。还有少数人会纠结 n=1 的情况,觉得 n+1 多余,但题目说的是正整数,n 最小为 1,此时 i < 2 刚好让 i 取到 1,逻辑完全自洽,不用特判。
这是一道典型的"程序填空"题,核心考点落在for 循环的语法结构、循环变量的递增方式以及边界条件的设定。命题人特意把"n 本身"这个因数藏在循环条件里,就是要考察你是否真正理解循环变量的取值范围。
1. for 循环的三要素:初始化、条件判断、步进。只有当条件为真时,循环体才会执行;步进决定了下一次循环时 i 变成多少。 2. i++ vs i + 1:这是新手最容易混淆的。i++是后置自增,执行完整个表达式后 i 会加 1;而i + 1只是把 i 加 1 的结果用掉,i 本身纹丝不动,就像你算出下一站是 2,但没买票上车,永远停在原地。 3. 边界条件:题目要求输出所有因数,包括 n 本身。如果循环条件是i < n,那么 i 最大只能取到 n-1,n 永远进不来;必须写成i < n + 1,这样 i 才能合法地取到 n。
这道题的坑就藏在两个细节里:
i < n,结果漏掉 n 本身,输出不全。i + 1当成自增操作,觉得"反正结果一样,写哪个都行",殊不知i + 1不会改变 i,导致死循环,程序直接卡死。命题人特意把这两个坑组合在一起,让你必须在四个选项里精准识别出唯一正确的写法。
拿到题,别急着看答案,先顺着代码逻辑走一遍: 1. 看目标:题目说"输出所有因数",那 i 必须从 1 开始,一直走到 n,中间只要n % i == 0就输出。 2. 看条件:要走到 n,循环条件必须允许 i 取到 n。i < n不行,i < n + 1才行。 3. 看步进:i 每次要加 1,必须用i++,不能用i + 1。 4. 看初始化:i 从 1 开始,没问题。
我们把四个选项一个个代进去,看看会发生什么:
int i = 1; i < n; i + 1:条件i < n导致 i 最大到 n-1,漏掉 n;步进i + 1让 i 永远停在 1,死循环。int i = 1; i < n + 1; i + 1:条件对了,i 能到 n;但步进还是i + 1,i 永远 1,死循环。int i = 1; i < n; i++:步进对了,但条件i < n漏掉 n,输出不全。int i = 1; i < n + 1; i++:条件让 i 能到 n,步进让 i 正常递增,完美匹配题目要求。所以,答案只能是 D。
i < n + 1。i + 1只是表达式,i 不变,程序会死循环;必须用i++或++i。i < 2让 i 取到 1,循环体执行一次,输出 1,完全正确,无需特判。从题库数据看,"for 循环语法"是 GESP 一级的高频考点。基础语法类题目在 2023 年考了 287 题,2024 年 413 题,2025 年 401 题,呈现逐年上升的强劲势头,说明一级考试越来越重视对基本语法的精准掌握。运算符与表达式类题目在 2023 年考了 91 题,2024 年 41 题,2025 年 61 题,虽然波动较大,但整体仍占重要位置。结合 GESP 一级 332 题的分布,这类"循环 + 条件"的混合题在一级考试中占比很高,是命题人的"拿手好戏"。
基于 2023-2025 年的数据,基础语法题在一级考试中持续保持高位,且"循环"与"运算符"的交叉点(如本题)是命题人最爱挖坑的地方。未来一级考试中,类似"for 循环条件与步进"的题目大概率仍会高频出现,甚至可能出现更复杂的嵌套循环或结合数组下标的变体。暂无足够依据预测具体题型变化,但可以肯定:对循环边界的敏感度、对自增运算符的理解,仍是 GESP 一级考生的"生死线"。