GESP 二级 · GESP 202603 C++ 二级 第 24 题

判断题 · 答案 B · 考点:循环控制

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

题目

下列 C++ 代码执行后将输出 1#4#9#16#16 。( )

cnt = 0;
for (i = 1; i < 5; i++) {
    for (j = 1; j < i + 1; j++)
        if (i * j % 10 == 0)
            break;
    if (j >= i + 1)
        cout << (i * j) << "#";
}
if (i >= 5)
    cout << (i * j);
答案:B

考点

循环控制

解题思维

答案B。考点: 循环结构——for/while的执行与嵌套。

常见错误

关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。

详细解析(节选)

【考点】循环控制与条件判断|整数运算与逻辑陷阱

🎯 考纲定位(考点定位) 本题考查 GESP 二级「循环与条件判断」模块。命题人专盯「嵌套 for 循环边界」与「循环后变量值」两大盲区——多数考生误以为内层循环会因取整条件提前退出,或忽视外层循环结束后 i 仍为 4 而非 5,导致对最终输出判断失准。

🧠 解题思维(拆解与通法) 先模拟循环:外层 i 从 1 到 4,内层 j 从 1 到 i(因 j < i+1)。内层 break 条件 i*j%10==0 在 i≤4 时永不成立,故 j 始终走到 i。此时 j≥i+1 不成立,不输出。外层结束后 i=4,不满足 i≥5,末尾再无任何输出。真正输出需 i≥5 且内层 j 能因取整条件提前中断,本题完全不满足。

🪤 陷阱拆解(命题人的套路) 错误选项 A 利用「循环后变量值」陷阱:考生常以为 for 循环结束后 i 自动变为 5,实则 i 停在 4。另一陷阱是「绝对化条件」:若内层 j 能因 i*j%10==0 提前 break,则 j 会小于 i+1,条件 j≥i+1 永远为假,导致内层不输出。本题把两个陷阱叠加,形成双重误导。

🔄 反命题思维(教练升华) 若将内层循环改为 j≤i+1,则当 i=5 时 j 可取 2,i*j=10 满足取整条件,程序将输出 10# 等;若将 break 条件改为 i*j%5==0,则 i=2 时 j=1 就触发 break,内层能输出 2#。刷到类似题,先问:循环边界是否真的覆盖到目标值?循环后变量是否按预期变化?这才是防坑关键。

同考点真题

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