GESP 客观题评测系统

试卷解析 · 理解每一步

2026-09-Level-1

2026-09-Level-1

试卷解析总览,可直接查看每题答案与解析。

单选题

第 1 题(单选题,2 分)

第二届世界人形机器人运动会开幕式上,机器人方阵通过控制程序来完成整场表演。表演前,工程师们使用集成开发环境(IDE)编写并调试方阵的控制程序。下列关于 IDE 功能的描述,错误的是()。

A.
可以提供代码自动补全,提高编程效率
B.
可以提供辅助信息,帮助排查程序逻辑错误
C.
可以直接控制机器人电机转动
D.
支持语法高亮,使代码更易阅读

正确答案C

解析详情
答案 C集成开发环境(IDE)
思路与推导
  1. IDE 用于编写、编译和调试程序,自动补全、调试辅助信息和语法高亮都属于常见功能。电机转动由运行中的控制程序配合控制器实现,不是 IDE 本身直接完成的,因此 C 错误。

第 2 题(单选题,2 分)

现代计算机自问世至今,已经经历了四个时代,即:电子管计算机(1946—1958年)、晶体管计算机(1958—1964年)、中小规模集成电路计算机(1965—1970年)以及大规模和超大规模集成电路计算机(1971年至今)。那么这里划分计算机时代所采用的主要依据是()。

A.
运算速度
B.
存储容量
C.
体积大小
D.
核心元器件

正确答案D

解析详情
答案 D计算机发展阶段
思路与推导
  1. 电子管、晶体管、集成电路都是计算机采用的核心电子元器件。题干按这些元器件的变化划分时代,因此选 D。

第 3 题(单选题,2 分)

下列 C++ 代码执行的输出是()。

int a = 4 + -2 * 3;
cout << a;
A.
-2
B.
6
C.
18
D.
输出错误提示信息

正确答案A

解析详情
答案 A运算优先级
思路与推导
  1. 先计算 -2 * 3 = -6,再计算 4 + (-6) = -2,故输出 -2。

第 4 题(单选题,2 分)

下列 C++ 表达式与 2 * - 2 % 3 的值相同的是()。

A.
(2 * - 2) % 3
B.
2 * (- 2 % 3)
C.
2 * - (2 % 3)
D.
2 % - 2 * 3

正确答案A

解析详情
答案 A乘除取余的结合顺序
思路与推导
  1. 乘法与取余同级,按从左到右结合:2 * -2 % 3 等价于 (2 * -2) % 3,值为 -1。例如 B 先算 -2 % 3 = -2,再乘 2 得到 -4,与题式不同。

第 5 题(单选题,2 分)

如下C++代码执行后,其输出是()。

int a = 3;
int b = 4;
printf("%d#%d\n", a, b);
A.
3 4
B.
3#4
C.
3 # 4
D.
3
4

正确答案B

解析详情
答案 Bprintf 格式化输出
思路与推导
  1. 两个 %d 分别输出 a 和 b,格式串中的 # 原样输出,最后换行。因此显示 3#4。

第 6 题(单选题,2 分)

下列 C++ 代码执行后的输出是()。

int a = 8;
int b = 10;
cout << (a % b) << " " << (a * 1 / b) << " " << (a * 1.0 / b);
A.
8 0.8 0
B.
0 0.8 0
C.
8 0 0.8
D.
0 0 0.8

正确答案C

解析详情
答案 C整数除法与浮点除法
思路与推导
  1. 8 % 10 为 8;8 * 1 / 10 是整数运算,结果为 0;8 * 1.0 / 10 是浮点运算,结果为 0.8。因此输出 8 0 0.8。

第 7 题(单选题,2 分)

执行下面代码后,b 的值会是()。

int b = 8;
++b *= 2 + 1;
A.
18
B.
17
C.
19
D.
27

正确答案D

解析详情
答案 D前置自增与复合赋值
思路与推导
  1. ++b 先把 b 从 8 增加到 9;右侧 2 + 1 得到 3;随后对该变量执行乘法赋值,b 变为 9 * 3 = 27。

第 8 题(单选题,2 分)

执行如下C++代码,其输出是()。

int i, cnt = 0;
for (i = 0; i < 10; i++)
    cnt += 1;
cout << i << ' ' << cnt;
A.
10 10
B.
9 9
C.
10 9
D.
9 10

正确答案A

解析详情
答案 Afor 循环结束状态
思路与推导
  1. i 从 0 到 9 共循环 10 次,cnt 增加到 10。最后一次 i++ 使 i 变为 10,条件失败退出,因此输出 10 10。

第 9 题(单选题,2 分)

执行如下C++代码,变量都是整型,则其输出是()。

int cnt, i;
cnt = 0;
for (i = -10; i < 0; i++)
    cnt += 1;
cout << (i * cnt);
A.
-10
B.
-9
C.
0
D.
9

