GESP C++ 二级 · 客观题精讲讲义

试卷:2025 年 12 月 · GESP Level 2(客观题部分)

用法:每题先独立思考并选出答案,再点开「显示解析」核对分步推理与知识点。

单选题 15 题 判断题 10 题 每题 2 分 · 共 50 分 核心:循环执行追踪 + 整除/取模

🗺️ 本卷知识地图

25 道题主要围绕下面 7 类知识点展开,复习时建议先掌握「循环追踪」和「整除/取模」两大核心。

① 计算机与网络常识

涉及:单选 1、2;判断 1。硬件分工(处理器=判断/运算)、网络分类(PAN/LAN/MAN/WAN)、操作系统≠编译器。

② 标识符与关键字

涉及:单选 3。变量名规则:字母/下划线开头,关键字不能当变量名,库函数名≠关键字。

③ 整除「/」与取模「%」⭐

涉及:单选 4、6、7;判断 3、4、6。整数除法向 0 截断,% 取余数,循环节用取模定位。

④ 浮点数与格式化输出

涉及:单选 5;判断 10。%g 默认精度、\n 换行的作用。

⑤ 关系/逻辑/布尔值

涉及:判断 2、5、6。比较结果是 0/1,非 0 即真,字符按 ASCII 参与运算。

⑥ 循环执行追踪 ⭐

涉及:单选 8、9、10、11、12、14;判断 7、8、9。嵌套循环计数、break/continue、先自增还是先输出。

⑦ 代码阅读与纠错

涉及:单选 13、15。循环里改写了原变量要先备份;单次扫描即可求最大/最小,不必排序。

第一部分 · 单选题(15 题)
单选 · 第 1 题单选题硬件组成 / 处理器

空客 A320 需更换易受太阳辐射影响的飞行控制软件。强烈太阳辐射可能损坏关键数据,导致判断失误。这里飞行控制系统执行判断的部件最可能是( )。

单选 · 第 2 题单选题网络分类 / 局域网

平时上学所在的教学楼内的网络属于( )。

单选 · 第 3 题单选题标识符 / 关键字

下面有关 C++ 变量的说法,正确的是( )。

单选 · 第 4 题单选题循环节 / 取模

小数 0.123123123…… 无限循环,小数点后第 1 位是 1、第 2 位是 2……求第 N 位的值,横线处应填( )。

int N;
cin >> N;
remainder = ___;            // 横线

if (remainder == 0)      cout << 1;
else if (remainder == 1) cout << 2;
else                     cout << 3;
单选 · 第 5 题单选题格式化输出 %g

执行 printf("%g\n", (3 + 3.1415926535)); 输出 6.14159,原因最可能是( )。

单选 · 第 6 题单选题整除 / 取模

工号编码 5 位全数字:前 4 位分别整除以 3 得到的商累加,其和除以 10 的余数为第 5 位。如 76587,前 4 位整除 3 商为 2、2、1、2,和为 7,7%10=7,故第 5 位为 7。两横线应填( )。

int rst = 0, N;
for (int i = 0; i < 4; i++) {
    cin >> N;
    rst += _____;   // L1
}
cout << _____;       // L2
单选 · 第 7 题单选题for / 条件 / 取模

下面代码执行后的输出是( )。

for (int i = -2; i < 2; i++)
    if (i % 2)
        printf("%d#", i);
单选 · 第 8 题单选题嵌套循环 / 计数

下面代码执行后输出是( )。

int cnt = 0, N;
for (int i = 1; i < 10; i += 2)
    for (int j = 0; j < i; j++)
        cnt += 1;
cout << cnt;
单选 · 第 9 题单选题continue / break

下面代码执行后输出是( )。

int i, j;
for (i = 1; i < 12; i++) {
    if (i % 2 == 0) continue;        // 跳过偶数
    for (j = 0; j < i; j++)
        if (i * j % 2 == 0) break;   // 遇到偶积就跳出
    if (j >= i) cout << i * j << " ";
}
if (i >= 12) cout << (i * j);
单选 · 第 10 题单选题for↔while 等价改写

与下面代码输出效果不一致的是( )。原代码输出 0123456789

int i;
for (i = 0; i < 10; i++)
    cout << i;
单选 · 第 11 题单选题while / continue

下面代码执行后输出是( )。

int num = 0;
while (num <= 5) {
    num += 1;
    if (num % 3) continue;
    printf("%d#", num);
}
if (num > 5) printf("%d", num);
单选 · 第 12 题单选题嵌套循环 / 求和

