GESP 二级 · GESP 202312 C++ 二级 第 4 题

选择题 · 答案 D

← 整套速查表 GESP 二级 全部真题

题目

下面 C++ 代码用于判断输入的整数是否为对称数,如 1221、12321 是对称数,但 123、972 不是对称数。下面对该题对应代码的说法,正确的是 ( )。

cin >> N;
newNum = 0;
while(N) {
    newNum = newNum * 10 + N % 10;
    N = N / 10;
}
if(newNum == N)
    cout << N << "为对称数";
答案:D

解题思维

这题核心就盯住循环里 N 的归宿:while(N) 每轮都让 N 除以 10,直到 N 变成 0 才退出,所以循环结束时 N 必然是 0,判断 newNum == N 永远不成立(除非原数就是 0),这就是 D 正确、其他选项错在哪的根本原因。

常见错误

学生最容易掉进两个坑:一是以为 while 条件里的 N 是原始值,没看到循环内 N 被持续修改,误选 A;二是纠结负数,觉得 while(N) 对负数会死循环,其实 C++ 里负整数右除最终也会归零,不会死循环,所以 B 也是干扰项;三是把语法当问题,cin、while、==、cout 都合法,C 纯属吓唬人。真正要避开的是忽视循环变量变化导致的逻辑误判。

详细解析(节选)

【考点】循环变量修改|变量作用域|逻辑判断

1. 命题人怎么挖坑

这道题表面看是“判断对称数”,实际考的是循环里变量被持续修改这一细节。命题人把原始值 N 直接放在 while 条件里,循环内又不断用 N/10 更新 N,最后却拿 newNum 和 N 比较。80% 的考生会下意识认为“循环外 N 还是原来的数”,从而误选 A;或者想到负数会死循环,误选 B;甚至怀疑语法错误,选 C。这些都是典型的“变量污染”陷阱。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断