以下 C++ 代码实现从小到大的顺序输出能整除 $N$ 的数($N$ 的因子),例如 $N=18$ 时输出 1 2 3 6 9 18,横线处应填入 ( )。
cin >> N;
for(__________)
if(N % i == 0)
cout << i << " ";这道题核心就是找因子,因子定义是能被整除的正整数。拿到题先想:循环变量 i 代表什么?取值范围是 1 到 N。所以初值必须从 1 开始,条件必须能跑到 N,也就是 i < N + 1,否则 N 本身会被漏掉。
最容易掉进两个坑:一是把初值写成 0,看似遍历更完整,但 0 做除数会直接除零异常,程序跑飞;二是条件写成 i < N,以为只要小于 N 就行,结果 N 这个最大因子永远进不去循环,输出少一个数。这两个错误在代入验证时特别隐蔽,尤其是 A 和 C 选项,初值 0 会触发运行时错误,B 选项逻辑上看似合理但终值不对,只有 D 既避开了除零又完整覆盖了范围。
本题直指二级大纲中的“循环结构”与“整除判定”。要输出 N 的所有因子,必须遍历 1 到 N 的每一个整数,用取模运算符判断是否能整除。C++ for 循环语法是 for(初始化; 条件; 步进),三个部分缺一不可:初始化决定起点,条件决定终点,步进控制步长。这里步长固定为 1,关键是起点和终点。
命题人故意把 N % i 放在循环体内,就是要卡住那些只背模板、不懂循环变量语义的考生。选错初值,代码能跑但结果全错(除零);选错终值,漏掉最后一个因子。这题看似简单,实则考察对“因子定义”的精准理解——因子必须是正整数,且最大因子就是 N 本身。