GESP 客观题评测系统

2026-06-Level-1

2026-06-Level-1

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

单选题

1 题(单选题2 分)

学校组织到未来农场参观,小明听讲解员介绍,在智能温室中,湿度传感器可以连续检测土壤的湿度变化,并将检测到的湿度数据实时发送给中央控制器。中央控制器根据这些数据判断是否开启灌溉系统。请问,这里的湿度传感器所发挥的作用,类似于计算机系统中的哪一类组件?()

A.
处理器
B.
存储器
C.
输入设备
D.
输出设备

正确答案C

解析详情

【答案】C

【考点】输入设备

【解析】 湿度传感器负责采集土壤湿度,并把数据送给中央控制器,相当于向计算机输入外部信息,因此属于输入设备。

【易错点】 传感器只负责采集数据,作出灌溉判断的是中央控制器。

2 题(单选题2 分)

在使用某集成开发环境(比如 Dev-C++)来编辑源代码文件时,程序员经常需要在编辑区中对代码进行各种修改。以下关于在编辑区中执行的操作描述不正确的()。

A.
可以将变量名 count 统一修改为 number
B.
可以连续撤销最近 2 次输入的内容
C.
可以调整代码行的缩进(如按Tab键)
D.
在注释文本中间不能混用中英文

正确答案D

解析详情

【答案】D

【考点】集成开发环境的编辑功能

【解析】 代码编辑器通常支持批量替换、连续撤销和 Tab 缩进。注释不会参与程序语法分析,其中可以混用中文和英文,所以 D 的说法不正确。

【易错点】 不要把源代码的语法限制误套到注释文本上。

3 题(单选题2 分)

有关如下 C++ 代码的说法,正确的是()。

float a = 3 + 3.5;

cout << a;
A.
代码执行将报错。如果将 a = 3 + 3.5 改为 a = 3 + 3 + 1/2 将能正常执行。
B.
代码执行将报错。如果将 a = 3 + 3.5 改为 a = 3.0 + 3.5 将能正常执行。
C.
代码能正常执行,将输出 6。
D.
代码能正常执行,将输出 6.5。

正确答案D

解析详情

【答案】D

【考点】浮点数运算与赋值

【解析】 表达式 3 + 3.5 进行浮点数运算,结果为 6.5,可以赋给 float 变量 a;cout 因而输出 6.5。

【易错点】 整数与浮点数相加会转换为浮点运算,不会因类型不同而报错。

4 题(单选题2 分)

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

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

正确答案C

解析详情

【答案】C

【考点】取模运算与运算优先级

【解析】 原式先算乘法与取模:(-2 × 2) % 4 = -4 % 4 = 0。C 中 2 % 4 = 2,再乘 -2 得 -4,与原式不同;其余三式均为 0。

【易错点】 不要把 -2 × (2 % 4) 与 (-2 × 2) % 4 当成同一运算顺序。

5 题(单选题2 分)

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

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

正确答案B

解析详情

【答案】B

【考点】变量赋值

【解析】 b = a 会把当时 a 的值 3 复制给 b。之后 a 改为 4 不会影响 b,因此依次输出 4 和 3。

【易错点】 普通整型赋值复制的是数值,b 不会随 a 的后续修改而变化。

6 题(单选题2 分)

如下 C++ 代码执行时输入 2026-6-27,下列说法正确的是()。

int N;
cin >> N;
cout << N;
A.
输入失败,不允许输入减号,没有输出
B.
允许输入,输出 1993
C.
允许输入并原样输出 2026-6-27
D.
允许输入并输出 2026

正确答案D

解析详情

【答案】D

【考点】整型输入

【解析】 N 是 int,cin 从输入开头读取连续的数字 2026,遇到第一个减号时停止本次整型读取。因此 N 的值为 2026,cout 输出 2026。

【易错点】 整型输入不会把 2026-6-27 当作算式计算,也不会整段作为字符串保存。

7 题(单选题2 分)

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

int N, M;
cin >> N >> M;
if (N > M)
    cout << "A" << (N - M);
else
    cout << "B" << (M - N);
A.
如果输入 43,将输出 A1
B.
如果输入 34,将输出 B1
C.
如果输入 33,将输出 A0
D.
如果输入 44,将输出 B0

正确答案C

解析详情

【答案】C

【考点】if-else 分支

