GESP 客观题评测系统

2025-12-Level-3

2025-12-Level-3

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

单选题(每题 2 分)

1 题(单选题

请将二进制数(1101.101)2(1101.101)_{2},转换为等值的10进制数()

A.
14.25
B.
13.625
C.
13.5
D.
14.5

正确答案B

解析详情

【答案】B

【考点】二进制转十进制

【解析】 二进制小数按位展开即可: (1101.101)_2 = 1×2^3 + 1×2^2 + 0×2^1 + 1×2^0 + 1×2^-1 + 0×2^-2 + 1×2^-3。 整数部分是 8 + 4 + 1 = 13,小数部分是 1/2 + 1/8 = 0.625,所以结果是 13.625,选 B。

【易错点】 小数部分不是按 10 进制位权计算,而是按 2 的负次幂计算。

2 题(单选题

以下关于标准 C++ 一维数组的描述,哪一项是错误的?()

A.
数组的下标从0开始
B.
数组在内存中是连续存放的
C.
数组的长度只能在运行时才能确定
D.
可以在程序中修改数组某个元素的值

正确答案C

解析详情

【答案】C

【考点】数组基础;标准 C++ 语法

【解析】 标准 C++ 中,普通一维数组的长度需要在编译期确定,不能等到运行时再决定。 A、B、D 都是数组的基本性质,只有 C 说法错误,所以选 C。

【易错点】 不要把某些编译器对变长数组的扩展当成标准 C++ 语法。

3 题(单选题

下列代码段执行后,变量 sum 的值是()

{
    int sum = 0;
    for (int i = 1; i <= 10; i++) {
        if (i % 3 == 8>>2)
            continue;
        sum += i;
    }
}
A.
12
B.
17
C.
33
D.
40

正确答案D

解析详情

【答案】D

【考点】for 循环;continue;位移运算

【解析】 代码中 `8>>2` 等于 2,所以条件是 `i % 3 == 2`,满足时跳过(continue)。i 从 1 到 10 中,i%3==2 的有 2, 5, 8。跳过后累加 1+3+4+6+7+9+10 = 40,选 D。

【易错点】 `8>>2` 是位移运算而非大于号比较,结果为 2 不是布尔值。

4 题(单选题

执行以下程序段,输出值是()

int x = 5;
if (x == 3 >> 2) x = 8 >> 3;
cout << x << endl;
A.
0
B.
5
C.
120
D.
1

正确答案B

解析详情

【答案】B

【考点】位移运算;关系运算;程序执行顺序

【解析】 表达式 `3 >> 2` 的结果是 0,所以条件判断等价于 `x == 0`。 初始时 `x = 5`,条件不成立,因此不会执行赋值语句,最终输出仍为 5,选 B。

【易错点】 位移运算会先算出数值结果,再参与比较,不能把 `3 >> 2` 看成 3 和 2 的普通比较。

5 题(单选题

已知字符串s=C++ Programmings = \text{C++ Programming},下列程序运行的结果是()

cout << (int)(s.length() | 3) << endl;
A.
14
B.
15
C.
16
D.
17

正确答案B

解析详情

【答案】B

【考点】字符串长度;按位或运算

【解析】 字符串 `C++ Programming` 的长度是 15。 再看 `15 | 3`:15 的二进制是 1111,3 的二进制是 0011,按位或之后仍是 1111,也就是 15,所以输出 15,选 B。

【易错点】 `|` 是按位或,不是逻辑或,也不是把两个数拼起来。

6 题(单选题

以下代码是一个程序的部分代码,能够正确执行,输出的结果是()

int arr[5] = {1, 2, 3, 4, 5};
int p = arr[1];
cout << (p + 2) << endl;
A.
1
B.
2
C.
3
D.
4

正确答案D

解析详情

【答案】D

【考点】数组访问;变量赋值;表达式计算

【解析】 数组 `arr` 的下标从 0 开始,所以 `arr[1]` 的值是 2。 于是 `p = 2`,输出 `p + 2`,结果 is 4,选 D。

【易错点】 最容易错在把数组下标从 1 开始算。

7 题(单选题

以下关于 C++ 求最小值函数 min() 的描述,不正确的是()

A.
函数必须返回一个值
B.
该函数可以嵌套调用
C.
调用 min(5) 是错误的,不能通过编译
D.
调用 min()(不传任何参数)可以通过编译,结果为 0

正确答案D

解析详情

【答案】D

【考点】函数调用;参数个数;函数返回值

【解析】 函数调用时必须满足参数列表要求。 `min(5)` 若没有匹配的一元重载,确实不能通过编译;`min()` 不传任何参数同样不能通过编译,更不可能默认返回 0。 因此“不正确的是” D。

【易错点】 函数是否能调用,关键看是否存在匹配的参数列表,而不是想当然地补默认值。

8 题(单选题

在一个特定的计算机系统中,假如 unsigned int 类型需要占用2个字节的存储空间(每个字节有8位),则 unsigned int 可以表示的数据范围是( )

A.
0 ~ 65535
B.
0 ~ 65536
C.
-65536 ~ 65535
D.
0 ~ 32767

正确答案A

解析详情

【答案】A

【考点】无符号整数范围;二进制位数

【解析】 2 个字节共有 16 位,无符号整型可表示的范围是 0 到 2^16 - 1。 2^16 - 1 = 65535,所以范围是 0 ~ 65535,选 A。

【易错点】 无符号类型没有负数端点,上界要写成 2^n - 1。

9 题(单选题

以下代码执行后,数组 arr 的内容是()

int arr[6] = {1, 2, 3, 4, 5, 6};
for (int i = 0; i < 6; i += 2) {
    arr[i] = arr[i] + arr[i+1];
    arr[i+1] = arr[i] - arr[i+1];
    arr[i] = arr[i] - arr[i+1];
}
A.
{2,1,4,3,6,5}
B.
{1,2,3,4,5,6}
C.
{3,1,4,2,5,3}
D.
{1,3,2,5,4,6}

正确答案A

解析详情

【答案】A

【考点】数组遍历;交换算法;循环执行过程

【解析】 循环每次处理一对相邻元素,并用加减法完成交换。 初始数组是 `{1,2,3,4,5,6}`。 处理下标 0 和 1 后得到 `{2,1,3,4,5,6}`;处理下标 2 和 3 后得到 `{2,1,4,3,5,6}`;处理下标 4 和 5 后得到 `{2,1,4,3,6,5}`。 所以选 A。

【易错点】 这段代码不是排序,而是把每一对相邻元素分别交换。

10 题(单选题

a & b | (c^d),其中 a = 3,b = 7,c = 15,d = 4,计算结果是( )

A.
十进制11
B.
二进制11
C.
八进制11
D.
十六进制11

正确答案A

解析详情

【答案】A

【考点】位运算;按位与;按位或;按位异或

【解析】 先算括号和各子表达式: `a & b = 3 & 7 = 3`,`c ^ d = 15 ^ 4 = 11`。 再算 `3 | 11 = 11`。题目问“计算结果是”,选项中只有“十进制 11”对应这个结果,所以选 A。

【易错点】 题目里的“11”要分清是数值本身,还是某种进制下的写法。

11 题(单选题

整型变量 x 的初始值为 10,以下代码的输出结果是()

int t = x--;
t -= x;
cout << t << endl;
A.
0
B.
-1
C.
1
D.
死循环

正确答案C

解析详情

【答案】C

【考点】后置自减;复合赋值;表达式求值

【解析】 `t = x--` 先把 10 赋给 `t`,再让 `x` 变成 9。 接着执行 `t -= x`,即 `t = 10 - 9 = 1`,所以输出 1,选 C。

【易错点】 后置自减是“先取值,再减 1”,不要和前置自减混淆。

12 题(单选题

根据下面的流程图,如果成绩 score 输入 60 ,输出的结果是()

Image
A.
优秀
B.
及格
C.
不及格
D.
没有输出

正确答案B

解析详情

【答案】B

【考点】流程图;条件判断;分支执行

【解析】 根据流程图的判断顺序,`score = 60` 时不会进入“优秀”分支,但会进入“及格”分支,因此最终输出“及格”。 所以选 B。

【易错点】 流程图题要沿着判定箭头逐步走,不要只看几个关键词就直接选。

13 题(单选题

以下代码运行后,sum 的结果是()

int arr[5] = {2, 4, 6, 8, 10};
int sum = 0;
for (int i = 0; i < 5; i++) {
    switch (arr[i] % (1|2)) {
        case 0: sum += 1; break;
        case 1: sum += 2; break;
        case 2: sum += 3; break;
    }
}
A.
10
B.
11
C.
14
D.
15

正确答案B

解析详情

【答案】B

【考点】switch 语句;按位或;取模运算

【解析】 先算 `1 | 2 = 3`,所以程序实际在看每个元素对 3 取模后的结果。 数组元素依次是 2、4、6、8、10,对 3 取模得到 2、1、0、2、1。 对应加分分别是 3、2、1、3、2,总和是 11,所以选 B。

【易错点】 不要把 `1|2` 误看成逻辑表达式,它的结果是整数 3。

14 题(单选题

以下关于 C++ 中 abs() 函数的描述,正确的是 ( )

A.
abs() 函数可用于计算 int 类型整数的绝对值,头文件为 <cmath> 或 <cstdlib>
B.
调用 abs(3.14) 可以四舍五入得到 3
C.
abs(-1, -2) 的返回值是 1
D.
若传入负数浮点数,abs() 会自动截断小数部分后返回整数绝对值

正确答案A

解析详情

【答案】A

【考点】标准库函数;绝对值;函数参数

【解析】 `abs()` 在 `<cstdlib>` 或 `<cmath>` 中可用于求整数绝对值。B 选项 abs 不是四舍五入函数;C 选项参数个数错误;D 选项 abs 不会截断小数部分。

【易错点】 混淆 abs()、fabs()、round() 等不同数学函数的作用。

15 题(单选题

如果字符串 s 的值是 GESP,以下代码 s 的最后结果是()

for (int i = 0; i < s.length(); i++) {
    s[i] = toupper(s[i] + i);
}
A.
GESP
B.
HFTR
C.
hesp
D.
GFUS

正确答案D

解析详情

【答案】D

【考点】字符编码;字符串遍历;toupper

【解析】 字符串初始为 `GESP`。 第 0 位:`'G' + 0` 仍是 `G`;第 1 位:`'E' + 1 = 'F'`;第 2 位:`'S' + 2 = 'U'`;第 3 位:`'P' + 3 = 'S'`。 再经过 `toupper` 后仍分别是大写,所以最终得到 `GFUS`,选 D。

【易错点】 字符参与加法时本质是在按字符编码做运算。

判断题(每题 2 分)

1 题(判断题

在 C++ 中,数组名不能改变,数组名不能被赋值。

正确答案正确

解析详情

【答案】正确

【考点】数组名;C++ 基础语法

【解析】 数组名代表数组首元素地址这一固定位置,不能像普通变量那样重新赋值。

【易错点】 不要把数组名和指针变量混淆,指针可以重新赋值但数组名不行。

2 题(判断题

整型变量 a 的值为 3,浮点数变量 b 的值为 3.5,在 C++ 编译环境下,经过 a *= b 计算后,a 的值变为 10.5,此时如果输出 a,将输出 10.5。

正确答案错误

解析详情

【答案】错误

【考点】类型系统;整型与浮点型;复合赋值

【解析】 `a *= b` 即 `a = a * b = 3 * 3.5 = 10.5`,但 a 是 int 类型,结果会截断为 10,不是 10.5。

【易错点】 整型变量存储浮点运算结果时会发生截断,不是四舍五入。

3 题(判断题

strcmp(str1, str2) 返回 0 表示 str1 大于 str2,返回正数表示两者相等。

正确答案错误

解析详情

【答案】错误

【考点】字符串比较;strcmp 返回值

【解析】 `strcmp` 返回 0 表示相等,返回正数表示 str1 > str2,返回负数表示 str1 < str2。题目说反了。

【易错点】 记住返回 0 是相等,可以类比减法结果的正负零。

4 题(判断题

以下代码输出结果为 8。

int a = 5, b = 3;
int c = a++ + ++b;
cout << c << endl;

正确答案错误

解析详情

【答案】错误

【考点】自增运算;表达式求值

【解析】 `a++` 先取 a 的值 5 参与运算,`++b` 先将 b 加 1 变为 4 再取值。因此 `c = 5 + 4 = 9`,不是 8。

【易错点】 区分前置自增(先加后用)和后置自增(先用后加)。

5 题(判断题

位运算符 &、|、^、~ 的优先级高于算术运算符 +、-、*、/。

正确答案错误

解析详情

【答案】错误

【考点】运算符优先级;算术运算;位运算

【解析】 在 C++ 中,算术运算符(+、-、*、/)的优先级高于位运算符(&、|、^)。只有 ~ 优先级高于算术运算符。

【易错点】 不要混淆按位取反 ~ 和其他位运算符的优先级。

6 题(判断题

在C++中,int a[] = {1, 2, 3, 4, 5}; 可以定义一个包含5个元素的整型数组。

正确答案正确

解析详情

【答案】正确

【考点】数组初始化;C++ 基础语法

【解析】 使用初始化列表 {1,2,3,4,5} 时编译器自动推断数组长度为 5,[] 内可以省略大小。

【易错点】 省略大小只在有初始化列表时合法,空 [] 无初始化会报错。

7 题(判断题

C++ 表达式 z = a > b ? x : y 等同于:

if (a > b) {
    z = x;
} else {
    z = y;
}

以下代码执行后,输出将会是 2。

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    cout << arr[3 > 2 ? 1 : 2] << endl;
    return 0;
}

正确答案正确

解析详情

【答案】正确

【考点】条件运算符;下标访问;if-else 等价转换

【解析】 `3 > 2` 为 true,三目运算符取第一个值 1,因此访问 arr[1] = 2,输出确实是 2。

【易错点】 注意三目运算符的结果作为数组下标时,要先算出条件再确定下标。

8 题(判断题

在 C++ 中,++ 和 -- 运算符只能用于整型变量,不能用于浮点数变量。

正确答案错误

解析详情

【答案】错误

【考点】自增自减运算;浮点类型

【解析】 C++ 中 `++` 和 `--` 对浮点型变量同样适用,如 `double x = 1.5; x++;` 后 x 变为 2.5。

【易错点】 误认为自增自减只能用于整型,实际上 float/double 也支持。

9 题(判断题

给定一个正整数 a,当需要计算 -a 的补码时,有这样一个计算技巧:将 a 的二进制形式从右往左扫描,遇到第一个 1 之后,将找到的第一个 1 左边的所有位都取反,能得到 -a 的补码。

正确答案正确

解析详情

【答案】正确

【考点】补码;二进制取反规则

【解析】 这是求补码的快捷方法:从右向左找到第一个 1,保留该位及右边所有位不变,将左边所有位取反,即得到 -a 的补码。

【易错点】 不要把这个方法和'取反加 1'搞混,两者结果一样但操作步骤不同。

10 题(判断题

以下代码中,Hello 将被输出 5 次。

for (int i = 0; i < 5; i++);
{
    cout << "Hello" << endl;
}

正确答案错误

解析详情

【答案】错误

【考点】for 循环;空语句;程序块

【解析】 `for` 语句末尾多了一个分号,导致循环体为空语句。后面花括号中的代码不在循环内,只执行 1 次。

【易错点】 for 后面误加分号是常见错误,会导致循环体为空。