GESP 客观题评测系统

试卷解析 · 理解每一步

2026-09-Level-2

2026-09-Level-2

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

单选题

第 1 题(单选题,2 分)

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

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

正确答案C

解析详情
答案 C集成开发环境
思路与推导
  1. IDE提供代码编辑、编译和调试等开发工具。直接控制电机属于具体程序与硬件的功能,不是IDE本身的职责,所以选C。

第 2 题(单选题,2 分)

计算机 CPU 中的高速缓冲存储器(Cache)主要为提升系统性能而设计。下列关于 Cache 的说法中正确的是( )。

A.
Cache 的容量比主存大,速度比主存快
B.
Cache 通常用于暂存 CPU 频繁访问的数据
C.
Cache 中的数据断电后不会丢失,属于非易失性存储器
D.
Cache 的访问速度比 CPU 寄存器还要快

正确答案B

解析详情
答案 B存储层次与高速缓存
思路与推导
  1. Cache缓存CPU近期或频繁使用的数据与指令,减少访问主存的等待。通常寄存器比Cache更快,Cache比主存更小、更快,并且断电后数据丢失,因此B正确。

第 3 题(单选题,2 分)

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

cout << (3 == 3.0);
A.
1
B.
1.0
C.
0
D.
-1

正确答案A

解析详情
答案 A数值比较与布尔输出
思路与推导
  1. 比较时整数3转换为相应浮点值,与3.0相等,表达式结果为true。cout默认把true输出为1,因此选A。

第 4 题(单选题,2 分)

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

cout << (bool(5) + bool(-5) + bool(5.0));
A.
0
B.
1
C.
2
D.
3

正确答案D

解析详情
答案 D布尔转换与整数提升
思路与推导
  1. 5、-5、5.0都非零,转换为bool后均为true。加法中三个true按整数1参与运算,得到1+1+1=3,选D。

第 5 题(单选题,2 分)

判断年份 N 是否为闰年的规则是:能被 4 整除但不能被 100 整除,或者能被 400 整除。以下 C++ 表达式中,能正确判断 N 是否为闰年的是( )。

A.
(N % 4 == 0 && N % 100 != 0) || (N % 400 == 0)
B.
N % 4 == 0 && N % 100 == 0 || N % 400 == 0
C.
(N / 4 == 0 && N / 100 != 0) || (N / 400 == 0)
D.
(N % 4 == 0 && N % 100 != 0) && (N % 400 == 0)

正确答案A

解析详情
答案 A逻辑运算与闰年条件
思路与推导
  1. “被4整除且不被100整除”对应第一组&&条件,“或者被400整除”用||连接,正好对应A。B把不等于写成等于,C用除法代替求余,D把两类闰年条件错误地要求同时成立。

第 6 题(单选题,2 分)

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

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

正确答案C

解析详情
答案 C循环计数与条件判断
思路与推导
  1. i依次取0到9。i=0时条件为假;i=1到9时条件为真,每次tot增加1,共增加9次,输出9,选C。

第 7 题(单选题,2 分)

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

int n, tot, i, j;
cin >> n;
tot = 0;
for (i = 1; i < n; i++)
    for (j = 1; j < i; j++)
        tot += 1;
cout << tot;
A.
1
B.
3
C.
6
D.
10

正确答案B

解析详情
答案 B嵌套循环次数
思路与推导
  1. 输入4后,外层i依次为1、2、3,内层j的执行次数分别是0、1、2。tot合计增加3次,输出3,选B。

第 8 题(单选题,2 分)

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

int tnt, i;
tnt = 0;
for (i = 0; i < 10; i++)
    if (i % 3)
        tnt += i;
cout << tnt;
A.
12
B.
18
C.
22
D.
27

正确答案D

解析详情
答案 D求余与条件累加
思路与推导
  1. i%3非零时才累加,因此跳过0、3、6、9,累加1、2、4、5、7、8,和为27,选D。

第 9 题(单选题,2 分)

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

int tot = 0, i;
for (i = -5; i < 5; i++)
    if (not(i % 3 != 0))
        tot += 1;
cout << tot;
A.
2
B.
3
C.
7
D.
9

正确答案B

解析详情
答案 B逻辑取反与整除
思路与推导
  1. not(i%3!=0)等价于i%3==0。区间[-5,5)内满足条件的是-3、0、3,共3个,输出3,选B。

第 10 题(单选题,2 分)

有关如下 C++ 代码描述,变量都是整型,错误的是( )。

int n, limit, i;
cout << "请输入一个正整数: ";
cin >> n;
if (n <= 1)
    printf("%d非素数", n);
else if (n == 2)
    printf("2是素数");
