GESP 二级 · GESP 202503 C++ 二级 第 20 题

判断题 · 答案 A

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

题目

下面 C++ 执行后将输出 3*2=6。( )

int a=2, b = 3;
a = a - b;
b = a + b;
a = b - a;
printf("%d*%d=%d\n", a, b, a*b);
答案:A

解题思维

答案A。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。

常见错误

整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。

详细解析(节选)

【考点】变量赋值与运算顺序|中间状态跟踪

GESP 二级 C++ 模块「基础语法」中「变量与运算」考点。命题人专盯考生对赋值语句顺序执行的理解——多数人会误以为三行代码能同时交换 a、b 的值,实则依赖中间变量的状态更新,这是区分“知道公式”与“懂过程”的关键。

按顺序逐行推演:初始 a=2,b=3;执行 a=a-b 得 a=-1;接着 b=a+b 得 b=2;最后 a=b-a 得 a=3。此时 a、b 确实完成互换,输出 3*2=6 完全正确。此类题通法永远是“单步跟踪”,切忌跳步或脑补并行执行。

错误选项 B 利用“交换变量”的直觉陷阱——很多考生看到三行赋值就以为能直接互换 a、b,忽略中间 a 先被赋负值的事实。命题人特意设计 a=a-b 而非 t=a;b=a;a=t,就是想测试你是否真的理解赋值是即时覆盖而非数学公式。

换个角度,若把 a=a-b 改为 a=a*b,中间值会变成 6,后续逻辑全崩,这提醒我们:任何变量操作都必须考虑当前状态的即时性。刷到类似题先问“这行代码修改后,下一行引用的是旧值还是新值?”

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