GESP 三级 · GESP 202406 C++ 三级 第 10 题

选择题 · 答案 B

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

题目

在下列代码的横线处填写( ),可以使得输出是“7”。

#include <iostream>
using namespace std;

int main() {
    int array[5] = {3, 7, 5, 2, 4};

    int max = 0;
    for(int i=0; i<5; i++)
        if(___________) // 在此处填入代码
            max = array[i];

    cout << max << endl;
    return 0;
}
答案:B

解题思维

答案B。位运算代码补全要注意区分位运算符(&|^)和逻辑运算符(&&||)。异或(^)常用于交换值。

常见错误

位运算代码补全容易出错,因为位运算结果不如算术运算直观。记住异或的自反性。

详细解析(节选)

【考点】数组初始化与比较逻辑|最大值查找通法

GESP 三级 C++ 核心考点。命题人专盯初学者把"找最大"写成"更新更大值"的逆向思维——绝大多数人看到 max 就习惯写 max > array[i](认为大的保留),却忘了 max 是"当前最优值",应该被更好的值覆盖。

看到 int max = 0; 先想它初始值比数组里所有数都小,所以第一次 if 一定成立,max 被赋成 3;接着 3 < 7 成立,max 更新成 7;后面 7 比 5/2/4 都大,条件全为假,循环结束输出 7。通法:找最大/小值永远用"当前值与候选值比较,若新值更优则替换",先写 if (当前 < 候选) 再写 当前 = 候选,顺序不能反。

A 项 max > array[i] 是陷阱:它会让 max 保留旧大值,永远不更新成更大的,相当于反向筛选;C 项 max = array[i] 更离谱,直接覆盖成循环最后一个元素 4。最阴险细节是 max 初值为 0,若数组含负数此逻辑就崩了——命题人故意用全正数掩盖"初始值是否合法"的坑。

若把数组改为 {3,7,-5,2,4},初值 0 会漏掉 -5 且错误输出 0;换成找最小值条件全反过来。刷到此类题先问"命题人想考我什么",别急着填符号。

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