GESP 二级 · GESP 二级样题(C++ 组) 第 13 题

选择题 · 答案 D

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

题目

在下列代码的横线处填写( ),可以使得输出是“20 10”。 ![](https://cdn.luogu.com.cn/upload/image_hosting/e0lhy5bj.png)

答案:D

解题思维

这题考变量交换,拿到题先看选项是不是合法语法,排除掉 C++ 不支持的,剩下看会不会溢出或逻辑错误,D 用临时变量最稳妥。

常见错误

容易把 Python 元组解包当成 C++ 语法选 A,或者被算术交换的“巧妙”吸引选 C 却忽略整数溢出风险,还有用 max/min 交换时没考虑到 a 和 b 相等时逻辑不严谨,这些坑都是命题人爱挖的。

详细解析(节选)

考点与命题视角

这道题考查的是“两个变量交换”这一基础操作,同时混合了语言特性陷阱和数值陷阱。命题人设计这道题的意图很明确:在看似都能交换的选项里,埋下只有 C++ 才会犯的错误,以及只有懂底层行为才会踩的坑。

逐个拆解选项

A 选项 (a, b) = (b, a) 乍一看很像交换,但这是 Python 的元组解包语法。C++ 里没有这种写法,编译器会直接报错。这是最典型的“语言陷阱”,命题人就是想看你是否清楚 C++ 的语法边界。

B 选项 a = max(a, b); b = min(a, b); 用 max 和 min 确实能交换,但前提是 a 和 b 不相等。如果 a 等于 b,执行后 a 还是等于 b,b 还是等于 b,交换没发生。逻辑上不严谨,属于“条件缺失”的坑。

C 选项 a = a + b; a = a - b; b = a - b; 这是经典的算术交换法,数学上没问题。但在 C++ 里,整数相加可能溢出,溢出是未定义行为,程序结果不可预测。而且题目没给 a、b 的范围,直接选 C 就是赌运气,命题人就是要你警惕这种“看似优雅实则危险”的写法。

D 选项 int tmp = a; a = b; b = tmp; 用临时变量保存原值,再依次赋值,步骤清晰、无副作用、无溢出风险,是 C++ 中交换两个整数的标准写法。无论 a、b 是什么值,都能正确交换。

思考心法

拿到这种“填空选语法”的题,第一步先扫一眼选项是不是合法语法。C++ 不支持的(如元组解包)直接排除。剩下的再看有没有逻辑漏洞(max/min 依赖不等)或数值风险(算术溢出)。最后对比哪个最稳妥。

避坑提醒

考频与趋势

基础语法题在题库里出现频率很高:总题数 1295 道,覆盖 11 个级别,从 2008 年到现在每年都有。近年爆发式增长:2023 年 287 道、2024 年 413 道、2025 年 401 道,说明这类题是高频考点。分赛事看,GESP 二级考了 283 道,占比很大,正是你正在刷的级别。运算符与表达式类题总题数 261 道,2023 年 91 道、2024 年 41 道、2025 年 61 道,也呈现逐年上升态势。

预测

基于数据,GESP 二级的基础语法和变量操作题在未来两年仍会保持高频率,命题人大概率继续用“语言陷阱 + 数值陷阱”的组合来区分学生。暂无足够依据预测具体题型变化,但“交换变量”这类经典操作几乎年年都会以不同包装出现,建议把 D 这种标准写法刻进肌肉记忆。

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