GESP 客观题评测系统

2026-03-Level-2

2026-03-Level-2

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

单选题(每题 2 分)

1 题(单选题

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

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

正确答案B

解析详情

【答案】B

【考点】输入设备与系统组成

【解析】 传感器、摄像头和遥控器都用于采集外界信息/指令,属于输入。 预装的 AI 算法程序属于处理与控制逻辑(软件),不是输入设备。

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

2 题(单选题

下面代码用来找出输入的N个正整数中最大的一个。如果将代码段用流程图来表示,则 L1 标记的代码行应该使用的图形是()。

int N, max = 0, val;
cin >> N;

while (N) {
    cin >> val;
    if (val > max) // L1
        max = val;
    N--;
}

cout << max;
A.
圆形框
B.
椭圆形框
C.
平行四边形框
D.
菱形框

正确答案D

解析详情

【答案】D

【考点】流程图判定框

【解析】 L1 是 if 的条件判断(val > max),流程图中应使用“判定”图形。 判定框用菱形表示。

【易错点】 把条件判断误画成处理框或输入输出框。

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 是不同变量名。 只要把程序中出现的 PI 全部一致改成合法标识符 Pai,代码仍能正常编译运行。

【易错点】 误以为变量名大小写不敏感或 PI 是“不能用”的常量名。

4 题(单选题

下面选择项中,与C++表达式!(x > 5 && y <= 10) 等价的是()。

A.
x <= 5 && y > 10
B.
x > 5 || y <= 10
C.
x <= 5 || y > 10
D.
! x > 5 && ! y <= 10

正确答案C

解析详情

【答案】C

【考点】德摩根律

【解析】 设 A 为 x > 5,B 为 y <= 10,则 !(A && B) 等价于 (!A) || (!B)。 因此得到 x <= 5 || y > 10。

【易错点】 只对整体取反但忘记分别取反并把 && 变为 ||。

5 题(单选题

某同学执行C++代码 `cout << ((0.1 + 0.2) == 0.3)` 时输出 0,下面最可能的原因是()。

A.
C++的 + 运算符在处理小数时存在bug
B.
0.1、0.2 和 0.3 在计算机中无法用二进制浮点数精确表示,导致 0.1 + 0.2 的结果与 0.3 存在微小误差
C.
== 运算符不能用于比较浮点数,只能用于整数
D.
因为 0.1 + 0.2 的数学结果不等于 0.3

正确答案B

解析详情

【答案】B

【考点】浮点数精度与比较

【解析】 0.1、0.2、0.3 不能用二进制浮点数精确表示,(0.1+0.2) 会产生微小误差。 因此与 0.3 用 == 直接比较可能为假,输出 0。

【易错点】 用 == 直接比较浮点数而不考虑误差范围。

6 题(单选题

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

tnt = 0;
for (int i = 0; i < 5; i++) {
    for (int j = 0; j < i; j++)
        tnt += 1;
    cout << tnt << "#";
}
cout << tnt;
A.
0#1#3#6#10#10
B.
1#2#3#4#5#6#7#8#9#10#10
C.
10#10
D.
10

正确答案A

解析详情

【答案】A

【考点】双重循环累加与输出

【解析】 第 i 轮内层循环让 tnt 增加 i 次,tnt 依次为 0、1、3、6、10。 循环内输出为 0#1#3#6#10#,循环结束后再输出一次 10。

【易错点】 漏掉最后一次 cout<<tnt 或把 tnt 的累加次数看成恒为 1。

7 题(单选题

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

for (int i = -2; i < 2; i++)
    if (not i % 3)
        cout << i << "#";
A.
0#
B.
-2#-1#1#
C.
-1#0#
D.
-2#0#1#

正确答案A

解析详情

【答案】A

【考点】运算符优先级(not 与 %)

【解析】 表达式 not i % 3 按优先级相当于 (!i) % 3,而不是 !(i % 3)。 只有 i==0 时 !i 为 1,1%3 为真,因此只输出 0#。

【易错点】 不加括号导致把 not i % 3 误读成 !(i%3)。

8 题(单选题

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

int cnt = 0, i, j;
for (i = 1; i < 5; i++) {
    for (j = 0; j < i; j++)
        cout << j << "#";
    break;
}
if (i >= 5)
    cout << (i * j);
A.
0#0#1#0#1#2#0#1#2#3#12
B.
0#0#1#0#1#2#0#1#2#3#
C.
0#
D.
1#

正确答案C

解析详情

【答案】C

【考点】break 终止循环

【解析】 外层第一次 i=1 时,内层 j 从 0 开始输出 0#。 随后 break 直接跳出外层循环,且 i 仍小于 5,后面的 if 不会输出任何内容。

【易错点】 以为 break 只会跳出内层循环,从而继续多轮输出。

9 题(单选题

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

int count = 0;
for (int i = 1; i < 4; i++)
    for (int j = 1; j < 5; j++)
        if (j == 3)
            continue;
    if (i == 2)
        break;
    count += 1;
}
cout << (count);
A.
2
B.
4
C.
6
D.
8

正确答案C

解析详情

【答案】C

【考点】continue/break 对循环次数的影响

【解析】 i=1 和 i=3 时,j=1..4 中跳过 j==3,共执行 3 次计数。 i=2 时在内层循环中触发 break,直接结束该轮内层循环,不产生计数。 所以总计 3 + 0 + 3 = 6。

【易错点】 把 break 误认为会终止外层循环,或忽略 continue 只跳过当前一次循环。

10 题(单选题

下面 4 个选项中,与下面 C++ 代码段具有相同效果的是()。

i = 0;
while (i < 5) {
    cout << i;
    i += 1;
}
A.
for (i = 0; i < 5; i++)
    cout << i;
B.
for (i = 1; i < 5; i++)
    cout << i;
C.
for (i = 0; i < 6; i++)
    cout << i;
D.
for (i = 1; i < 6; i++)
    cout << i;

正确答案A

解析详情

【答案】A

【考点】while 与 for 的等价转换

【解析】 while 循环从 i=0 开始,满足 i<5 时输出 i 并执行 i+=1,因此输出 0 到 4。 等价的 for 写法是 for(i=0;i<5;i++) cout<<i;。

【易错点】 for 的起止条件写成 i<=5 或从 1 开始导致多/少一次输出。

11 题(单选题

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

int n = 10;
while (n > 0) {
    n -= 1;
    if (n % 3 == 0)
        continue;
    if (n == 5)
        break;
}
cout << n;
A.
0
B.
5
C.
6
D.
7

正确答案B

解析详情

【答案】B

【考点】continue 与 break 的执行顺序

【解析】 循环体先 n-=1,所以 n 依次变为 9、8、7、6、5… 当 n=9、6 时满足 n%3==0 被 continue 跳过;当 n=5 时触发 break 退出。 最终输出 n=5。

【易错点】 忽略先减 1 的顺序,或误以为 continue 会结束整个 while。

12 题(单选题

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

int i, j, cnt;
cnt = 0;
for (i = 0; i < 5; i++) {
    i = -i;
    for (j = i; j < -i; j++)
        cnt += 1;
    i = -i;
}
cout << cnt;
A.
5
B.
15
C.
20
D.
30

正确答案C

解析详情

【答案】C

【考点】for 变量在循环体内被修改

【解析】 每轮先令 i=-i,内层 j 从 i 到 -i-1,循环次数为 (-i) - i = 2i。 当外层 i 依次为 0、1、2、3、4 时,累加次数为 0+2+4+6+8=20。

【易错点】 只按表面 i<5 理解,而忽略 i 在循环体内取反会改变内层范围。

13 题(单选题

某学校图书馆的借阅卡号由6位整数组成。前5位是顺序编号,第6位是校验码,用于防止输错。校验码规则如下:将前5位数字相加,然后除以10的余数,就是第6位数字。如卡号 123455 的前5位之和为 15,除以 10 的余数是5,故第6位为5。下面的C++代码段用于判断卡号是否正确,横线处应填入的代码是( )。

cout << "请输入卡号:";
cin >> N;
order_num = N / 10; // 获得前5位顺序号,假设录入一定为6位正整数
check_num = N % 10; // 获得最后一位

tnt = 0; // 保存前5位之和
for (i = 0; i < 5; i++) {
    _____;
    order_num /= 10;
}

if (_____)
    cout << "符合校验规则";
else
    cout << "不符合校验规则";
A.
tnt += order_num / 10;
tnt / 10 == check_num;
B.
tnt += order_num % 10;
tnt % 10 == check_num;
C.
tnt = order_num / 10 + tnt;
tnt % 10 == check_num;
D.
tnt = order_num % 10;
tnt / 10 == check_num;

正确答案B

解析详情

【答案】B

【考点】取模取位与校验码

【解析】 order_num 保存前 5 位,逐位取出末位应使用 order_num % 10 并累加到 tnt。 校验码规则是 (前5位之和) % 10 等于 check_num,因此判断应为 tnt % 10 == check_num。

【易错点】 用 /10 取末位或把校验判断写成 /10。

14 题(单选题

下面的 C++ 代码段正常执行后其输出的数字图形是()。

for (i = 1; i < 5; i++) {
    for (j = 1; j < i + 1; j++)
        cout << j;
    cout << endl;
}
A.
1
12
123
1234
B.
1
22
333
4444
C.
1
21
321
4321
D.
4
34
234
1234

正确答案A

解析详情

【答案】A

【考点】嵌套循环输出图形

【解析】 外层 i 从 1 到 4,每行内层 j 从 1 输出到 i。 因此各行依次是 1、12、123、1234。

【易错点】 把换行位置放错或将 j 的范围写成 0..i-1。

15 题(单选题

某学校举办“校园演讲比赛”,每位选手由8位评委打分(分数为0~10的整数),且每位评委必须打分。计分规则:若至少有5位评委给出大于等于6分,则成绩有效,最终得分为所有8位评委的总分;如给出低于6分的评委数量超过5位,则记为0分。以下核心程序段依次输入8个分数,并计算最终得分。横线处应填入()。

total_score = 0; // 所有分数之和
high_count = 0; // ≥6分的评委数量

for (i = 0; i < 8; i++) {
    cout << "请输入评委分数:";
    cin >> score;
    ____________;
    if (score >= 6)
        ____________;
}
if (high_count >= 5)
    cout << total_score;
else
    cout << 0;
A.
total_score += score;
high_count += 1;
B.
total_score += score;
high_count += score;
C.
high_count += 1;
total_score += score;
D.
total_score += score;
high_count *= 1;

正确答案A

解析详情

【答案】A

【考点】条件统计与总分累加

【解析】 每次输入都需要 total_score += score 累加总分。 当 score>=6 时代表“高分评委”,应让 high_count += 1 统计数量。

【易错点】 把 high_count 加成分数或忘记在满足条件时更新 high_count。

判断题(每题 2 分)

1 题(判断题

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

正确答案正确

解析详情

【答案】正确

【考点】智能设备与操作系统

【解析】 电话手表能通话、收发信息并运行多种功能,通常需要系统软件来管理硬件与应用(如嵌入式/移动操作系统)。 因此可以推测其内置了特定操作系统。

【易错点】 认为只有电脑/手机才需要操作系统。

2 题(判断题

C++ 语句 cout << ('4' % '2' == '2' * '2' % 2); 执行后的输出是1。()

正确答案错误

解析详情

【答案】错误

【考点】字符常量与 ASCII 运算

【解析】 '4'、'2' 是字符常量,参与运算时按 ASCII 码:'4'=52,'2'=50。 52%50=2,而 50*50%2=0,比较为假,输出 0 而不是 1。

【易错点】 把字符常量当成数字 4、2 进行运算。

3 题(判断题

下面的 C++ 代码段执行时将报错,因为10是整数类型,a 是布尔类型。由于类型不同,不能进行加法运算。()

bool a = true;
cout << (10 + a);

正确答案错误

解析详情

【答案】错误

【考点】bool 的隐式整数转换

【解析】 bool 在算术表达式中会隐式转换为 0/1,true 相当于 1。 所以 10 + a 结果为 11,代码能正常编译运行并输出 11。

【易错点】 误以为不同基本类型不能参与加法运算。

4 题(判断题

下面C++代码段执行后将输出0-3-6-9-。()

for (int i = 0; i < 10; i++) {
    if (i % 3)
        continue;
    cout << i << "-";
}

正确答案正确

解析详情

【答案】正确

【考点】continue 与取模判断

【解析】 当 i%3 不为 0 时执行 continue 跳过输出;只有 i 为 0、3、6、9 时才会输出。 因此结果为 0-3-6-9-。

【易错点】 把 i%3 的真假条件理解反了。

5 题(判断题

执行下面的 C++ 代码段,如果N是基本数据类型,则语句 `cout << (N);` 将被执行 0 次或无数次(即死循环)。()

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

正确答案正确

解析详情

【答案】正确

【考点】while 条件与死循环

【解析】 while(N) 只有在 N!=0 时才进入循环,但循环体并不会改变 N。 所以 N=0 时执行 0 次;N!=0 时会一直输出,形成死循环。

【易错点】 忘记需要在循环体内更新 N 才能结束循环。

6 题(判断题

下面的 C++ 代码段可正常执行,删除 continue 不影响执行效果。()

for (i = 0; i < 10; i++) {
    i += 1;
    continue;
}
cout << (i);

正确答案正确

解析详情

【答案】正确

【考点】continue 的作用范围

【解析】 continue 后面没有任何语句,删除它不会改变该轮循环中执行到的位置。 循环仍然只做 i+=1(再加上 for 自带的 i++),因此执行效果不变。

【易错点】 以为 continue 会影响循环变量的自增次数。

7 题(判断题

下面的 C++ 代码段用于计算1到N之间且包含N的所有数字中含有的3的个数,如1到40含有14个3,而1到20则只含有2个3。如果将 while(i != 0)改为 while(abs(i)),则执行结果相同。()

cout << "请输入正整数N:";
cin >> N;
cnt = 0; // 保存3的个数
for (k = 1; k < N + 1; k++) {
    i = k;
    while (i != 0) {
        if (i % 10 == 3)
            cnt += 1;
        i /= 10;
    }
}
cout << cnt;

正确答案正确

解析详情

【答案】正确

【考点】循环条件等价

【解析】 对整数来说,i!=0 与 abs(i)!=0 在真假上等价,只有 i 为 0 时条件为假。 本题中 i 由正整数不断除以 10,始终非负,因此两种写法结果相同。

【易错点】 把 abs(i) 误当成会“修改 i 的值”。

8 题(判断题

下面的 C++ 代码段执行将不会有输出,因为内层循环 j 总是 0 开始,i * j % 10 == 0 将会被满足,执行 break,故而 i 小于 10,不会满足 if 判断条件。()

for (i = 1; i < 10; i++)
    for (j = 0; j < i; j++)
        if (i * j % 10 == 0)
            break;
if (i >= 10)
    cout << (i * j);

正确答案错误

解析详情

【答案】错误

【考点】无大括号时语句归属与循环结束值

【解析】 两层 for 结束时外层 i 会自增到 10,随后 if(i>=10) 条件成立。 且内层常在 j=0 时满足条件并 break,最终会输出 i*j(为 0),并非“不会有输出”。

【易错点】 认为 if 判断在循环内部,或认为循环结束时 i 仍小于 10。

9 题(判断题

下列 C++ 代码执行后将输出 1#4#9#16#16。()

cnt = 0;
for (i = 1; i < 5; i++) {
    for (j = 1; j < i + 1; j++)
        if (i * j % 10 == 0)
            break;
    if (j >= i + 1)
        cout << (i * j) << "#";
}
if (i >= 5)
    cout << (i * j);

正确答案错误

解析详情

【答案】错误

【考点】for 语句体与循环结束后的 j 值

【解析】 内层 for 的语句体只有 if/break(无大括号),对 i=1..4 时 i*j%10 从不为 0,因此内层完整跑完后 j=i+1。 于是每轮输出的是 i*(i+1):2#6#12#20#,循环结束后还会输出 25,而不是 1#4#9#16#16。

【易错点】 把缩进当成实际结构,误以为输出的是 i*i 的平方序列。

10 题(判断题

下面 C++ 代码执行后输出如左图所示,将 " %d" 修改为 "%3d" 即可实现右图输出。()

TF10 左图与右图对比截图
for (i = 1; i < 10; i++) {
    for (j = 1; j < 10; j++)
        printf(" %d", i * j);
    printf("\n");
}

正确答案正确

解析详情

【答案】正确

【考点】printf 字段宽度格式化

【解析】 使用 %d 连续输出会导致不同位数的数字挤在一起,列无法对齐。 改为 %3d 可指定输出宽度为 3(右对齐),从而得到整齐的乘法表布局。

【易错点】 只调整换行或空格,却忽略格式串可以直接控制宽度。