GESP 一级 · GESP 202606 C++ 一级 第 17 题

判断题 · 答案 A

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

题目

如果 $n$ 为大于 $0$ 的整数,则 C++ 表达式 (n / 10) % 10 与 (n % 100) / 10 的结果相同。

答案:A

解题思维

答案A。表达式(3==0)+'A'+1+3.0中,有double参与运算,整个表达式结果提升为double类型。

常见错误

表达式结果类型由最高精度的操作数决定。double参与运算后整个表达式提升为double。

详细解析(节选)

【考点】整数除法|取模运算|数的位值表示

命题人专盯初学者对“除法的截断”与“取余的截断”混淆不清,这是C++一级最易丢分的细节盲区。

先看左式:n / 10 去掉个位,再 % 10 取十位;右式:n % 100 保留末两位,再 / 10 去掉个位,同样得到十位。本质是“先截断再取位”与“先取位再截断”两种顺序等价。这类题通法是拆解运算符优先级,用具体数值代入验证。

错误选项B是命题人设的“绝对化”陷阱。它利用初学者“除法和取余都是去掉一位”的模糊认知,故意把两个等价表达式写成不等价。最阴险的细节在于省略了“n>0”的前提——若n=0,左式是0,右式也是0,看似成立,但n<0时左式可能为正(因C++除法向0取整),右式却为负,此时等式不成立。所以“n>0”是绝对必要的前提,选B的人就是忽略了边界条件。

命题人视角:把“n>0”改成“n为整数”,答案立刻变B。因为负数时C++除法向0取整,(n / 10) % 10 可能为正,而 (n % 100) / 10 却为负,等式不成立。刷到这类题先问自己:题目有无隐藏前提?

— |

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