【解析】 按选项所表示的两个输入数,N = 3、M = 3 时 N > M 为假,程序进入 else 分支并输出 B0,而不是 A0,因此 C 错误。

【易错点】 两数相等时不满足 N > M,仍会执行 else 分支。

8 题(单选题2 分)

阅读如下 C++ 代码,下列说法错误的是()。

int cnt = 0;
for (int i = 0; i < 5; i++)
cnt += 1;
cout << cnt;
A.
将 cnt += 1 修改为 cnt = cnt + 1,执行效果相同
B.
将 cnt += 1 修改为 cnt = 1 + cnt,执行效果相同
C.
将 cnt += 1 修改为 cnt = + 1,执行效果相同
D.
将 cnt += 1 修改为 cnt = + 1 + cnt,执行效果相同

正确答案C

解析详情

【答案】C

【考点】复合赋值运算符

【解析】 cnt += 1 等价于 cnt = cnt + 1,循环 5 次后 cnt 为 5。cnt = +1 只是每次把 cnt 赋值为正数 1,最终得到 1,效果不同。

【易错点】 一元正号 +1 不包含原变量 cnt,不能实现累加。

9 题(单选题2 分)

如下C++代码执行后输出是 1 2 3 4 5 6 7 8 9 10 11 5 6 7 8 9 10 11 5 6 7 8 9 10 11 5 6 7 8 9 10 11 5 6 7 8 9 1

int num = 1;
for (int i = 0; i < 35; i++) {
    printf("%d ", num);
    if (num _____ 10)
        num _____ 2;
    else
        num _____ 1;
}
A.
> /= +=
B.
>= %= +=
C.
> %= +=
D.
> /= =+

正确答案A

解析详情

【答案】A

【考点】循环与复合赋值

【解析】 num 不大于 10 时执行 num += 1,依次输出 1 到 11;当 num > 10 时执行 num /= 2,使 11 变为 5,再继续递增。因此三处应填 >、/=、+=。

【易错点】 判断发生在输出之后,所以 11 会先输出,再被整除为 5。

10 题(单选题2 分)

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

int i;
for (i = 1; i < 5; i++)
    if (i % 2 == 0) {
        continue;
        cout << i << "#";
    }
    cout << i << "END#";
A.
5END#
B.
5#END
C.
1#3#4#END
D.
1#3#4 END#

正确答案A

解析详情

【答案】A

【考点】continue 与语句作用域

【解析】 if 后的花括号中,偶数时先执行 continue,后面的 cout << i << "#" 永远不会执行。循环结束时 i 已增至 5,循环外的 cout 输出 5END#。

【易错点】 缩进不决定作用域;最后一条 cout 不在 for 循环体内。

11 题(单选题2 分)

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

int N, i;
cin >> N;
for (i = 2; i < N; i++)
    if (N % i == 0) {
        cout << "1#";
        break;
    } else {
        cout << "0#";
    }
A.
如果输入 2,将输出 1#。
B.
如果输入 15,将输出 0#1#。
C.
如果输入 1,将输出 0#。
D.
如果输入 3,将输出 1#。

正确答案B

解析详情

【答案】B

【考点】循环、整除判断与 break

【解析】 输入 15 时,i=2,15 不能被 2 整除,先输出 `0#`;随后 i=3,15 能被 3 整除,输出 `1#` 并执行 `break` 结束循环,因此完整输出为 `0#1#`。

【易错点】 输入 2、1 或 3 时循环条件一开始就不成立,不会执行循环体,也不会产生题目选项所写的输出。

12 题(单选题2 分)

有关如下 C++ 代码,下列说法中错误的是()。

int i, tot;
i = 0, tot = 0;
while (0 <= i && i < 10) {
    tot += 1;
    i += 1;
}
cout << tot;
A.
如果调整 0 <= i && i < 10 为 1 <= i && i < 10,输出同样为 45,因为加上 0 不影响结果。
B.
如果将 i = 0 和 tot = 0 合并为 i = tot = 0,执行结果与修改前相同。
C.
将 tot += 1 与 i += 1 交换顺序,执行结果与修改前相同。
D.
将 i = 0 与 tot = 0 交换顺序,执行结果与修改前相同。

正确答案A

解析详情

【答案】A

【考点】while 循环条件

【解析】 原程序从 i = 0 开始循环 10 次,每次执行 tot += 1,最终输出 10。若条件改为 1 <= i && i < 10,初始 i = 0 就不满足条件,循环一次也不执行,输出 0,因此 A 错误。

