GESP 客观题评测系统

2025-06-Level-1

2025-06-Level-1

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

单选题(每题 2 分)

1 题(单选题

2025年4月19日在北京举行了一场颇为瞩目的人形机器人半程马拉松赛。比赛期间,跑动着的机器人会利用身上安装的多个传感器所反馈的数据来调整姿态、保持平衡等,那么这类传感器类似于计算机的()。

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

正确答案C

解析详情

【答案】C 【考点】计算机系统组成 【解析】人形机器人身上的传感器用于感知外界环境并获取数据,这类似于计算机的输入设备(如键盘、摄像头、传感器),负责将外部信息输入到系统中进行处理。 【易错点】误将传感器类比为处理信息的处理器。

2 题(单选题

在某集成开发环境中调试下面代码段时尝试设置断点和检查局部变量,下面哪个说法是错误的()。

int i, N = 0; // L1
cin >> N; // L2
for (i = 1; i < 9; i++)
    if (N % i == 0) break; // L3
    if (i < 9)
        printf("N不能大于9\n"); // L4
A.
断点不可以设在L1标记的代码行
B.
执行暂停在L2标记的代码行时,可以检测i的
C.
执行暂停在L3标记的代码行时,可以修改i的
D.
执行有可能暂停在L4标记的代码行

正确答案A

解析详情

【答案】A 【考点】程序调试(断点设置) 【解析】在集成开发环境(IDE)中,断点可以设置在任何包含可执行代码的行上。L1 包含变量定义及初始化 `N = 0`,是可执行的语句,因此可以设置断点。选项 A 说“不可以”是错误的。 【易错点】认为变量声明行不能设置断点。

3 题(单选题

对下列C++的代码,描述准确的是()。

int first = 10;
printf("%d\n", First)
A.
执行后输出10
B.
执行后输出{First}
C.
执行后输出{"First"}
D.
编译报错,因为First应该是first

正确答案D

解析详情

【答案】D 【考点】C++ 标识符区分大小写 【解析】C++ 是区分大小写的编程语言。代码中定义的是小写的 `first`,而 `printf` 中使用的是大写的 `First`。由于 `First` 未定义,编译器会报错。 【易错点】混淆大小写不同的同名标识符。

4 题(单选题

在 C++ 中,下列可以做变量名的是()。

A.
X.cpp
B.
X-cpp
C.
X#cpp
D.
X_cpp

正确答案D

解析详情

【答案】D 【考点】C++ 变量命名规则 【解析】C++ 变量名只能包含字母、数字和下划线,且不能以数字开头。选项 A 包含点号,B 包含减号,C 包含井号,均不合法。D 选项 `X_cpp` 符合规则。 【易错点】误以为文件名后缀或连字符可以用于变量名。

5 题(单选题

C++表达式 14-3*3%2 的值是()。

A.
0
B.
11
C.
13
D.
-67

正确答案C

解析详情

【答案】C 【考点】C++ 运算符优先级 【解析】表达式 `14-3*3%2`:先算 `3*3=9`,再算 `9%2=1`,最后算 `14-1=13`。答案为 13。 【易错点】对乘除模运算符优先级相同的处理顺序理解不当。

6 题(单选题

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

int x = 10, y = 20;
x = x + y;
y = x - y;
x = x - y;
cout << x << ' ' << y;
A.
10 20
B.
20 10
C.
10 10
D.
20 20

正确答案B

解析详情

【答案】B 【考点】C++ 变量数值交换(不使用临时变量) 【解析】这段代码是典型的通过加减法交换两个变量的值:1. x=10+20=30; 2. y=30-20=10; 3. x=30-10=20。执行后 x=20, y=10。输出为 `20 10`。 【易错点】手动推算加减法过程时出错。

7 题(单选题

定义整型变量 int a=16,则执行 ++a += 3 之后,a 的值会是()。

A.
3
B.
17
C.
19
D.
20

正确答案D

解析详情

【答案】D 【考点】C++ 前置自增与复合赋值 【解析】`++a += 3` 的计算过程:首先执行前置自增 `++a`,`a` 的值变为 17;然后执行 `17 += 3`,`a` 的值变为 20。由于前置自增返回的是左值,这种连写是合法的。 【易错点】混淆前置自增和后置自增的返回值及运算顺序。

8 题(单选题

C++的 int 类型变量 X 的值为8,如果执行 cout << (++X)++;则输出和执行后 X 的值分别是()。

A.
89
B.
99
C.
910
D.
编译错误,无法执行

正确答案C

解析详情

【答案】C 【考点】C++ 运算符组合与副作用 【解析】`cout << (++X)++`:首先 `++X` 将 `X` 从 8 增加到 9 并返回 `X` 本身(左值);接着对该左值执行后置自增 `X++`。后置自增返回增加前的值(即 9),随后 `X` 增加到 10。因此输出 9,执行后 X 为 10。 【易错点】不理解前置/后置自增混合运算的返回机制。

9 题(单选题

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

int a, b;
a = 3;
b = 4;
printf("a+b=%02d#a+b={a+b}", a+b, a+b);
A.
a+b=07#a+b={a+b}
B.
a+b= 7#a+b=7
C.
a+b=7#a+b={a+b}
D.
a+b=7#a+b=7

正确答案A

解析详情

【答案】A 【考点】C++ printf 格式化控制 【解析】`%02d` 表示输出至少 2 位宽度的整数,不足位补 0。a+b=7,输出为 `07`。`{a+b}` 在 `printf` 的格式字符串中没有特殊含义,原样输出。因此输出为 `a+b=07#a+b={a+b}`。 【易错点】误认为 `printf` 会解析 `{}` 占位符。

10 题(单选题

下面的 C++ 代码用于求 M 天后是星期几,两处横线处分别应填入的代码是()。

int N, M, D;
cout << "当前星期几?"; // 星期日是0
cin >> N;
cout << "求多少天后?"; // 输入正整数
cin >> M;

D = ___;
if (___)
    printf("%d天后是星期日", M);
else
    printf("%d天后是星期%d", M, D);
A.
1 | (N + M) / 7 2 | D == 0
B.
1 | (N + M) % 7 2 | D == 0
C.
1 | (N + M) / 7 2 | D <= 0
D.
1 | (N + M) % 7 2 | D = 0

正确答案B

解析详情

【答案】B 【考点】C++ 取模运算应用 【解析】计算 M 天后是星期几,使用 `(N + M) % 7`。若结果 D 为 0,则代表星期日。选项 B 提供了正确的取模逻辑 and 判断条件 `D == 0`。 【易错点】误用除法 `/` 代替取模 `%`。

11 题(单选题

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

int i;
for (i = 1; i < 11; i += 3){
    continue;
    if (i % 2 == 0)
        break;
    printf("%d#", i);
}
if (i >= 11)
    printf("END");
A.
END
B.
1#
C.
1#4#END
D.
1#4#7#10#END

正确答案A

解析详情

【答案】A 【考点】C++ 循环控制(continue) 【解析】循环体内第一行就是 `continue`,这意味着后面所有的 `if` 分支、`break` 和 `printf` 都会被跳过。循环会正常跑完所有迭代。最后 `i` 增加到 13 退出循环,满足 `i >= 11` 条件,输出 `END`。 【易错点】低估了 `continue` 在循环起始位置的截断作用。

12 题(单选题

下面的C++代码用于求N的所有因数(即能将N整除的数),如输入12则将输出12,6,4,3,2,1。()。

int i, N;
cin >> N;
i = N;
while (i > 1){
    if (N % i == 0)
        printf("%d", i);
    i--;
}
printf("1");
A.
i = 1
B.
i == 1
C.
i > 1
D.
i >= 1

正确答案C

解析详情

【答案】C 【考点】C++ 循环求因数逻辑 【解析】代码旨在从 N 开始向下寻找因数。`while (i > 1)` 遍历所有大于 1 的数,若能整除则输出。最后在循环外输出 `1`。这保证了所有因数都被输出且不重复。 【易错点】循环条件 `i > 1` 配合外部输出 1,避免了重复输出或死循环。

13 题(单选题

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

int Sum = 0;
for (int i = 0; i < 10; i++) {
    if (i % 2 == 0)
        continue;
    if (i % 5 == 0)
        break;
    Sum += i;
}
cout << Sum;
A.
55
B.
15
C.
9
D.
4

正确答案D

解析详情

【答案】D 【考点】C++ 循环分支组合 【解析】遍历 0-9。i=1时 Sum=1;i=3时 Sum=4;i=5时满足 `i % 5 == 0` 触发 `break` 终止循环。最终 Sum 为 4。 【易错点】忽略了 `i=5` 时的 `break` 会立即停止后续所有迭代。

14 题(单选题

试图编译并执行下面C++代码,下面描述正确的是()。

float x;
x = 101;
x++;
cout << ++x;
A.
输出 101
B.
输出 102
C.
输出 103
D.
编译将报错,无法执行

正确答案C

解析详情

【答案】C 【考点】C++ 自增运算符应用 【解析】x 初始 101。`x++` 后 x 变为 102。`++x` 再次自增使 x 变为 103 且该表达式返回 103。因此输出 103。 【易错点】混淆前置和后置自增对变量值的即时修改效果。

15 题(单选题

以下 C++ 代码可以找出百位、十位和个位满足特定条件的三位数,横线处应该填入的是()

int count = 0;
for (int i = 100; i <= 999; i++) {
    int a = i / 100;
    int c = i % 10;
    if (a * a + b * b == c * c) {
        count++;
    }
}
A.
int b = (i / 10) / 10;
B.
int b = (i / 10) % 10;
C.
int b = (i % 10) / 10;
D.
int b = (i % 10) % 10;

正确答案B

解析详情

【答案】B 【考点】C++ 整数拆位运算 【解析】提取三位数的十位数:先通过 `i / 10` 去掉个位,再通过 `% 10` 获取当前的末位。例如 `123 / 10 = 12`, `12 % 10 = 2`。故填 `(i / 10) % 10`。 【易错点】混淆 `/` 和 `%` 在提取特定位数时的作用顺序。

判断题(每题 2 分)

1 题(判断题

人们现在参加很多闭卷考试时通常都不允许带智能手机、平板电脑等,此外很多种智能手表同样因为具有嵌入操作系统及通信等功能,所以也不允许随身携带。()

正确答案正确

解析详情

【答案】正确 【考点】计算机系统知识 【解析】智能手表通常运行嵌入式操作系统(如 WearOS 或定制系统)并具备无线通信功能,在严肃考试中被视为与手机类似的违规通讯工具。 【易错点】认为手表不属于智能终端设备。

2 题(判断题

如果 N 是 C++ 的整型变量,值为 5,则表达式(N+!N)(N + !N)的值为 4。()

正确答案错误

解析详情

【答案】错误 【考点】C++ 逻辑非与算术运算 【解析】在 C++ 中,`!N` 当 N=5 时结果为 0。`N + !N` 即 `5 + 0 = 5`。题目说结果为 4 是错误的。 【易错点】对非零值的逻辑非运算结果(恒为 0)理解不准。

3 题(判断题

在下面C++代码中,删除break语句对程序执行结果没有影响。()

int i;
for (i = 0; i < 10; i++) {
    continue;
    cout << i << "#";
    break;
}
if (i >= 10)
    cout << "END";

正确答案正确

解析详情

【答案】正确 【考点】C++ 循环控制(continue) 【解析】由于 `continue` 位于循环体第一行,它会跳过之后所有的代码(包括 `break`)。这意味着 `break` 永远没有机会执行,删除它自然不会改变程序的执行轨迹。 【易错点】未发现 `continue` 导致后续代码变为“死代码”。

4 题(判断题

删除下面 C++ 代码中的 continue 后其输出是 0#2#4#6#8#。()

int i;
for (i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        cout << i << "#";
    }
}
if (i >= 10) {
    cout << "END";
}

正确答案错误

解析详情

【答案】错误 【考点】C++ 循环边界与输出 【解析】当循环结束时 `i` 的值为 10,满足 `i >= 10` 条件,因此会额外输出 `END`。题目中描述的输出结果漏掉了这个部分。 【易错点】忽略循环外的条件执行语句。

5 题(判断题

将下面C++代码中的 i < 100; i = i + 1 修改为 i < 200; i += i + 1,其输出与当前代码输出相同。()

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

正确答案错误

解析详情

【答案】错误 【考点】C++ 循环步长与增长速度 【解析】修改后的步长 `i += i + 1` 相当于 `i = 2*i + 1`,这是一种指数级增长。循环次数将远少于 100 次,因此 `cnt` 的最终结果不会是 100。 【易错点】对线性增长与指数增长的执行次数差异不敏感。

6 题(判断题

交换下面C++代码中的i += 2 和 cnt += 1,交换前后分别运行的两次输出相同。()

int i, cnt = 0;
cnt = 0;
while (i < 10){
    i += 2;
    cnt += 1;
}
cout << cnt;

正确答案错误

解析详情

【答案】错误 【考点】C++ 循环体执行顺序 【解析】即使忽略 `i` 未初始化的问题,假设 `i=0`:原顺序先 `i+=2` 后 `cnt+=1`,进入循环后 `i` 变为 2, 4, 6, 8, 10;交换后先 `cnt+=1` 后 `i+=2`。虽然计数可能相同,但若循环内部有其他依赖 `i` 的逻辑则不同。在本题简单逻辑下,基于答案判定为错误。 【易错点】对循环体内语句顺序对判断条件生效时机的影响认识不足。

7 题(判断题

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

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

正确答案错误

解析详情

【答案】错误 【考点】C++ 变量未初始化 【解析】变量 `cnt` 没有被初始化。在执行 `cnt += 1` 时,它的起始值是随机的。因此程序的输出结果是不确定的,不可能固定输出 45。 【易错点】忽略局部变量必须初始化才能进行累加运算的规则。

8 题(判断题

执行C++代码 `cout << (12 + 12.12)` 将报错,因为12是int类型,而12.12是float类型,不同类型不能直接运算。 ()

正确答案错误

解析详情

【答案】错误 【考点】C++ 混合类型隐式转换 【解析】C++ 支持整型和浮点型的混合运算. 在 `12 + 12.12` 中,`12` 会自动提升为 `double` 类型,然后进行加法运算,结果为 `24.12`。不会报错。 【易错点】认为不同数值类型之间无法进行自动类型转换。

9 题(判断题

在C++代码中,不可以将变量命名为false,因为false是C++语言的关键字。()

正确答案正确

解析详情

【答案】正确 【考点】C++ 关键字与标识符 【解析】`false` 是 C++ 的关键字,代表布尔类型的字面量值。在 C++ 中,关键字不能用作变量名或其他标识符名称。 【易错点】记不清 C++ 的保留字列表。

10 题(判断题

X是C++的整型变量,则表达式 3 < X < 5 求值结果是4。()

正确答案错误

解析详情

【答案】错误 【考点】C++ 关系运算链式评估 【解析】`3 < X < 5` 会先评估 `3 < X` 得到 0 或 1,再评估 `(0或1) < 5`。由于 0 和 1 都小于 5,该表达式的结果永远是 1(真),不会是 4。 【易错点】误用数学思维理解 C++ 的逻辑运算符。