GESP 二级 · GESP 202406 C++ 二级 第 17 题

判断题 · 答案 B

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

题目

C++ 表达式 -12 % 10 的值为 $2$。( )

答案:B

解题思维

答案B。根据C++基础知识分析判断。

常见错误

注意题目中的限定词。不确定时用代入法或排除法。

详细解析(节选)

【考点】取模运算|负数取模|运算符优先级

🎯 考纲定位 本题考查《GESP C++ 二级大纲》"表达式与运算"模块的取模运算规则,以及 C++ 语言特有的负数取模行为。命题人专门放这道题,就是要卡住那些把数学直觉直接套用到 C++ 上的考生——在纯数学里 -12÷10=-1.2,取模结果习惯写成 8(欧几里得定义),但在 C++ 里完全不是这回事。

🧠 解题思维 看到 -12 % 10,第一反应要回到 C++ 标准定义:a % b = a - b × trunc(a / b)。trunc 是截断小数部分,不是向下取整。因此: -12 / 10 = -1.2,trunc(-1.2) = -1 -12 % 10 = -12 - 10 × (-1) = -12 + 10 = -2

所以题目断言"值为 2"直接错。这一类题的通法是:遇到负数取模,先算除法截断结果,再代入公式,切忌用数学教材里的欧几里得定义来类比。

🪤 陷阱拆解 错误选项 B 是"错误",但大量考生选成 A,原因有三: 1)符号陷阱:命题人利用"结果应为正数"的直觉,因为 -12 和 10 的绝对值关系确实像 8,但 C++ 规定 a % b 的符号与 a 相同,所以 -12 % 10 必然是负数。 2)绝对化表述:"值为 2"没有给任何条件范围,暗示考生可能忽略负数情形。 3)偷换概念:把数学取模(余数非负)与 C++ 取模(同被除数符号)混为一谈。如果你只背"取模就是除不尽的余数",就会掉进这个坑。

🔄 反命题思维 如果命题人把 -12 换成 -120,-120 % 10 仍为 -0(即 0),因为 -120 / 10 = -12,截断仍是 -12,-120 - 10×(-12) = 0。若换成 -12 % 100,则 -12 / 100 = -0.12,截断为 0,结果就是 -12 本身。刷到类似题,先问自己:C++ 的 trunc 规则下,这个值到底该是正还是负?

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