【易错点】 tot 累加的是 1 而不是 i,原程序结果不是 0 到 9 的和 45。

13 题(单选题2 分)

以下 C++ 代码可以找出千位、百位、十位和个位满足特定条件的四位数(例如各位数字的四次方和等于原数,即“四叶玫瑰数”),横线处应该填入的是()。

int count = 0;
for (int n = 1000; n <= 9999; n++) {
    int a = n / 1000;
    int b = (n / 100) % 10;
    __________ // L1
    int d = n % 10;
    if (a * a * a * a + b * b * b * b + c * c * c * c + d * d * d * d == n) {
        count++;
    }
}
A.
int c = (n / 10) / 10;
B.
int c = (n / 10) % 10;
C.
int c = (n % 10) / 10;
D.
int c = (n % 10) % 10;

正确答案B

解析详情

【答案】B

【考点】整数各位数字的提取

【解析】 整数除以 10 可去掉个位,再对 10 取模即可取得原数的十位,所以 c 应为 (n / 10) % 10。

【易错点】 (n % 10) 得到的是个位,再除以 10 只会得到 0。

14 题(单选题2 分)

下面的 C++ 代码用于计算经过 n 秒后的秒针位置(0~59),两处横线处分别应填入的代码是()。

int start, n, pos;
cout << "当前秒数 (0-59) :";
cin >> start;
cout << "经过多少秒:";
cin >> n;

pos = ___; // L1
if (___) // L2
    cout << n << "秒后回到12点方向" << endl;
else
    cout << n << "秒后指向" << pos << "秒刻度" << endl;
A.
(start + n) / 60 和 pos == 0
B.
(start + n) % 60 和 pos == 0
C.
(start + n) / 60 和 pos <= 0
D.
(start + n) % 60 和 pos = 0

正确答案B

解析详情

【答案】B

【考点】周期计算与条件判断

【解析】 秒针每 60 秒循环一周,因此位置应为 pos = (start + n) % 60,结果范围是 0~59。pos == 0 表示回到 12 点方向。

【易错点】 条件判断应使用 ==,写成 pos = 0 会变成赋值。

15 题(单选题2 分)

如果正整数 N 只能被 1 和它本身整除,则它是一个质数(或素数)。下面的 C++ 代码用于判断正整数 N 是否为质数(素数)。若 N 是质数,输出 YES,否则输出 NO。横线处不应填入的代码是()。

int N, i;
cin >> N;
if (N <= 1) {
    cout << "NO";
    return 0;
}
for (i = 2; _____; i++) {
    if (N % i == 0) {
        cout << "NO";
        return 0;
    }
}
cout << "YES";
A.
i < N
B.
i <= N
C.
i <= N / 2
D.
i * i <= N

正确答案B

解析详情

【答案】B

【考点】质数判断

【解析】 若循环条件为 i <= N,所有 N > 1 最终都会取到 i = N,此时 N % N == 0,程序输出 NO,连质数也会被误判。其余条件都能覆盖发现合数因子所需的范围。

【易错点】 试除范围不能包含 N 本身,否则任何数都会被判为有因数。

判断题

1 题(判断题2 分)

又到期末考试周,小明发现这次许多闭卷考试不仅禁止携带手机、平板电脑,还有最近比较时髦的各类AI眼镜(也有叫智能眼镜)也同样不允许带入考场。这些AI眼镜应该也是内置了操作系统并可能支持Wi-Fi或蓝牙连接。

正确答案正确

解析详情

【答案】正确

【考点】智能终端与操作系统

【解析】 AI 眼镜属于智能终端,通常需要操作系统管理硬件和应用,也可通过 Wi-Fi 或蓝牙进行数据通信,因此题目描述正确。

【易错点】 不要把计算机设备只理解为台式机、笔记本或手机。

2 题(判断题2 分)

如果 n 为大于 100 的整数,则 C++ 表达式 (n / 10) \% 10 与 (n \% 100) / 10 的结果相同。

正确答案正确

解析详情

【答案】正确

【考点】整数数位提取

【解析】 (n / 10) % 10 先去掉个位再取末位,得到十位;(n % 100) / 10 先保留末两位再整除 10,也得到十位,两式结果相同。

【易错点】 这里的 n、10 和 100 都是整数,除法采用整除。