正确答案C

解析详情
答案 C循环计数与退出条件
思路与推导
  1. i 依次取 -10 到 -1,共循环 10 次;退出时 i 为 0、cnt 为 10,所以 i * cnt 为 0。

第 10 题(单选题,2 分)

如下C++代码执行输出是()。

int i;
for (i = 1; i < 5; i++) {
    if (i % 3 == 0) {
        printf("%d+", i);
        continue;
    } else {
        printf("%d-", i);
        break;
    }
}
printf("%dEND*", i);
A.
1-1
B.
1 - 1 END*
C.
1+1-2-2END*
D.
1-1END*

正确答案D

解析详情
答案 Dbreak 与顺序执行
思路与推导
  1. 第一次循环 i = 1,不满足 i % 3 == 0,先输出 1-,随后 break 退出循环。循环外继续输出 1END*,合起来为 1-1END*。

第 11 题(单选题,2 分)

如下 C++ 代码执行时,下列说法错误的是()。

int N, tot;
cin >> N;
tot = 0;

while (N > 0) {
    cout << N << "#";
    tot += 1;
    N -= 1;
}

cout << tot << "-END";
A.
如果输入 3,输出是:3#2#1#3-END
B.
如果输入 -10,输出是:0-END
C.
如果输入 0,输出是:0-END
D.
如果输入 1,输出是:1#0-END

正确答案D

解析详情
答案 Dwhile 循环与计数
思路与推导
  1. 输入 1 时循环执行一次,先输出 1#,tot 变为 1,N 变为 0。最后输出 1-END,完整结果是 1#1-END,因此 D 的说法错误。

第 12 题(单选题,2 分)

下列 C++ 代码执行时如输入 35,输出如下图所示。横线处应填入的代码是()。

输入35时,从35倒序输出到1,每个数占3列,每10个数换行;最后一行是5到1。
int N, tot, i;
cin >> N;

tot = 0;
for (i = 0; i < N; i++) {
    printf(__________);
    tot = tot + 1;
    if (tot % 10 == 0)
        printf("\n");
}
A.
"%3d", N
B.
"%3d", N - i
C.
N - i
D.
N

正确答案B

解析详情
答案 B倒序输出与字段宽度
思路与推导
  1. i 从 0 增加到 N - 1,N - i 依次为 N、N - 1、…、1。%3d 让每个整数至少占 3 列,再由已有代码每输出 10 个数换行,因此填 "%3d", N - i。

第 13 题(单选题,2 分)

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

int k = 0;
while (k < 8) {
    k += 2;
    continue;
    if (k > 5)
        break;
    cout << k << "#";
}
if (k >= 8)
    cout << "FINISH";
A.
FINISH
B.
2#4#6#FINISH
C.
2#4#FINISH
D.
2#4#6#8#FINISH

正确答案A

解析详情
答案 Acontinue 跳过本轮剩余语句
思路与推导
  1. k 每次加 2 后立即 continue,所以后面的 break 和带 # 的输出都不会执行。k 依次变为 2、4、6、8,退出后满足 k >= 8,只输出 FINISH。

第 14 题(单选题,2 分)

在下列 C++ 代码中,如果 N 和 M 均输入大于 0 的整数,则可以取得正整数 N 的从右到左第 M 位置的数。个位数为第 1 位置。则横线处应填入()。

int N, M, M10;
cout << "请输入正整数:";
cin >> N;
cout << "从右到左第几位?";
cin >> M;
M10 = 1;
for (; M > 1; M--)
    M10 *= 10;
cout << ______________; // L1
A.
N / M10 % 10
B.
N / M10 / 10
C.
N % M10 % 10
D.
N % M10 / 10

正确答案A

解析详情
答案 A整数除法取数位
思路与推导
  1. 循环把 M10 从 1 连乘 10,得到目标位对应的位权(如第 3 位对应 100)。先用 N / M10 去掉目标位右侧的数字,再 % 10 取出目标位,因此选 A。

第 15 题(单选题,2 分)

求解鸡兔同笼。在如下C++代码中,tou 代表鸡和兔的头总数,jiao 代表鸡和兔的脚总数。先后两个输入均为正整数。关于该程序下面说法准确的是()

int tou, jiao, tu_tou, ji_tou;
cout << "请输入鸡和兔的头总数:";
cin >> tou;
cout << "请输入鸡和兔的脚总数:";
cin >> jiao;

for (tu_tou = 0; tu_tou < tou + 1; tu_tou++) { // L1
    ji_tou = tou - tu_tou;
    if (tu_tou * 4 + ji_tou * 2 == jiao) {
        printf("兔的数量=%d,鸡的数量=%d\n", tu_tou, ji_tou);
        break;
    }
}
if (tu_tou == tou) // L2
    printf("无解\n");
