GESP 三级 · GESP 202403 C++ 三级 第 7 题

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

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

题目

执行下面 C++ 代码后输出的第一个数是( )。

int main()
{
    int a[20], i;
    for (i = 0; i < 20; i++)
        a[i] = i + 1;

    for (; i > 0; i--)
        cout << a[i - 1] << " ";

    cout << endl;
    return 0;
}
答案:A

考点

循环控制

解题思维

答案A。数组和位运算的代码追踪要特别小心:数组下标从0开始,位运算结果可能不直观。建议画图辅助。

常见错误

位运算追踪时建议把数字写成二进制形式再逐位计算。

详细解析(节选)

【考点】循环控制流|数组索引边界|变量作用域延续

本题对应《GESP 大纲》“基础编程”模块“循环与数组”三级考点,同时考察数组下标与循环变量之间的依赖关系。命题人卡住的是绝大多数考生对"for 循环结束后 i 的值”的盲区——很多人默认 i=19,其实 i 会多跑一次变成 20。

第一遍循环 i 从 0 到 19 执行完,条件 i<20 失败时 i 已自增到 20。第二遍循环条件仍为 i>0,此时 i=20,故先访问 a[19]=20。通法:写循环必须追踪循环变量在循环结束后的状态,for 循环的 i 会在最后一次成功后再自增一次。

选项 B 是“循环结束 i=19"的惯性思维陷阱,忽略了 for 循环的自增发生在条件判断之后。选项 C 偷换概念,把第二次循环的起始 i 当成 1,实际上 i 仍为 20。选项 D 过于绝对地认为“不确定”,但 i 递减必然终止,只是初值易被忽略。最阴险的坑:只背“循环打印 a[0]~a[19]"而不懂变量延续,就会误选 B 或 C。

若把第二个循环改成 for(; i>=0; i--),首输出变 a[20](越界)或无输出——命题人会考察边界条件。若问“第一个输出”则答案固定为 20,这是典型的“首尾颠倒”陷阱。刷到类似题先问:命题人想卡住我对循环变量延续性的理解。

同考点真题

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