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

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

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

题目

下面 C++ 程序执行的结果是( )。

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

    for (; i > 1; i--)
        if ((a[i - 1] + a[i - 2]) % 3)
            cnt++;
    cout << cnt << endl;

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

考点

循环控制

解题思维

这道题考的是循环变量作用域和数组下标计算。拿到题先别急着看代码细节,先盯住for循环结束后i的值——它停在1,而不是0,这是整个题目的关键突破口。

常见错误

很多学生看到i--就下意识觉得循环会一直跑到0,或者误以为i被重置了,导致把循环次数算错;还有人会把a[i-1]+a[i-2]当成(i-1)+(i-2)直接代入,忽略了数组下标是从0开始的,其实a[i-1]对应的是i,a[i-2]对应的是i-1,加起来就是2i-1;最容易被坑的是选项B,把i=19这次迭代漏掉了,因为只算了18次循环,忘了i从19递减到2,共18次,但很多人会算成17次。

详细解析(节选)

考点与命题视角

GESP三级《信息与计算》模块,重点考察循环控制和数组索引。命题人专门卡住"循环变量作用域"这个弱点——循环结束后i仍保留最终值,但学生容易误以为i被重置为0或1。

解题心法:先抓关键,再推细节

拿到这种题,别一上来就硬算,先抓住两个关键点: 1. 循环变量i的初始值:第一层循环for(i=0;i<20;i++)结束后,i停在19。 2. 第二层循环的边界:for(;i>1;i--),条件i>1意味着i从19递减到2才停止,共18次迭代。

很多人看到i--就默认i会归零,却忘了i保留的是退出时的值1,导致误判循环次数。这就是选项B的陷阱所在。

同考点真题

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