else {
    limit = sqrt(n) + 1;
    for (i = 2; i < limit; i++)
        if (n % i == 0) {
            printf("%d非素数", n);
            break;
        }
    if (i >= limit)
        printf("%d是素数", n);
}
A.
n <= 1 条件用于判断输入 0 、 1 以及负数时的情况,不能省略。
B.
n == 2 条件及其相关代码省略,程序的输出结果没有区别。
C.
break 语句不可以省略,否则非素数还将执行最后一行的语句。
D.
limit = sqrt(n) + 1 语句中的 1 可以修改为其他大于等于 1 的正整数,执行结果不会有错误,但循环次数增多,效率有所影响。

正确答案D

解析详情
答案 D试除法与循环边界
思路与推导
  1. D错误:若把加1改成加3,输入n=3时limit=4,循环会试到i=3,把素数自身当成因子而输出非素数。原写法只需试除到平方根附近;删去break还会让已发现合数的程序继续输出素数。

第 11 题(单选题,2 分)

执行以下 C++ 代码后,最终的输出结果是( )。

int total, i, j;
total = 0;
i = 1;
while (i <= 3) {
    for (j = 1; j < i + 1; j++)
        total += i * j;
    i += 1;
}
cout << total;
A.
9
B.
11
C.
23
D.
25

正确答案D

解析详情
答案 D双重循环求和
思路与推导
  1. i=1时增加1;i=2时增加2×1+2×2=6;i=3时增加3×1+3×2+3×3=18。总和为1+6+18=25,选D。

第 12 题(单选题,2 分)

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

int count, i, j;
count = 0;
for (i = 1; i < 4; i++)
    for (j = 0; j < i; j++) {
        if (j % 3 == 0)
            continue;
        count += 1;
        if (i * j >= 2)
            break;
    }
printf("%d %d %d", i, j, count);
A.
2 3 2
B.
3 0 2
C.
4 1 2
D.
4 2 3

正确答案C

解析详情
答案 Ccontinue、break与循环结束值
思路与推导
  1. i=1时j=0被跳过;i=2时j=1让count变1并break;i=3时j=1让count变2并break。外层再递增到i=4后退出,j仍为1,输出4 1 2,选C。

第 13 题(单选题,2 分)

如下的 C++ 代码执行时输入 12 将输出如下数字图形。注意:最后一行之前没有空格。横线处应填入的代码是( )。

           0
          12
         345
        6789
       01234
      567890
     1234567
    89012345
   678901234
  5678901234
 56789012345
678901234567
int line, i, j, k;

i = 0;
cout << "请输入行数:";
cin >> line;
for (j = 0; j < line; j++) {
    for (k = 0; k < ___________; k++) // L1
        cout << " ";
    for (k = 0; k < j + 1; k++) {
        cout << i;
        i += 1;
        if (i >= 10)
            i = 0;
    }
    cout << endl;
}
A.
line - j - 1
B.
line - j
C.
line
D.
line + 1

正确答案A

解析详情
答案 A数字图形与前导空格
思路与推导
  1. 第j行输出j+1个数字,要保持总宽度line,空格数应为line-(j+1),即line-j-1,选A。输入12时首行11个空格,最后一行j=11时没有空格。

第 14 题(单选题,2 分)

小北的身高是 1.65 米。班上有 n 个小朋友,小北想和身高最接近自己的人交朋友。如果有多个小朋友与小北的身高差相同,小北想和其中身高较矮的第一个小朋友做朋友。横线处应该填入的是( )。

int n, i;
float target, h, best_height, min_diff, diff;

cout << "请输入小朋友的人数: ";
cin >> n;
target = 1.65;
best_height = 0.0;
min_diff = 100.0;

for (i = 0; i < n; i++) {
    cout << "请输入第 " << i << " 个小朋友的身高: ";
    cin >> h;
    diff = abs(h - target);

    if (____________________) { // L1
        min_diff = diff;
        best_height = h;
    }
}
cout << "小北的朋友身高为: " << best_height;
A.
diff < min_diff || (diff == min_diff && h < best_height)
B.
diff <= min_diff && h < best_height
C.
diff < min_diff && h < best_height
D.
diff < min_diff || h < best_height

正确答案A

解析详情
答案 A最优值更新与并列规则
思路与推导
  1. 更新有两种情况:身高差更小;或身高差相同且身高更矮。A用||连接这两种情况,第二种内部用&&同时检查两个条件。身高也相同时不更新,从而保留先出现的人。

第 15 题(单选题,2 分)

小北的身高是 1.65 米。班上有 n 个小朋友,小北想和身高最接近自己的人交朋友。如果有多个小朋友与小北的身高差相同,小北想和其中身高较矮的第一个小朋友做朋友。横线处应该填入的是( )。

int n, i;
float target, h, best_height, min_diff, diff;

cout << "请输入小朋友的人数: ";
cin >> n;
target = 1.65;
best_height = 0.0;
min_diff = 100.0;

