执行如下 C++ 程序后,当输入 $4$ 时,输出的最后一行是( )。
int n;
cin >> n;
for (int i = n; i > 0; i--) {
for (int j = 0; j < i; j++)
cout << j + 1 << ' ';
cout << endl;
}在纸上逐行模拟程序执行,重点追踪变量值变化和输出语句。按照题目输入代入计算。正确答案B。
关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。
【考点】循环迭代|基本输入输出
本题考查 GESP 二级"循环与迭代"模块,命题人专卡"嵌套循环终止条件"——多数考生会误以为最后输出的是 n 项,实则是 i 递减至 1 时的单行输出。
看到外层 i 从 n 递减,内层 j 打印 1..i,每行输出 i 个数(即第 n 行已输出过)。外层结束时 i=1,故最后一行只能是 1。通法:嵌套循环中,外层终止值决定最后一轮输出规模。
错项解析:A 项 0 违反内层 j+1 最小值 1;C 项 1 2 对应 i=2,但 i 递减至 1 后才结束;D 项 1 2 3 4 需 i=4,可出现在第一行而非最后。最阴险处:"最后一行"易被误读为"最大长度行",实则是循环终止时的唯一输出。
若将外层改为 i 从 1 递增,则最后一行变为 n;若内层改为 cout << i,则最后一行仍为 1(i 从 1 开始递增时则相反)。刷到此类嵌套循环题,先问"外层终止值是什么?"
()