GESP 三级 · GESP 202512 C++ 三级 第 9 题

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

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

题目

以下代码执行后,数组 arr 的内容是( )

int arr[6] = {1, 2, 3, 4, 5, 6};
for (int i = 0; i < 6; i += 2) {
    arr[i] = arr[i] + arr[i+1];
    arr[i+1] = arr[i] - arr[i+1];
    arr[i] = arr[i] - arr[i+1];
}
答案:A

考点

循环控制

解题思维

答案A。追踪for循环:记录每次循环变量的值和累积结果的变化。注意循环终止条件。

常见错误

for循环体可能一次都不执行!这是和while循环一样的"先判断后执行"机制。

详细解析(节选)

【考点】数组元素访问|循环控制|变量状态追踪

🎯 考纲定位(考点定位)

本题是GESP三级"数据与算法"模块中数组操作的基础题。命题人卡在90%考生对数组就地修改的直觉上,以为i+=2后arr[i]不变,却忘了循环体内部已污染了arr[i+1]——这正是三级考生最容易忽略的"状态污染"陷阱。

🧠 解题思维(拆解与通法)

看到i+=2立即锁定"成对处理",三行赋值是经典"不借助临时变量交换"的算术技巧:a=a+b、b=a-b、a=a-b。循环每轮把arr[i]和arr[i+1]的值互换,最终结果就是整个数组两两交换。这一类题的通法是:识别循环步长决定处理粒度,识别三行算术交换,追踪每轮状态变化。

🪤 陷阱拆解(命题人的套路)

错误选项C是典型"只执行前两步"的错觉陷阱,误以为arr[i]先被替换成和再被减回;选项D则把i+=2理解成跳过i+1,却忘了循环体内arr[i+1]在下一轮已变成新值;选项B更是直接忽略循环,把数组当原样考。这里最阴险的是"状态追踪"——如果你只背"三行交换"结论,不代入具体数值,就会掉进选项D的陷阱。

🔄 反命题思维(教练升华)

若把i+=2改成i++,数组会完全反转;若把三行换成临时变量交换,结果相同。刷到这种"三行算术交换"题,先问自己"这题是不是在考我状态追踪?"

同考点真题

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