3 题(判断题2 分)

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

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

正确答案错误

解析详情

【答案】错误

【考点】for 循环与 break

【解析】 i 从 0 开始每次增加 3,始终是 3 的倍数,i % 3 != 0 一直为假,不会执行 break。循环在 i 增至 21 时结束,最终输出 21,而不是 19。

【易错点】 循环结束后 i 已执行过最后一次 i += 3。

4 题(判断题2 分)

在数学中, N! 称之为 N 的阶乘,其含义是 1 到 N 之积,包括 N 。如 3! = 1 \times 2 \times 3 = 6 。如下 C++ 代码能输出 N! 的结果。

int N;
cout << "请输入正整数:";
cin >> N;
int rst = 0;
for (int i = 1; i < N + 1; i++)
    rst *= i;
cout << rst;

正确答案错误

解析详情

【答案】错误

【考点】阶乘的循环累乘

【解析】 rst 被初始化为 0,之后无论乘以 i 的任何值,rst 都仍为 0,因此不能得到 N!。累乘变量应初始化为 1。

【易错点】 累加初值常为 0,而累乘初值应为乘法单位元 1。

5 题(判断题2 分)

如下 C++ 代码能实现输出正整数 N 的各位数字。

int N;
cin >> N;
while (N > 0) {
    cout << (N % 10) << endl;
    N = N / 10;
}

正确答案正确

解析详情

【答案】正确

【考点】整数数位分解

【解析】 N % 10 每次取得当前个位并输出,N = N / 10 再删除该位;循环进行到 N 为 0,便输出了原数的所有数位。

【易错点】 输出顺序是从个位到最高位,与通常书写顺序相反。

6 题(判断题2 分)

将如下 C++ 代码中的 printf("\n") 更换为 printf("%c", '\n'), 输出效果相同。

for (int i = 0; i < 100; i++) {
    if (i % 5 == 0)
        printf("\n");
    printf("%2d ", i);
}

正确答案正确

解析详情

【答案】正确

【考点】printf 格式化输出

【解析】 printf("\n") 直接输出换行转义字符;printf("%c", '\n') 用 %c 输出同一个换行字符,因此输出效果相同。

【易错点】 '\n' 是单个字符,使用 %c 输出;"\n" 是包含该字符的字符串。

7 题(判断题2 分)

C++ 代码 cout << (2.5 % 2) 能够生成可执行代码,但执行时将报错,因为 % 只能适用于正整数。

正确答案错误

解析详情

【答案】错误

【考点】取模运算符的操作数类型

【解析】 % 要求两个操作数都是整数类型,而 2.5 是浮点数,因此表达式在编译阶段就会报错,不能生成可执行代码;整数操作数也不要求必须为正数。

【易错点】 编译期类型错误与程序运行时错误不是一回事。

8 题(判断题2 分)

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

int total;
for (int n = 1; n <= 4; n++) {
    total *= n;
}
cout << total;

正确答案错误

解析详情

【答案】错误

【考点】局部变量初始化

【解析】 局部变量 total 未初始化,其初值不确定,随后执行 total *= n 会读取这个不确定值,不能保证输出 24。要计算 1 × 2 × 3 × 4,应先令 total = 1。

【易错点】 声明整型局部变量不会自动把它初始化为 0 或 1。

9 题(判断题2 分)

如果 a 是 C++ 的整型变量,值为 4,则表达式 (a \% 2 == 0) + (a / 2) 的值为 4。

正确答案错误

解析详情

【答案】错误

【考点】布尔表达式参与算术运算

【解析】 a = 4 时,a % 2 == 0 为 true,参与加法时转换为 1;a / 2 为 2,所以表达式的值是 1 + 2 = 3,而不是 4。

【易错点】 关系表达式为真时转换成整数 1,不是转换成变量 a 的值。

10 题(判断题2 分)

删除下面 C++ 代码中的 continue 后,其输出与原来相同。

int x = 0;
while (x < 4) {
    x++;
    if (x == 2) continue;
    cout << x << ",";
}

正确答案错误

解析详情

【答案】错误

【考点】continue 语句

【解析】 原程序在 x == 2 时执行 continue,跳过本轮 cout,输出 1,3,4,。删除 continue 后,x = 2 也会被输出,结果变为 1,2,3,4,,二者不同。

【易错点】 continue 只跳过当前轮剩余语句,不会结束整个 while 循环。