下面的 C++ 代码用于求 $N$ 的镜面数($N$ 的个位到最高位的各位数字依次反过来出现在数字中,但高位 $0$ 将被忽略,不输出),如输入 $1234$,则将输出 $4321$,又如输入 $120$,则将输出 $21$,错误的选项是( )。
cout << "请输入个位数不为0的正整数:";
cin >> N;
rst = 0; // 保存逆序结果
while (_____________){
rst = rst * 10 + N % 10;
N = N / 10;
}
cout << rst << endl;答案C。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。
逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。
【考点】循环控制|条件判断|整数运算
1. 考纲定位:本题落在 GESP 一级“循环结构”模块,考察 while 循环终止条件的选择。命题人把“取模+整除”的逆序算法与条件判断捆绑,卡住的是初学者对“何时停止”的直觉。
2. 很多人会下意识写成 N=0 这种赋值,却忘了它永远不成立。
3. 解题思维:核心观察是N 为正整数,循环必须在N 还剩至少一个非零位时继续。因此条件必须是“N 非零”的等价表达式。
4. N != 0 和 not (N == 0) 都是正确的否定形式,N > 0 因N 从正数开始且只会降到 0,同样满足“非零即继续”。
5. 陷阱拆解:C 选项 N = 0 是赋值,值恒为假,循环体一次也不执行;改成 N == 0 永远为真,同样错。
6. A、B、D 都是逻辑上"N 非零”的不同写法,只有 C 是语法和语义陷阱。
7. 反命题思维:把 N != 0 换成 N = N / 10 后置,会形成“先输出再更新”的无限循环。
8. 刷到类似题,先问自己:“这个变量什么时候会自然归零?”答案就是 while 的正确条件。