在下列代码的横线处填写( ),可以使得输出是“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。位运算代码补全要注意区分位运算符(&|^)和逻辑运算符(&&||)。异或(^)常用于交换值。
位运算代码补全容易出错,因为位运算结果不如算术运算直观。记住异或的自反性。
【考点】数组初始化与比较逻辑|最大值查找通法
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;换成找最小值条件全反过来。刷到此类题先问"命题人想考我什么",别急着填符号。