如下 C++ 代码执行后,输入 $4$ 后,输出的数字图形是( )。
int n;
cin >> n;
for (int i = n; i > 0; i--) {
for (int j = 0; j < n - i; j++)
cout << "0 ";
for (int k = 0; k < i; k++)
cout << k + 1 << " ";
cout << endl;
}A.
1 2 3 4
1 2 3 0
1 2 0 0
1 0 0 0B.
1 2 3 4
0 1 2 3
0 0 1 2
0 0 0 1C.
1 2 3 4
2 3 4 0
3 4 0 0
4 0 0 0D.
0 0 0 1
0 0 1 2
0 1 2 3
1 2 3 4答案B。考点: 循环结构——for/while的执行与嵌套。
关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。
【考点】嵌套循环控制|动态范围计算|输出格式化
🎯 考纲定位 本题考查 GESP 二级《基本编程》模块中的嵌套循环考点。命题人专门设计这道题,就是要卡住那些"只记得会写循环,但不懂循环变量如何影响内层逻辑"的考生——外层循环变量 i 同时控制内层两个循环的迭代次数,这种"动态范围"是二级到三级跨越时的典型失分点。
🧠 解题思维 看到双重 for 循环,第一反应是"每行输出内容随 i 变化"。关键观察:内层循环 1 执行 n−i 次,循环 2 执行 i 次,两者相加恒等于 n——这意味着每行总宽度固定,只是 0 与数字的分配比例在变。外层 i 从 n 递减到 1,所以第一行全数字、最后一行全 0。通法:嵌套循环题,先确认内层循环次数是否依赖外层变量,若依赖则逐行模拟输出,注意循环边界 i>0 而非 i<n。
🪤 陷阱拆解
细节:每行末尾都有空格,但选项里没体现——这是打印题常见的视觉干扰项。
🔄 反命题思维 如果把外层条件改成 i < n,循环 2 改成 cout << i+1,整个图形就会变成"数字递增、0 递减"的镜像版。刷到类似题,先问自己"外层循环是递增还是递减?内层次数和当前变量是什么关系?"——这三问答对,90% 的嵌套循环题都能秒杀。