如下 C++ 代码执行时,下列说法错误的是( )。
int N, tot;
cin >> N;
tot = 0;
while (N > 0) {
cout << N << "#";
tot += 1;
N -= 1;
}
cout << tot << "-END";模拟代码执行流程,注意while循环条件N>0只允许正数进入循环体。每次循环输出当前N值后N减1,同时tot累加。循环结束后输出tot和-END。关键要逐行推演变量变化过程。
选项D把tot误算为0——实际上输入1时循环执行一次,tot从0变1,输出应为1#1-END。选项A看似奇怪(末尾又出现3),但循环共执行3次,每次输出递减的N(3、2、1),循环结束后输出的是tot值3,所以末尾的3-END完全正确。
本题考查GESP一级《算法流程》模块中的while循环与变量累加。命题人故意把循环次数和输出值混淆,卡住的是初学者对"循环体执行后变量如何变化"的基本理解——很多学生只看循环次数,忽略循环体内N和tot的同步递减与累加。
模拟执行,严格按代码顺序推演:
| 步骤 | N值 | tot值 | 输出 |
|---|---|---|---|
| 初始 | 1 | 0 | — |
| while判断 | 1>0 ✅ | — | — |
| 循环体1 | 输出1# | tot=1 | N=0 |
| while判断 | 0>0 ❌ | — | — |
| 循环结束 | — | — | — |
| 最后输出 | — | tot=1 | 1-END |
因此输入1时,完整输出应为:1#1-END。