GESP 四级 · GESP 202406 C++ 四级 第 23 题

判断题 · 答案 A

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

题目

在下面这个程序里,a[i][j] 和一个普通的整型变量一样使用。

#include<iostream>
using namespace std;
int main()
{
    int a[10][10]={0};
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
            if(i==j)
            {
                a[i][j]=1;
            }
        }
    }
}
答案:A

解题思维

答案A。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。

常见错误

指针和数组追踪时画内存布局图可以大大简化理解。

详细解析(节选)

【考点】二维数组定义|部分初始化规则|循环边界控制

考纲定位:本题考查 GESP 四级"数组与二维数组"模块中的局部数组初始化规则。命题人专门在此处设题,就是要卡住那些把"数组必须全元素显式初始化"当成铁律的考生。

解题思维:看到 int a[10][10]={0}; 先确认这是局部数组,C++ 允许部分初始化,剩余元素自动补 0。双重循环里 i==j 时把主对角线置 1,边界完全在 0-9 内,没有越界风险。因此程序逻辑正确,运行无误。

陷阱拆解:选项 B 错误。命题人利用的是"数组初始化必须列出所有元素"的绝对化误区,以及初学者常混淆全局数组(自动初始化)与局部数组(不会自动初始化)的区别。还有,很多人会纠结二维数组的初始化语法,以为 a[10][10]={0} 无效。

反命题思维:若把数组改成 int a[10][10]; 而不初始化,程序仍能编译运行,只是未初始化元素值不确定。若把循环条件改成 i<j,则只填充下三角。刷到类似题,先问自己:命题人想考我的是初始化规则、二维数组语法,还是循环边界?

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