GESP 客观题评测系统

2026-03-Level-1

2026-03-Level-1

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

单选题(每题 2 分)

1 题(单选题

2026年春节联欢晚会上一个武术表演节目《武 BOT》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备()。

A.
检测重心的重力传感器
B.
预装的AI算法程序
C.
接收动作指令的遥控器
D.
拍摄其他机器人的摄像头

正确答案B

解析详情

【答案】B

【考点】输入设备与处理程序

【解析】 输入设备负责采集外界信息并送入系统(如传感器、摄像头、遥控器信号)。 AI 算法程序属于计算机系统中的处理/控制软件,不是输入设备。

【易错点】 把“算法/程序”当作输入设备。

2 题(单选题

小明学习编程有一段时间了,他想在图形环境下把当前目录(或文件夹)下的文本文件 20260314.txt 的名字改一下。他用鼠标左键点击选中该文件后,立即完成下面哪个操作后将处于输入新文件名的状态():

A.
单击右键并选择弹出菜单中的“重命名”
B.
双击左键
C.
按功能键 F1
D.
按回车键

正确答案A

解析详情

【答案】A

【考点】文件重命名操作

【解析】 在图形界面中选中文件后,通过右键菜单的“重命名”进入编辑文件名状态。 双击通常是打开文件,回车多为打开/确认,F1 是帮助。

【易错点】 把“回车/双击”误认为重命名入口。

3 题(单选题

下面C++代码可以执行,有关说法正确的是()。

double PI = 3.1415926;
cout << (PI);
A.
为了方便初学者,cout << (PI) 和 cout << (pi) 效果相同,即变量的大小写不敏感
B.
cout << (PI)  cout << (Pi) 
C.
不能用 PI 做变量名,因为要保存圆周率这个常量
D.
将程序中全部 PI 都改写为 Pai,将能正常执行,不会报错

正确答案D

解析详情

【答案】D

【考点】标识符大小写敏感

【解析】 C++ 变量名大小写敏感,PI、Pi、pi 是不同标识符。 只要把声明与使用处统一改成同一个新名字(如 Pai),即可正常编译运行。

【易错点】 误以为变量名大小写不敏感。

4 题(单选题

C++表达式 3 * 3 % 2 的值为()。

A.
81
B.
27
C.
4
D.
1

正确答案D

解析详情

【答案】D

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

【解析】 在 C++ 中 `*` 与 `%` 同级,按从左到右计算:(3×3)%2 = 9%2 = 1。

【易错点】 把表达式误当作 3×(3%2) 来算。

5 题(单选题

整型变量 a、b 的初值都是 4,则下面的 C++ 代码执行后的输出是()。

a, b = 3, 4;
cout << (a + 2) << (b - 2) << endl;
cout << a << b << endl;
A.
61
43
B.
52
34
C.
62
44
D.
62
32

正确答案A

解析详情

【答案】A

【考点】逗号运算符与赋值

【解析】 `a, b = 3, 4;` 按逗号运算符从左到右求值:a 仅被求值不改变,b 被赋为 3,最后的 4 被丢弃。 因此 a=4、b=3,输出依次为 61 与 43。

【易错点】 以为该语句能同时给 a、b 赋值。

6 题(单选题

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

int N = 0;
cin >> N;
cout << (N);
A.
执行时如输入 10,则将输出 10
B.
执行时如输入 3.14,将报错
C.
执行时如输入 ABC,将报错
D.
执行时如输入 -10,将报错

正确答案A

解析详情

【答案】A

【考点】cin 输入到整型

【解析】 `cin >> N` 把读到的整数存入 `int`,输入 10 时 N=10,`cout << N` 输出 10。 输入 -10 也合法;像 3.14 会先读入 3 并留下 .14 供后续读取,不会直接“报错”。

【易错点】 把“输入格式不完全匹配”当作运行时报错。

7 题(单选题

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

int M = 0, N = 0;
cin >> M;
cin >> N;
if (N > M)
    cout << (N - M);
else
    cout << (M - N);
A.
如果输入一个正数和一个负数,其输出结果肯定是大于0
B.
不管是负整数、正整数亦或0,其结果肯定是大于等于0
C.
如果 N 和 M 是相等的整数,将不会有输出
D.
如果 N 和 M 输入带有小数点的数,将按整数部分计算

正确答案B

解析详情

【答案】B

【考点】条件分支与绝对值

【解析】 当 N>M 输出 N−M,否则输出 M−N,本质上输出的是 |M−N|。 因此无论正负还是 0,结果一定是大于等于 0 的整数(相等时输出 0)。

【易错点】 忽略了相等时会输出 0。

8 题(单选题

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

int i, tnt = 1;
for (i = 0; i < 5; i++)
    tnt *= i;
printf("%2d%2d\n", tnt, i);
A.
24 5
B.
10 5
C.
0 4
D.
0 5

正确答案D

解析详情

【答案】D

【考点】for 循环与累乘结果

【解析】 首轮 i=0 使 `tnt *= i` 变为 0,之后一直保持 0;循环结束时 i 已变为 5。 `printf` 输出 tnt 与 i(各占宽度 2),结果为 0 和 5。

【易错点】 把 0! 误当作 0,或忘记循环结束后 i=5。

9 题(单选题

执行下面C++代码段求序列 -1+2+3-4+5+6-7+8+9-10+11+12 …… 之值。例如输入 4,则计算序列前4项的值,规律如序列所示,输出为 0。下面说法中正确的是( )。

int N, tnt, i;
cout << "请输入正整数:";
cin >> N;
tnt = 0;
for (i = 1; i < N + 1; i++) // L1
    if (i % 3 == 1) // L2
        tnt += -i;
    else
        tnt += i;
cout << tnt;
A.
L1行中 i < N + 1 应该修为 i < N 才会符合预期
B.
L2行中 i % 3 == 1 应修改为 i % 3 == 0 才会符合预期
C.
L2行中 i % 3 == 1 修改为 i % 3 与当前程序效果相同
D.
当前代码能实现题目所描述计算目标

正确答案D

解析详情

【答案】D

【考点】循环变号规律(模运算)

【解析】 序列中为负的项是 1、4、7、10…,即 i≡1 (mod 3)。 代码用 `if (i % 3 == 1) tnt += -i else tnt += i` 且 i 从 1 到 N(含 N)遍历,正好实现题意。

【易错点】 把变号规律误写成 i%3==0 或漏算第 N 项。

10 题(单选题

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

int i;
for (i = 1; i < 10; i++) {
    if (i % 2 == 0) {
        continue; // L1
    }
    else
    cout << i << "#";
}
cout << i << "END";
A.
上述代码执行后,其输出是 1#3#5#7#9#END
B.
删除 else 后的执行效果与当前代码相同
C.
删除 else 且将 cout << i << "#" 移入L1行下面,则执行效果与当前代码相同
D.
在 cout << i << "END" 前增加判断 if(i > 10),其执行效果与当前代码相同

正确答案B

解析详情

【答案】B

【考点】continue 与等价改写

【解析】 当 i 为偶数时执行 `continue`,本轮直接跳过输出;只有奇数才会执行输出语句。 因此把 `else` 去掉,`cout` 仍只会在未 continue 的情况下执行,效果不变。

【易错点】 以为去掉 else 会导致偶数也输出。

11 题(单选题

一个正整数的每位都是个位数,称为数位,最高位非 0。下面的 C++ 代码用于求正整数的所有数位之和,简称数位和。如 123 的各数位分别是 1、2、3,则其数位和为 1+2+3 ,结果为 6。为实现该目标,横线处应该填写的代码是( )。

int N;
cin >> N;
int tnt = 0;
while (N != 0) {
    ___;
    ___;
}
cout << "N的数位和为:" << tnt;
A.
tnt += N / 10;
N /= 10;
B.
tnt += N % 10;
N /= 10;
C.
tnt += N / 10;
N %= 10;
D.
tnt = tnt + N % 10;
N %= 10;

正确答案B

解析详情

【答案】B

【考点】取末位求数位和

【解析】 每轮用 `N % 10` 取出个位并累加到 tnt,再用 `N /= 10` 去掉个位。 循环直到 N 变为 0,即得到所有数位之和。

【易错点】 把 `N/10`(去位)当成“取末位”。

12 题(单选题

小明想要快速知道任给一个正整数中有多少个奇数位(数位值是奇数),下面的C++代码是其实现,横线处应该填入的代码是()。

int N;
cin >> N;

int odd_count = 0; // 记录奇数的个数
int old_number = N; // 保存原数

while (N != 0) {
    if (_____)
        odd_count += 1;
    N = (N - N % 10) / 10;
}
cout << old_number << "中共有 " << odd_count << " 个奇数";
A.
N % 10 % 2 == 0
B.
N % 10 % 2 == 1
C.
N / 10 / 2 == 1
D.
N / 2 / 10 == 0

正确答案B

解析详情

【答案】B

【考点】个位奇偶判断

【解析】 `N % 10` 得到当前个位,个位为奇数当且仅当 `(N % 10) % 2 == 1`。 满足条件就把计数加 1,再把 N 去掉个位继续统计。

【易错点】 把奇偶判断写反(==0 与 ==1 混淆)。

13 题(单选题

小明和弟弟在玩一个拼数字游戏,游戏规则是:二人各写一个两位正整数 M 和 N;然后将较大的数字放在较小的前面,拼成一个4位数;将这个4位数除以3的余数添加到4位数的后面,得到一个5位数;最后判断这个5位数能否被14整除。下面的C++代码用于判断 M 和 N 是否符合全部要求,如果符合则输出 Y 否则输出 N。例如输入 85 和 79,可以拼出 85792,恰好是14的倍数,则输出 Y。关于下面代码描述正确的是()。

int M, N, Q;
cin >> M >> N;
if(M > N) // L1
    Q = M*100+N;
else
    Q = N*100+M;
if((Q*10+Q%3) % 14 == 0) // L2
    cout << "Y";
else
    cout << "N";
A.
代码段不能完成正确判断
B.
L1行代码中条件应该改为 M <= N
C.
L2行代码应该改为 if ((Q*10+Q/3) % 14 == 0)
D.
代码段可以不使用变量 Q,而是在区分 M 和 N 大小后分别直接用它们来判断

正确答案D

解析详情

【答案】D

【考点】拼数与可读性重构

【解析】 Q 保存拼成的 4 位数(较大两位在前),末位添加的是余数 `Q % 3`,再判断 `(Q*10 + Q%3) % 14 == 0`。 这一步完全可以在比较 M、N 大小后,直接用 M、N 计算并判断,不一定要先用变量 Q 存起来。

【易错点】 把“添加余数”误写成除以 3 的商(Q/3)。

14 题(单选题

执行下面C++代码可以判断一个6位正整数 N 的高3位和低3位的差是否是314的倍数。例如 628314 就符合要求。横线处应该填入( )。

cin >> N;
if (___)
    cout << N << "符合条件" << endl;
A.
((N % 1000) - (N / 1000)) / 314 == 0
B.
((N / 1000) - (N % 1000)) % 314 == 0
C.
((N % 1000) - (N / 1000)) / 314
D.
((N / 1000) - (N % 1000)) % 314

正确答案B

解析详情

【答案】B

【考点】整数分解与整除判断

【解析】 高三位是 `N / 1000`,低三位是 `N % 1000`,差为 `(N/1000) - (N%1000)`。 判断是否为 314 的倍数,应检查该差对 314 取模是否为 0。

【易错点】 用“除以 314 等于 0”来判断倍数关系。

15 题(单选题

N 是一个正整数。如果 N 的所有奇数位的数位和等于所有偶数位的数位和,则称它是一个“双螺旋数”。例如 12375 的所有奇数位的数位和是 9,同时它的所有偶数位的数位和也是 9,则 12375 就是一个双螺旋数。下面的 C++ 代码用于判断输入的 N 是否为双螺旋数。空白处应该填入的代码是()。

int i, N, N1=0, N2=0, N0;
cin >> N;
N0 = N;
while (N){
    ___
    ___
}
if(N1 == N2)
    cout << N0 << "是双螺旋数" << endl;
A.
N1 += N % 10, N /= 10;
N2 += N % 10, N /= 10;
B.
N1 += N / 10, N /= 10;
N2 += N / 10, N /= 10;
C.
N1 += N % 10, N %= 10;
N2 += N % 10, N %= 10;
D.
N1 += N / 10, N %= 10;
N2 += N / 10, N %= 10;

正确答案A

解析详情

【答案】A

【考点】按位提取与奇偶位分组

【解析】 从个位开始依次取 `N % 10` 并 `N /= 10`:第一次加到 N1(奇数位),第二次加到 N2(偶数位),直到 N 变 0。 因此循环体需要连续两次“取末位并去末位”,对应选项 A。

【易错点】 把 `N/10` 当作取个位,或用 `N%=` 误删数字。

判断题(每题 2 分)

1 题(判断题

小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。

正确答案正确

解析详情

【答案】正确

【考点】嵌入式设备与操作系统

【解析】 电话手表要完成通话、短信等功能,需要管理硬件与应用并提供运行环境,通常会搭载固件/操作系统。

【易错点】 把“操作系统”只理解为手机/电脑系统。

2 题(判断题

C++表达式 4% 2 和 2*2%2 的结果相同。

正确答案正确

解析详情

【答案】正确

【考点】取模与运算顺序

【解析】 `4 % 2 = 0`;`2*2%2` 按从左到右为 `(2*2)%2 = 4%2 = 0`,结果相同。

【易错点】 误以为 `%` 的优先级高于 `*`。

3 题(判断题

下面C++代码段成功执行后将输出0。

for (i = 1; i < 10; i++)
    if (i % 3 == 0)
        break;
cout << i;

正确答案错误

解析详情

【答案】错误

【考点】循环体与 break 位置

【解析】 `for` 循环体只有 `if (...) break;`,当 i=3 时跳出循环。 `cout << i;` 在循环之后只执行一次,因此输出 3 而不是 0。

【易错点】 忽略花括号导致 `cout` 不在循环体内。

4 题(判断题

下面能够正常执行的C++代码段用于求1到N之和,N为正整数。因为 i < N + 1,所以是1到N且包含N之和。

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

正确答案错误

解析详情

【答案】错误

【考点】for 后分号的影响

【解析】 `for (i = 1; i < N + 1; i++) ;` 末尾分号使循环体为空。 循环结束后 i 已为 N+1,`total += i` 只执行一次,根本不是累加 1 到 N。

【易错点】 不小心写出“空循环”。

5 题(判断题

执行下面的C++代码段,其语句 `cout << (N)` 将被执行0次或无数次(即死循环)。

cin >> N;
while (N)
    cout << (N);

正确答案正确

解析详情

【答案】正确

【考点】while 循环终止条件

【解析】 循环条件是 `while (N)`,但循环体内 N 不变:输入 0 时循环执行 0 次;输入非 0 时会一直循环并不断输出。

【易错点】 忘记在循环体里更新控制变量。

6 题(判断题

下面的C++代码段的变量都是整型,它能用于判断输入的正整数是否为对称数。所谓对称数是指从左到右和从右到左读该数,其值相同。例如,121 和 414 都是对称数,而 123 不是对称数。()

cout << "请输入正整数:";
cin >> n;

old_number = n;
new_number = 0;
while (n != 0) {
    new_number = new_number * 10 + n % 10;
    n /= 10;
}

if (old_number == new_number)
    cout << "对称数";
else
    cout << "非对称数";

正确答案正确

解析详情

【答案】正确

【考点】整数反转判断回文

【解析】 `new_number = new_number*10 + n%10` 逐位把 n 反转得到倒序数,再用 `n /= 10` 去位。 最后比较 `old_number` 与 `new_number`,相等即为对称数。

【易错点】 漏掉乘 10 导致反转拼接错误。

7 题(判断题

执行下面的 C++ 代码段,如果变量都为整型变量,输入为大于 0 的整数,则输出数值一定为 -N 的值。

cin >> N;
total = 0;
for (i = -N; i < N; i += 2)
    total += i;
cout << total;

正确答案正确

解析详情

【答案】正确

【考点】等差数列求和与对称抵消

【解析】 i 取值为 -N, -N+2, …,到小于 N 为止;除首项外其余项可与对应正数成对相加抵消为 0。 因此总和恒为 -N。

【易错点】 误以为对称项全部抵消后结果为 0。

8 题(判断题

执行C++语句 printf("%d\n", 3.14) 将报错。

正确答案错误

解析详情

【答案】错误

【考点】printf 格式化参数匹配

【解析】 `printf` 是可变参数函数,把 double 的 3.14 按 `%d`(int)来解释不会必然“报错”。 但这是格式不匹配的未定义行为,可能打印乱码并伴随编译警告。

【易错点】 把“未定义行为/警告”当成一定的运行时报错。

9 题(判断题

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

int cnt = 0;
for (int i = 1; i < 100; i++)
    cnt += i++;
cout << cnt;

正确答案正确

解析详情

【答案】正确

【考点】自增运算的执行顺序

【解析】 `cnt += i++` 先把当前 i 加入再自增一次,配合 for 的 i++,相当于每轮 i 增加 2。 因此累加的是 1+3+…+99,共 50 项,和为 50×(1+99)/2 = 2500。

【易错点】 忽略了循环体里的 i++ 会额外自增。

10 题(判断题

小明在测试C++的 printf 的功能时执行了 printf("%-5d\n", 314),则代码输出的结果是 -5314。

正确答案错误

解析详情

【答案】错误

【考点】printf 对齐输出

【解析】 `%-5d` 表示宽度 5 且左对齐,输出是 `314` 后面用空格补齐(如 314␠␠)。 因此不可能输出 -5314。

【易错点】 把 `-` 误认为会输出负号,而不是“左对齐”。