在下列代码的横线处填写(),使得输出是 50 10。
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 50;
________; // 在此处填入代码
b -= a;
a += b;
cout << a << " " << b << endl;
return 0;
}
这题本质是逆向推导。先锁定最终 a=50, b=10,再根据后面两步反推横线处执行后 a 应为 40、b 应为 50。代入初始值验算,只有 C 能把 a 从 10 变成 40 且不碰 b,后续才能凑出答案。
最容易栽跟头的就是选项 A 和 B。A 看起来像交换,但 a -= b 是减法,a 会变成 -40,完全跑偏;B 是 a += b,a 变成 60,虽然离 50 近,可 b 没变,后面 b -= a 就会把 b 减成 10,a += b 再变回 60,输出是 60 10,错。D 直接把 a 赋成 50,b 还是 50,随后 b -= a 变成 0,a += b 变成 50,输出 50 0,也不对。很多学生只背结论,不看执行顺序,就会误选。
【考点】变量赋值|运算符优先级|顺序执行
GESP 二级「C++编程」模块「基本语法」考点。命题人卡住绝大多数考生的弱点:看到输出反推答案时,习惯直接凑数,却忘了代码是按顺序执行的,每一步变量值都在变。这道题本质考的是"给定最终结果,倒推初始操作"的逆向调试能力。