GESP 一级 · GESP 202506 C++ 一级 第 12 题

选择题 · 答案 C

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

题目

下面的 C++ 代码用于求 $N$ 的所有因数(即能将 $N$ 整除的数),如输入 $12$ 则将输出 $12,6,4,3,2,1$。( )。

int i, N;
cin >> N;
i = N;
while (______) {
    if (N % i == 0)
        printf("%d,", i);
    i -= 1;
}
printf("1");
答案:C

解题思维

答案C。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。

常见错误

逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。

详细解析(节选)

【考点】条件语句|循环语句|比较运算符

1. 🎯 考纲定位 GESP 一级大纲"条件与循环"模块,命题人卡住"循环边界条件"和"比较运算符"两个弱点,很多考生把 while 条件写成赋值或等号,直接编译错误;或误选 i>=1 导致重复输出,掉进"边界陷阱"。

2. 🧠 解题思维 看到 while 循环,先想"循环变量 i 从 N 递减,要输出所有因子"。关键观察:循环体最后单独输出"1",说明循环不需要跑到 1。推理:循环条件必须保证 i 在 2 及以上继续,i=1 时退出,因此填 i>1。这是"循环内外分工"的通法——若某值已在循环外处理,循环条件就要排除它。

3. 🪤 陷阱拆解 A 用赋值 i-=1 当条件,语法错误;B 用等号 i==1,语法错误;D 用 i>=1,逻辑错误,会多输出一遍 1。命题人利用"把 1 当作循环终点"的惯性,以及"比较运算符与赋值运算符混用"的粗心,制造了三层陷阱。

4. 🔄 反命题思维 若把循环外输出"1"删掉,条件就该改为 i>=1;若把条件改成 i>0,会输出 N 到 1 全部,重复且多余。命题人想考察"循环内外分工"和"比较运算符的正确使用"。

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