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

判断题 · 答案 B · 考点:基本数据类型

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

题目

已知 double 类型的变量 a 和 b,则执行语句 a = a + b; b = a - b; a = a - b; 后,变量 a 和 b 的值会互换。

答案:B

考点

基本数据类型

解题思维

判断正误题需注意绝对化表述("一定""必须""只能"等)往往是错误的。

常见错误

判断题中注意"一定""总是""所有""唯一"等绝对化表述通常是错误的。但也要结合具体知识点判断。

详细解析(节选)

【考点】浮点精度|算术运算|数据类型

1. 考纲定位 本题考查《GESP 八级 C++ 大纲》中"浮点数据类型与精度"模块。命题人专门把这道题放在这里,就是要卡住那些只会背"交换算法"却不懂 double 底层表示的考生——他们以为代数上成立的逻辑在计算机里一定成立。

2. 解题思维 完整思考链:先按代数推导——三步确实能完成交换(a=a+b, b=(a+b)-b=a, a=(a+b)-a=b)。但关键观察是变量类型为 double,浮点运算存在舍入误差。a=a+b 后 a 的尾数已含误差,后续减法无法完全抵消,最终 a 和 b 的值会"极其接近"原值互换结果,但二进制表示不可能完全相等。

3. 陷阱拆解 错误选项 A 利用的是"代数正确即代码正确"的惯性思维,命题人刻意用 double 制造精度陷阱。最阴险的细节是题目未提"近似相等",只问"值会互换",在 C++ 语义下等价于"完全相等判断"。如果你只背结论而忽略类型语义,就会掉进这个坑。

4. 反命题思维 反命题视角:把 double 改成 int,答案立刻变 A;若题目加一句"是否近似相等",答案又变 A。刷到类似题先问:命题人是否在用浮点精度考我?是否在用语义陷阱考我?

同考点真题

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