在下列代码的横线处填写(),可以使得输出是 “20 10”。
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 20;
a = ________; // 在此处填入代码
b = a / 100;
a = a % 100;
cout << a << " " << b << endl;
return 0;
}这道题考的是整数运算和表达式求值,核心是逆向推导:先定最终输出 a=20、b=10,再顺着代码倒推横线处 a 必须等于 1020(1000+20),代入选项验证即可锁定答案。
最容易栽跟头的是选 C,盯着输出里的 20 就以为 b*100+a 能凑出 20,却没注意 a 在前 b 在后,C 算出来是 2010 对 100 取余得 10、除以 100 得 20,输出会变成 10 20;其次是 A,把横线当成普通加法,忽略了后面除法和取余会彻底改写值;还有人会以为 D 随便拼个数就行,其实它必须严格满足除以 100 取整得 10、取余得 20 这两个约束,不能乱凑。
GESP 一级 C++「基本运算与表达式」模块。命题人刻意放这道题,就是要卡住一部分考生「不会逆向推导」的弱点——你只敢正向写代码,却不会从输出反推中间变量该是什么值。
拿到这种填空改输出题,第一步永远先锁定最终输出:a 要变成 20,b 要变成 10。然后顺着代码往下走,看每一步操作对变量做了什么。
代码里关键两步:
这两个条件同时满足的数只有 1020(1000 + 20)。因此横线要填一个能算出 1020 的表达式。