GESP 一级 · GESP 202306 C++ 一级 第 13 题

选择题 · 答案 C · 考点:算法

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

题目

在下列代码的横线处填写( ),使得输出是 “20 10”。

#include <iostream>
using namespace std;
int main() {
    int a = 10, b = 20;
    a = ________; // 在此处填入代码
    b = a + b;
    a = b - a;
    cout << a << " " << b << endl;
    return 0;
}
答案:C

考点

算法

解题思维

这道题考的是用加减法原地交换两个整数的逻辑,拿到题先别急着填,把后两行代码当已知条件反推:要想最后输出20 10,b必须是30,那横线处就得让a变成-10,直接代入验证最快。

常见错误

学生最容易掉进D选项的坑,觉得第一步把a算成20看起来像交换好了,就忘了看b的变化;或者死记硬背交换公式,没注意这里是用三行运算实现的,导致代入后算出错误的中间值。

详细解析(节选)

【考点与命题视角】 这道题属于GESP一级“基本编程”模块,核心考查整数运算、变量赋值以及用运算表达式实现逻辑交换的能力。命题人专门挖了一个“交换陷阱”:学生平时背过“用临时变量交换”的套路,但这里要求用加减法原地交换,卡住的是对运算顺序和变量状态追踪的理解。很多初学者看到a = _______,第一反应是填b(选项B),觉得把a赋值为b不就交换了吗?或者填a+b(选项A),觉得这样能凑出大数。这都是典型的思维定势,命题人就是要看你是否真的读懂了后续两行代码在干什么。

【解题心法:从后往前推】 拿到题,千万别一上来就填横线。先看后两行:b = a + b; a = b - a;。这两步已经把a换成了原b、b换成了原a+b。要让最终输出“20 10”,b必须是30,所以横线处必须让a变成10(原a)。原a=10,原b=20,所以a = a - b = -10才能让后续运算得到10:-10 + 20 = 10(赋给b),10 - (-10) = 20(赋给a)。完整流程:a = a - b → b = a + b → a = b - a,实现交换。

【代入验证,逐个击破】 为了保险起见,我们把四个选项都代入横线处,跑一遍完整流程,看看输出是什么。

选项A:a = a + b。初始a=10, b=20。第一步a变成30;第二步b = 30 + 20 = 50;第三步a = 50 - 30 = 20。输出“20 50”,不对。

选项B:a = b。初始a=10, b=20。第一步a变成20;第二步b = 20 + 20 = 40;第三步a = 40 - 20 = 20。输出“20 40”,不对。

选项C:a = a - b。初始a=10, b=20。第一步a变成-10;第二步b = -10 + 20 = 10;第三步a = 10 - (-10) = 20。输出“20 10”,正确!

选项D:a = b - a。初始a=10, b=20。第一步a变成10;第二步b = 10 + 20 = 30;第三步a = 30 - 10 = 20。输出“20 30”,不对。

【避坑指南】 最阴险的是D,它让a先翻倍成20,看起来像“交换好了”,但b没变回来。学生只盯着第一步赋值,不看后续连锁反应就会选错。另外,有些同学会误以为a = a - b会让a变成负数,觉得不合理,其实这正是交换的关键,负数在这里只是中间状态,最终会被修正。记住,这类题的本质不是“加减法”,而是“用三行运算实现两变量交换”,下次刷到类似结构,先问自己:最后两行在干什么?它们已经把a换走了,横线必须补回原a的值。

【考频与趋势】 从题库数据看,基础语法类题目共考过1295题,覆盖11个考试级别;逐年分布:2008年1题、2011年1题、2019年3题、2023年287题、2024年413题、2025年401题、2026年109题、null年80题。分赛事:GESP一级332题、GESP二级283题、GESP三级215题、GESP四级186题、GESP七级91题、GESP八级79题、GESP六级78题、GESP五级23题、CSP提高级3题、CSP入门级3题、NOIP提高组初赛2题。运算符与表达式类题目共考过261题,覆盖9个考试级别;逐年分布:2007年4题、2008年1题、2009年4题、2010年5题、2014年1题、2019年3题、2020年2题、2021年1题、2022年1题、2023年91题、2024年41题、2025年61题、2026年14题、null年32题。分赛事:GESP一级72题、GESP二级70题、GESP三级47题、GESP四级37题、CSP入门级12题、NOIP普及组初赛9题、CSP提高级7题、NOIP提高组初赛6题、GESP五级1题。算法类题目共考过7题,覆盖4个考试级别;逐年分布:2010年1题、2013年1题、2023年2题、2024年2题、2025年1题。分赛事:CSP入门级4题、NOIP普及组初赛1题、CSP提高级1题、NOIP提高组初赛1题。

【预测】 基于GESP一级在基础语法和运算符上的高频考情(2023-2025年分别有287、413、401题,其中运算符类2023年91题、2025年61题),未来这类“用运算表达式实现逻辑交换”的题目仍会保持高概率出现,但形式可能更隐蔽,比如不直接给三行代码,而是嵌入在更长的流程中,或者改变初始值让学生自己推导。暂无足够依据预测具体年份或题目数量,但建议重点复习变量状态追踪和代入验证法。

同考点真题

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