以下 C++ 代码中存在几处错误( )。
#include <iostream>
using namespace std;
int main() {
const int SIZE = 5;
int arr[SIZE];
for (int i = 0; i <= SIZE; i++) {
arr[i] = i * 2;
}
cout << arr[SIZE] << endl;
return 0;
}答案C。追踪for循环:记录每次循环变量的值和累积结果的变化。注意循环终止条件。
for循环体可能一次都不执行!这是和while循环一样的"先判断后执行"机制。
【考点】数组越界|循环边界条件|const常量定义
GESP三级"基础编程"模块必考循环边界与数组下标匹配。命题人专挑那些只背语法、不读题意的考生——循环条件写i<=SIZE却用SIZE当数组下标,是检验你是否真的理解数组下标从0到SIZE-1。
解题先扫语法:const int SIZE=5定义无误;循环里i从0到5,i=5时arr[5]越界;输出arr[SIZE]同样是越界。两处错误,选C。
错误选项怎么来的?A(0处)是只盯const定义、忽略循环边界的考生;B(1处)是只注意到循环越界或只注意到输出越界,漏了另一处;D(3处)把const当成错误,或循环里多算一处。最阴险的细节在于i<=SIZE这个"等于"符号,很多人惯性写成i<SIZE,这里故意用<=,测试边界思维;arr[SIZE]输出看似合法,实则越界——SIZE只是常量,数组大小是SIZE,下标最大是SIZE-1。
反命题想一下:若把循环改成i<SIZE,错误只剩arr[SIZE]输出,变成1处;若SIZE改成动态变量,错误数会变。刷到类似题,先问自己"命题人想考我什么"——通常是循环边界和数组下标范围。