执行以下 C++ 语言程序后,输出结果是( )。
#include <iostream>
using namespace std;
int main() {
int array[3][3];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
array[i][j] = i * 10 + j;
int sum;
for (int i = 0; i < 3; i++)
sum += array[i][i];
cout << sum << endl;
return 0;
}这道题表面看是二维数组赋值和对角线求和,但核心考点是C++局部变量未初始化的未定义行为。拿到题先别急着算数字,先盯住int sum;这一行,问自己:它被赋过值了吗?没赋,那后面累加的结果就是随机垃圾,答案自然无法确定。
学生最容易掉进‘默认从0开始’的惯性思维里,看到sum后面一直在加,就下意识觉得sum初始是0,于是心算出对角线元素0+11+22=33,直接选C。还有的会纠结数组对角线是不是0/10/20,把i*10+j看漏了j,或者把i*10+j算成i+j,导致算出3或30。这些错误都源于没抓住‘未初始化’这个致命漏洞,只关注了算术运算本身。
本题考查GESP四级‘基础语法’模块中数组声明与循环控制的综合运用。命题人特意挖空sum的初始化,专卡那些只背‘数组求和要加0’口诀、却忽略局部变量默认值的考生——这是四级最典型的‘看似正确实则漏洞百出’设计。很多学生看到int sum;后面紧接着就是sum += ...,下意识地认为sum是从0开始累加的,从而掉进陷阱。