下面 C++ 代码用于实现如下图所示的效果,其有关说法正确的是( )。
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25for (int i = 1; i < 6; i++) { // L1
for (int j = 1; j < i+1; j++) // L2
cout << i*j << " ";
cout << endl;
}答案A。for循环每次迭代后执行更新表达式(如i++)。循环体执行次数由初始值、条件和更新共同决定。
循环变量的初值、终值和步长共同决定循环次数。for(i=0;i<n;i++)执行n次。
【考点】嵌套循环控制|条件边界判定|输出流操作
🎯 考纲定位 本题考查 GESP 二级"循环结构"模块的核心能力——循环嵌套与边界控制。命题人专挑"循环边界"这个高频失分点:二级考生容易混淆 i<6 与 i<=6 的差别,误以为 6 行才完整,忽略了题目图示本身就只到 5 行。
🧠 解题思维 外层 i 从 1 到 5 决定行数(共 5 行),内层 j 从 1 到 i 决定每行元素个数(第 1 行 1 个、第 2 行 2 个……形成三角形)。i*j 产生乘积序列,L2 内输出后、L1 末尾的 endl 完成换行——这是生成多行表格的标准范式:先处理单行数据,再统一结束该行。
🪤 陷阱拆解 B 错在把 endl 嵌入 L2 内部:每输一个数就换行,变成 25 行单列输出,完全破坏表格结构。 C 错在移到 L1 外部:所有数字挤在一行输出,末尾才有一个换行,等于没换行。 D 错在删掉 endl:同样造成单行超长输出,且没有换行符结尾(程序输出不规范)。 最阴险的细节是 L1 条件写死为 i<6,看似"少一行",实则与题目图示完美匹配——考生若不加细看题图,就会凭经验补成 6 行。
🔄 反命题思维 若把 L1 改成 i<=6,会多输出一行"6 12 18 24 30 36 ",直接破坏表格形状;若把 L2 改成 j<=i,因 j 从 1 开始,效果不变。 刷到类似题先问自己:这个循环到底控制什么维度?边界条件为什么是这个数?