下面 C++ 代码执行后的结果是( )。
int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}};
for(int i=0;i<3;i++)
{
for(int j=2;j>=0;j--)
{
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
拿到二维数组嵌套循环题,别急着看输出格式,先盯紧内层循环的初始化值和步长。这题里 j=2 且 j--,直接告诉你每行是从右往左倒着取的,答案大概率是行内逆序的 C 选项。
学生最容易掉进‘默认行优先’的肌肉记忆里,看到二维数组就下意识想 j 从 0 到 2,从而选成 A 或 B。另外很多人会忽略 endl 的位置,以为换行是在所有数据输完才出现,其实代码里每处理完一行就换行了,这直接排除了 A 选项那种‘一行到底’的错误格式。
这道题考查的是二维数组的遍历顺序与嵌套循环的控制逻辑,核心知识点就是数组下标运算以及 for 循环中初值、条件、步长的作用。命题人最喜欢在循环变量上‘挖坑’,比如把 j 从 0 改成 2,或者把 j++ 改成 j--,看似微小的改动,整个输出结果就完全反转了。拿到这种题,思考心法应该是:先不管具体数字,只看循环变量在做什么,确定遍历方向,再代入具体下标算出结果,最后对照换行符的位置。这题的外层循环 i 从 0 到 2,负责遍历每一行,顺序固定;内层循环 j 的初值是 2,条件是 j>=0,步长是 j--,这意味着对于每一行,列下标是从 2 倒着走到 0。所以第一行输出的是 arr[0][2]、arr[0][1]、arr[0][0],即 3 2 1;第二行同理是 6 5 4;第三行是 9 8 7。每行输完三个数后,代码执行 cout<<endl,立刻换行。这样整体输出就是三行,每行数字从大到小。对比选项,A 是行内从小到大且只有一行换行,B 是行列都倒序,D 是转置后的结果,只有 C 符合行内逆序且每行末尾换行的特征。最容易错的是选 A,因为很多人看到二维数组就默认 j 从 0 开始,或者忽略了 j=2 这个初值,以为还是正序输出;还有人会误以为 endl 只在最后输出一次,从而把 A 当成正确答案。从考频数据来看,基础语法在题库中占比极高,2023 年就有 287 题涉及,2024 年达到 413 题,2025 年也有 401 题,说明这类数组遍历与循环控制的题目是近年来的绝对高频考点,尤其在 GESP 四级中,二维数组操作更是必考内容。趋势上,随着考试对代码阅读能力的要求提高,这类看似简单但细节决定成败的循环陷阱题只会越来越多,命题人会继续在循环变量初值和步长上做文章,比如改成 j=1 或 j<=2 等变体。因此,备考时要特别注意:看到嵌套循环,先圈出内层循环的 j 初值和步长,确定列的遍历方向,再结合外层循环确定行的遍历方向,最后检查换行符的位置,这样就能稳稳避开坑,选出正确答案 C。