for (i = 0; i < n; i++) {
    cout << "请输入第 " << (i + 1) << " 个小朋友的身高: ";
    cin >> h;

    if (h > target)
         diff = h - target;
    else
         diff = target - h;

    if (diff < min_diff) {
        min_diff = diff;
        best_height = h;
    } else if (diff == min_diff) {
        __________________
        __________________
    }
}

cout << "小北的朋友身高为:" << best_height;
A.
if (h < best_height)
    best_height = h;
B.
if (h > best_height)
    best_height = h;
C.
if (h > target)
    best_height = h;
D.
if (h >= best_height)
    best_height = h;

正确答案A

解析详情
答案 A并列最优值的处理
思路与推导
  1. 进入else if已经保证diff==min_diff,只需再判断h<best_height,然后更新best_height,因此选A。差值未变,不需要重复修改min_diff;相同身高不更新,保留先出现者。

判断题

第 1 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确标准输入
思路与推导
  1. cin和scanf通常从标准输入读取数据,交互运行时通常由键盘输入,因此表述正确。标准输入也可以重定向到文件。

第 2 题(判断题,2 分)

执行 C++ 语句 cout << ( 5 && 2 ); 将输出 1 。

正确答案正确

解析详情
答案 正确逻辑与
思路与推导
  1. 5和2均非零,均视为真,逻辑与结果为true,默认输出1,所以正确。

第 3 题(判断题,2 分)

C++ 表达式 2 * - '2' / 4 的值是 -1 。

正确答案错误

解析详情
答案 错误字符常量参与运算
思路与推导
  1. 字符'2'不是整数2;在常用ASCII编码下值为50,因此2×(-50)/4=-25,不是-1,表述错误。

第 4 题(判断题,2 分)

如下 C++ 代码执行后的输出是 10 。

int a;
a = 5;
a == +5;
cout << a;

正确答案错误

解析详情
答案 错误比较与赋值
思路与推导
  1. a==+5只进行相等比较,没有把结果赋回a。a仍为5,输出5而非10,因此错误。

第 5 题(判断题,2 分)

执行 C++ 代码 cout << (not not 5) 将输出 5 。

正确答案错误

解析详情
答案 错误连续逻辑取反
思路与推导
  1. not 5得到false,再取反得到true,cout默认输出1而不是5,因此错误。

第 6 题(判断题,2 分)

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

for (int i = 1; i < 10; i++)
    if (not(i % 3))
        cout << i;

正确答案正确

解析详情
答案 正确整除筛选与连续输出
思路与推导
  1. i%3为0时not(i%3)为真,输出3、6、9,代码没有插入空格,最终显示369,因此正确。

第 7 题(判断题,2 分)

N 是整数,执行如下 C++ 代码,将能输出 0 到 N 之间(包含 N )所有数之和。

int N, tot, i;
cin >> N;
tot = 0;
for (i = 0; i < N + 1; i++)
    tot += i;
cout << tot;

正确答案错误

解析详情
答案 错误循环适用范围
思路与推导
  1. 题目只规定N为整数,也可能为负数。例如N=-2时循环一次也不执行,输出0,但-2、-1、0的和是-3,因此错误。

第 8 题(判断题,2 分)

如下 C++ 代码执行后,输出值为 0 。

int cnt, i, j;
cnt = 0;
for (i = 0; i < 10; i++) {
    continue;
    for (j = 0; j < i; j++)
        cnt += 1;
}
cout << i * cnt;

正确答案正确

解析详情
答案 正确continue跳过循环体
思路与推导
  1. 每轮先执行continue,内层循环始终不会运行,cnt保持0。外层正常递增至i=10退出,i*cnt仍为0,因此正确。

第 9 题(判断题,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++) {
    ji_tou = tou - tu_tou;
    if (tu_tou * 4 + ji_tou * 2 == jiao)
        printf("兔的数量=%d,鸡的数量=%d\n", tu_tou, ji_tou);
}
if (tu_tou == tou)
    printf("无解\n");

正确答案错误

解析详情
答案 错误枚举与无解判断
思路与推导
  1. 循环正常结束后tu_tou为tou+1,条件tu_tou==tou不会成立。例如输入3个头、5只脚时无解,却不会输出无解,因此错误。可用是否找到解的标记记录枚举结果。

第 10 题(判断题,2 分)

如果 N 和 M 均为整数,下列 C++ 代码则可以判断正整数 N 是 M 的平方。比如 9 是 3 的平方。

int N, M;

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

if (int(sqrt(N)) == abs(M))
    printf("%d是%d的平方\n", N, M);

正确答案错误

解析详情
答案 错误平方根取整与反例
思路与推导
  1. int(sqrt(N))会截去小数部分。例如N=10、M=3时取整得到3,条件成立,但10不等于3的平方9,因此错误。