A.
能求解鸡兔同笼。
B.
ji_tou 没有初始化,在 L1 行代码前增加 ji_tou = 0; 即可求解鸡兔同笼。
C.
将 L1 行的 tu_tou < tou + 1 改为 tu_tou <tou 即可求解鸡兔同笼。
D.
将 L2 行的 tu_tou == tou 改为 tu_tou == tou + 1 即可求解鸡兔同笼。

正确答案D

解析详情
答案 D枚举与无解判断
思路与推导
  1. 兔数依次枚举 0 到 tou;找到解时 break,兔数不超过 tou。若全部尝试仍无解,循环结束后 tu_tou 为 tou + 1,因此 L2 应判断 tu_tou == tou + 1。

判断题

第 1 题(判断题,2 分)

C++程序执行 cin 或 scanf 语句时通常是使用键盘等输入设备来输入某个变量的值。

正确答案正确

解析详情
答案 正确输入语句与输入设备
思路与推导
  1. cin 和 scanf 通常从标准输入读取数据,常见情形是用户通过键盘输入,因此该说法正确。

第 2 题(判断题,2 分)

如果 n 为 3 位数的正整数,则 C++ 表达式 n % 100 将能得到最高位。如 n 为 123,则该表达式的值为 1。

正确答案错误

解析详情
答案 错误取余与数位
思路与推导
  1. 123 % 100 的结果是 23,得到的是末两位;三位正整数的最高位应使用 n / 100 获取。

第 3 题(判断题,2 分)

下面 C++ 代码执行后将输出 20 。

int i;
for (i = 0; i < 20; i += 3)
    if (i % 3 != 0)
        continue;
cout << i;

正确答案错误

解析详情
答案 错误for 循环步长
思路与推导
  1. i 在循环中依次为 0、3、6、9、12、15、18;下一次增加到 21 才退出,因此输出 21,不是 20。

第 4 题(判断题,2 分)

下列C++代码执行时如果先后输入10和10,则将输出10小于10。

int N, M;
cin >> N >> M;
if (N > M)
    printf("%d大于%d", N, M);
else
    printf("%d小于%d", N, M);

正确答案正确

解析详情
答案 正确if-else 分支
思路与推导
  1. 当 N 和 M 都为 10 时,N > M 为假,程序执行 else 并输出 10小于10,因此题干对实际输出的描述正确。

第 5 题(判断题,2 分)

如下 C++ 代码如果输入大于 0 的整数,则可以求 1 到 N 之和。

int N, tot;
cout << "请输入正整数:";
cin >> N;
tot = 0;

while (N > 0) {
    tot += N;
    N += -1;
}
cout << tot;

正确答案正确

解析详情
答案 正确累加与递减循环
思路与推导
  1. 循环依次把 N、N - 1、…、1 加入 tot;N += -1 等价于 N 减 1,因此在 int 可表示的范围内能计算 1 到 N 的和。

第 6 题(判断题,2 分)

在 C++ 中,表达式 2 % 2 与 (-2) % 2 的值相同。

正确答案正确

解析详情
答案 正确负数取余
思路与推导
  1. 2 和 -2 都能被 2 整除,所以 2 % 2 与 (-2) % 2 都是 0。

第 7 题(判断题,2 分)

试图编译并执行下面C++代码,会输出2。

float z = 12.0;
z = z / 4;
z--;
cout << z++;

正确答案正确

解析详情
答案 正确后置自增
思路与推导
  1. z 先由 12.0 / 4 变为 3,再由 z-- 变为 2。cout << z++ 先输出旧值 2,再使 z 变为 3,因此说法正确。

第 8 题(判断题,2 分)

在 C++ 代码中,如果两个变量 __ 和 ____ 都只包含下划线(_),但数目不同,则可能导致编译器无法识别,而报告变量重复定义。

正确答案错误

解析详情
答案 错误标识符的区分
思路与推导
  1. __ 与 ____ 字符数不同,是不同的标识符,不会因仅由下划线组成就被当成同名变量。它们都含双下划线,属于实现保留名称,实际编程应避免使用。

第 9 题(判断题,2 分)

C++的变量 X 是 double 型,则表达式 X = 27 % 12 的结果不可预测。

正确答案错误

解析详情
答案 错误取余与类型转换
思路与推导
  1. 27 % 12 先按整数运算得到 3,再赋给 double 型变量 X,得到 3.0;该结果是确定的。

第 10 题(判断题,2 分)

下面 C++ 代码执行后输出的是 3。

int ans = 0;
for (int idx = 1; idx <= 7; idx += 2) {
    if (idx == 5)
        continue;
    if (idx * idx > 30)
        break;
    ans += idx;
}
cout << ans;

正确答案错误

解析详情
答案 错误continue、break 与累加
思路与推导
  1. idx = 1、3 时分别累加,ans 变为 4;idx = 5 时 continue 跳过累加;idx = 7 时因 49 > 30 而 break,最终输出 4。