下面代码执行后输出是( )。

int cnt = 0;
for (int i = 0; i < 5; i++)
    for (int j = i; j < 4; j++)
        cnt += 1;
cout << cnt;
单选 · 第 13 题单选题循环改写变量 / 备份原值

「完整漂亮数」:N 能被 M 整除、且某位是 M、且各位数字之和能被 M 整除。下面代码判断 N 是否为 M 的完整漂亮数,正确的说法是( )。

int N, M, Flag, Sum, num;
cin >> N;  cin >> M;
Sum = 0;   Flag = 0;
while (N != 0) {
    num = N % 10;
    Sum += num;
    if (num == M) Flag = 1;
    N /= 10;                 // 循环后 N 一定变成 0
}
if ((N % M == 0) && (Flag == 1) && (Sum % M == 0))   // L1
    printf("%d 是 %d 的完整漂亮数", N, M);
else
    printf("%d 不是 %d 的完整漂亮数", N, M);
单选 · 第 14 题单选题嵌套循环 / 字符图形

输入 5,输出的字符图形是( )。

int n, i, j, k;
cin >> n;
for (i = 0; i < n; i++) {
    for (j = 0; j < n - i - 1; j++) cout << " ";   // 前导空格
    for (k = 0; k < 2 * i + 1; k++) cout << "*";   // 星号
    cout << endl;
}
单选 · 第 15 题单选题最值更新 / 复合赋值

25 名选手、10 位评委,去掉一个最高分和一个最低分作为最终得分。正确的说法是( )。

float total_score, max_score, min_score, now_score;
for (int i = 0; i < 25; i++) {
    max_score = 0;    min_score = 10;    total_score = 0;
    for (int j = 0; j < 10; j++) {
        cin >> now_score;
        max_score = max(max_score, now_score);   // L1
        min_score = min(min_score, now_score);   // L2
        total_score += now_score;
    }
    cout << (total_score - max_score - min_score);
}
第二部分 · 判断题(10 题)
判断 · 第 1 题判断题操作系统 / 编译器

鸿蒙是华为开发的一款操作系统,那么它能够将正确的源程序翻译成目标程序,并运行。( )

判断 · 第 2 题判断题逻辑运算 / 布尔

C++ 表达式 5 < 10 && 20 对应的逻辑值为 true。( )

判断 · 第 3 题判断题整数除法陷阱

C++ 表达式 10 / 0.333333 == 10 / (1 / 3) 的值为 true。( )

判断 · 第 4 题判断题整除 / while

下面代码中 N 是整数,无论输入负整数、0 或正整数,输出都将是 0。( )

cin >> N;
while (N) N /= 10;
cout << N;
判断 · 第 5 题判断题关系表达式 / 布尔取值

下面代码执行后,输出是 4 0。( )

int a, b;
a = 4;
b = a == 5;
cout << a << ' ' << b;
判断 · 第 6 题判断题字符编码 / 关系运算

C++ 中对表达式 ('Z' - 'A') < ('z' - 'A') 的结果输出为 0。( )

判断 · 第 7 题判断题位数判断

下面代码可以用于判断正整数 N 的位数(如 123 是 3 位数)。( )

int N, N10, i;
cin >> N;
N10 = 10, i = 1;
while (1) {
    if (N % N10 == N) { printf("%d 是 %d 位数", N, i); break; }
    i++, N10 *= 10;
}
判断 · 第 8 题判断题符号翻转 / 赋值

计算交叉加减 1-2+3-4+5-……。将 Flag = -Flag 改为 Flag -= Flag 效果相同。( )

cin >> N;
Flag = -1;  tnt = 0;
for (i = 1; i < N + 1; i++) {
    Flag = -Flag;        // 在 +1 / -1 间来回切换
    tnt += Flag * i;
}
cout << tnt;
判断 · 第 9 题判断题嵌套循环 / 等差求和

下列代码段执行后将输出 55。( )

int cnt = 0;
for (int i = 0; i < 10; i++)
    for (int j = i; j < 10; j++)
        cnt += 1;
cout << cnt;
判断 · 第 10 题判断题换行控制 \n

下面代码输出九九乘法表。因为 printf("\n") 没有可读内容,删除不影响输出效果。( )

for (int i = 1; i < 10; i++) {
    for (int j = 1; j < 10; j++)
        printf("%3d", i * j);
    printf("\n");          // 每行末尾换行
}