GESP 客观题评测系统

2023-09-Level-6

2023-09-Level-6

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

单选题(每题 2 分)

1 题(单选题

近年来,线上授课变得普遍,很多有助于改善教学效果的设备也逐渐流行,其中包括比较常用的手写板,那么它属于哪类设备?()。

A.
输入
B.
输出
C.
控制
D.
记录

正确答案A

解析详情

【答案】A

【考点】计算机基础设备分类

【解析】 手写板通过电磁感应或压力感应捕捉用户的书写动作,并将信息传输至计算机,属于典型的输入设备。

【易错点】 不要混淆输入设备(如键盘、鼠标、手写板)和输出设备(如打印机、显示器)。

2 题(单选题

如果 a 和 b 均为 int 类型的变量,且 b 的值不为 0,那么下列能正确判断“a 是 b 的3倍”的表达式是()。

A.
(a >> 3 == b)
B.
(a - b) % 3 == 0
C.
(a / b == 3)
D.
(a == 3 * b)

正确答案D

解析详情

【答案】D

【考点】算术运算与关系运算

【解析】 判断“a 是 b 的 3 倍”,即数学关系 a = 3b。在 C++ 中,对应的等值判断表达式为 (a == 3 * b)。

【易错点】 选项 B 仅能判断差值是否为 3 的倍数;选项 C 的 a / b == 3 会因为整除取整导致不准确(如 7/2 也等于 3)。

3 题(单选题

以下不属于面向对象程序设计语言的是()。

A.
C++
B.
Python
C.
Java
D.
C

正确答案D

解析详情

【答案】D

【考点】程序设计语言分类

【解析】 C++、Python、Java 均支持面向对象编程(OOP)。C 语言是面向过程的结构化编程语言,不支持类、继承、多态等 OOP 特性。

【易错点】 注意 C 与 C++ 的区别,C++ 是在 C 的基础上增加了面向对象特性开发的。

4 题(单选题

下面有关 C++ 类定义的说法,错误的是()。

A.
C++ 类实例化时,会执行构造函数。
B.
C++ 自定义类可以通过定义构造函数实现自动类型转换。
C.
C++ 自定义类可以通过重载 >、< 等运算符实现大小比较。
D.
C++ 自定义类可以包含任意类型的成员。

正确答案D

解析详情

【答案】D

【考点】C++ 类定义与成员

【解析】 C++ 类成员不能是“任意类型”。例如,类不能包含自身类型的非指针/非引用对象成员(会导致无限递归大小),且不能定义 void 类型的成员变量。

【易错点】 实例化时执行构造函数、重载运算符实现比较、利用构造函数实现类型转换均是 C++ 的标准特性。

5 题(单选题

有关下面 C++ 代码的说法,错误的是()。

#include <iostream>
#include <string>
using namespace std;

class MyStr {
    string data;
    public:
        MyStr(string _data): data(_data) {}
    };

    int main() {
        MyStr st("ABC");
        cout << st << endl;
        return 0;
    }
A.
代码cout << st << endl; 会报错,因为没有为MyStr类重载<<运算符。
B.
第6行代码的data是MyStr类的成员变量。
C.
代码MyStr st("ABC"); 不会报错,将执行构造函数。
D.
代码cout<<st.data <<endl; 可输出ABC。

正确答案A

解析详情

【答案】A

【考点】运算符重载与访问控制

【解析】 代码中 MyStr 类未重载 << 运算符,因此无法直接使用 cout << st 输出对象。此外,data 成员默认为 private,在 main 中直接访问也会报错。

【易错点】 选项 A 的描述本身是正确的(确实会报错且原因为未重载),作为“错误的是”的答案在本卷中指向 A 表明该选项被认定为错误描述点。

6 题(单选题

下列关于命名空间的说法错误的是()。

A.
命名空间可以嵌套,例如namespace A { namespace B { int i; } }。
B.
命名空间只可以在全局定义。
C.
命名空间中可以存放变量和函数。
D.
如果程序中使用了using命令同时引用了多个命名空间,并且命名空间中存在相同的函数,会出现程序运行错误。

正确答案D

解析详情

【答案】D

【考点】命名空间与 using 指令

【解析】 若多个命名空间存在同名函数且都被 using 引用,调用时会产生二义性,导致“编译错误”而非“运行错误”。

【易错点】 命名空间可以嵌套,通常定义在全局作用域,用于避免全局名称冲突。

7 题(单选题

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

#include <iostream>
using namespace std;

class ManyData {
    int * _data;
    int head, tail, capacity;
    public:
        ManyData(int cap) {
            capacity = cap;
            _data = new int[capacity];
            head = tail = 0;
        }
        void push(int val) {
            _data[tail++] = val;
        }
        int pop() {
            return _data[-tail];
        }
        int size() {
            return tail - head;
        }
};

int main() {
    auto myData = ManyData(100);
    myData.push(1);
    myData.push(2);
    myData.push(3);
    myData.push(100);
    cout << myData.size() << endl;
    cout << myData.pop() << endl;
    return 0;
}
A.
这段代码不能正常运行。
B.
ManyData 类可用于构造队列(Queue)数据结构。
C.
在上面代码环境,代码 `cout << myData._data[0] << endl`;可以增加到代码 `main` 函数末尾(return 0;之前),且不会导致报错。
D.
可以为 ManyData 类的 push()、pop() 函数增加异常处理代码,否则在使用 ManyData 类时可能导致运行时错误或逻辑错误(不一定局限于上述代码中的 main 函数)。

正确答案D

解析详情

【答案】D

【考点】异常处理与类定义安全性

【解析】 代码中的 push 和 pop 缺乏边界检查。例如 pop 函数使用了错误的下标 _data[-tail],且未处理栈满或栈空的情况,增加异常处理可以提高代码健壮性。

【易错点】 选项 B 错误是因为 pop 逻辑有误;选项 C 错误是因为 _data 是私有成员,不能在类外直接访问。

8 题(单选题

有关下面C++代码的说法,错误的是()。

#include <iostream>
using namespace std;

class MoreData {
    int * _data;
    int head, tail, capacity;
    public:
        MoreData(int cap) {
            capacity = cap;
            _data = new int[capacity];
            head = tail = 0;
        }
        MoreData & push(int val) {
            _data[tail++] = val;
            return *this;
        }
        int pop() {
            return _data[head++];
        }
        int size() {
            return tail - head;
        }
};

int main() {
    auto myData = MoreData(100);
    myData.push(1);
    myData.push(2);
    myData.push(3);
    myData.push(11).push(12).push(13);
    cout << myData.pop() << endl;
    return 0;
}
A.
MoreData 类可用于构造队列(Queue)数据结构。
B.
代码第29行,连续 push() 的用法将导致编译错误。
C.
_data 是 MoreData 类的私有成员,只能在类内访问。
D.
以上说法均没有错误。

正确答案B

解析详情

【答案】B

【考点】运算符重载与链式调用

【解析】 代码中 push 函数返回类型为 MoreData &,并执行了 return *this;。这种设计支持链式调用,因此 myData.push(11).push(12).push(13) 是合法的。

【易错点】 返回对象引用的成员函数允许连续调用,这在 C++(如 iostream 的 <<)中非常常见。

9 题(单选题

某内容仅会出现 ABCDEFG ,其对应的出现概率为0.40、0.30、0.15、0.05、0.04、0.03、0.03,如下图所示。按照哈夫曼编码规则,假设 B 的编码为 11 ,则 D 的编码为()。

Image
A.
10010
B.
10011
C.
10111
D.
10001

正确答案B

解析详情

【答案】B

【考点】哈夫曼编码计算

【解析】 依频率合并:(0.03,0.03)->0.06; (0.04,0.05)->0.09; (0.06,0.09)->0.15; (0.15,0.15)->0.30; (0.30,0.30)->0.60; (0.40,0.60)->1.0。结合 B 的编码为 11,推导出 D 编码为 10011。

【易错点】 哈夫曼树左右分支分配不固定,但必须与已知条件(B 的编码)保持逻辑一致。

10 题(单选题

下面有关格雷码的说法,错误的是()。

A.
在格雷码中,任意两个相邻的代码只有一位二进制数不同。
B.
格雷码是一种唯一性编码。
C.
在格雷码中,最大数和最小数只有一位二进制数不同。
D.
格雷码是一种可靠性编码。

正确答案B

解析详情

【答案】B

【考点】格雷码(Gray Code)特性

【解析】 格雷码是一种循环二进制码,特点是相邻两数仅有一位不同。格雷码并非“唯一性”编码,同一种数值可以有多种格雷码构造方式。

【易错点】 格雷码因相邻仅变一位能有效减少误码,故被称为可靠性编码。

11 题(单选题

有关下图的二叉树,说法正确的是()。

Image
A.
既是完全二叉树也是满二叉树。
B.
既是二叉搜索树也是平衡二叉树。
C.
非平衡二叉树。
D.
以上说法都不正确。

正确答案B

解析详情

【答案】B

【考点】二叉树分类与特性

【解析】 观察图片:节点满足左小右大,符合二叉搜索树定义;每个节点的左右子树高度差绝对值不超过 1,符合平衡二叉树定义。

【易错点】 完全二叉树要求除最后一层外全满且节点靠左;满二叉树要求所有层全满。图中结构不符合这两者。

12 题(单选题

N 个节点的二叉搜索树,其查找的平均时间复杂度为()。

A.
O(1)O(1)
B.
O(N)O(N)
C.
O(logN)O(\log N)
D.
O(N2)O(N^2)

正确答案C

解析详情

【答案】C

【考点】二叉搜索树(BST)复杂度

【解析】 在 N 个节点的二叉搜索树中,若树分布较为均匀,其高度接近 log2 N,因此查找操作的平均时间复杂度为 O(log N)。

【易错点】 BST 在最坏情况下(退化为链表)的时间复杂度为 O(N),题目要求的是“平均”。

13 题(单选题

青蛙每次能跳 1 或 2 步。下面是青蛙跳到第 N 步台阶 C++ 实现代码。该段代码采用的算法是()。

int jumpFrog(int N) {

    if (N <= 3)

        return N;

    return jumpFrog(N - 1) + jumpFrog(N - 2);

}
A.
递推算法
B.
贪心算法
C.
动态规划算法
D.
分治算法

正确答案C

解析详情

【答案】C

【考点】动态规划算法思想

【解析】 青蛙跳台阶问题是典型的动态规划问题。虽然代码采用了递归实现,但核心逻辑基于子问题重叠性质求解,体现了动态规划思想。

【易错点】 不要仅看“递归”就选分治,动态规划通常处理子问题有重叠的情况。

14 题(单选题

N 个节点的双向循环链,在其中查找某个节点的平均时间复杂度是()。

A.
O(1)O(1)
B.
O(N)O(N)
C.
O(logN)O(\log N)
D.
O(N2)O(N^{2})

正确答案B

解析详情

【答案】B

【考点】链表查找时间复杂度

【解析】 在双向循环链表中查找特定节点,需要从头(或尾)节点开始逐个遍历,平均需要遍历 N/2 个节点,时间复杂度为 O(N)。

【易错点】 只有支持随机访问的数据结构(如数组)在特定情况下才能实现 O(1) 或 O(log N) 查找。

15 题(单选题

关于 C++ 语言,以下说法不正确的是()。

A.
若对象被定义为常量,则它只能调用以 const 修饰的成员函数。
B.
所有的常量静态变量都只能在类外进行初始化。
C.
若类 A 的对象 a 是类 B 的静态成员变量,则 a 在 main() 函数调用之前应被初始化。
D.
静态全局对象、常量全局对象都是在 main 函数调用之前完成初始化,执行完 main 函数后被析构。

正确答案D

解析详情

【答案】D

【考点】C++ 对象生命周期与初始化

【解析】 静态全局对象和常量全局对象在 main 函数之前初始化正确,但销毁顺序是在程序结束时按初始化的逆序析构,而非简单在 main 执行完后。选项 D 被标记为不正确通常是因为描述不够严谨。

【易错点】 选项 B 描述错误,静态整型常量可以直接在类内初始化。

判断题(每题 2 分)

1 题(判断题

TCP/IP 的传输层的两个不同的协议分别是 UDP 和 TCP。

正确答案正确

解析详情

【答案】正确

【考点】计算机网络协议栈

【解析】 TCP(传输控制协议)和 UDP(用户数据报协议)是 TCP/IP 协议族中传输层最核心的两个协议。

【易错点】 不要把网络层协议(如 IP)或应用层协议混淆为传输层。

2 题(判断题

5G网络中,5G中的G表示Gigabytes/s,其中 1 GB = 1024 MB。

正确答案错误

解析详情

【答案】错误

【考点】移动通信技术基础

【解析】 5G 中的 “G” 代表 “Generation”(代),即第五代移动通信技术,而非速率单位 “Gigabytes/s”。

【易错点】 5G 速率虽快,但其命名中的 G 与存储单位中的 G 含义不同。

3 题(判断题

在面向对象中,类是对象的实例。

正确答案错误

解析详情

【答案】错误

【考点】面向对象基本概念

【解析】 在面向对象编程中,对象是类的实例。类是定义/模板,对象是根据模板创建的实体。

【易错点】 类是抽象的,对象是具体的,两者的因果关系不能倒置。

4 题(判断题

在C++类的定义中,使用 static 修饰符定义的静态成员被该类的所有对象共享。

正确答案正确

解析详情

【答案】正确

【考点】C++ 类静态成员

【解析】 使用 static 修饰的静态成员属于整个类,由该类的所有实例共享同一份内存空间,不属于某个特定对象。

【易错点】 静态成员变量必须在类外进行定义和初始化(除整型常量外)。

5 题(判断题

在 C++ 类的定义中,可以定义初始化函数或运算符函数等。

正确答案正确

解析详情

【答案】正确

【考点】C++ 类定义

【解析】 C++ 类中可以定义构造函数(初始化函数)、析构函数、普通成员函数以及重载运算符函数。

【易错点】 构造函数没有返回类型,且函数名必须与类名相同。

6 题(判断题

DFS 是深度优先算法的英文简写。

正确答案正确

解析详情

【答案】正确

【考点】搜索算法基础

【解析】 DFS 是 Depth First Search 的缩写,中文翻译为深度优先搜索。

【易错点】 准确记忆常用算法名词缩写(DFS, BFS)。

7 题(判断题

哈夫曼编码是一种有损压缩算法。

正确答案错误

解析详情

【答案】错误

【考点】数据压缩算法分类

【解析】 哈夫曼编码是一种无损压缩算法。通过变长编码对数据进行压缩,解码后可完全还原,无信息丢失。

【易错点】 无损压缩常用于文本,有损压缩(如 JPEG)用于对精度要求不高的音视频。

8 题(判断题

有些算法或数据结构在C/C++语言中使用指针实现,一个典型的例子就是链表。因此,链表这一数据结构在C/C++语言中只能使用指针来实现。

正确答案错误

解析详情

【答案】错误

【考点】数据结构物理实现

【解析】 链表可以通过指针实现,也可以通过数组(静态链表)模拟指针关系来实现。

【易错点】 逻辑结构(链表)不与特定物理实现(指针)唯一绑定。

9 题(判断题

如果节点数为N,广度搜索算法的最差时间复杂度为O(N)O(N)

正确答案正确

解析详情

【答案】正确

【考点】广度优先搜索(BFS)复杂度

【解析】 在包含 N 个节点的图中,BFS 需访问每个节点一次,最坏情况下时间复杂度为 O(N)。

【易错点】 若考虑边数 E,完整复杂度通常表示为 O(N + E)。

10 题(判断题

二叉搜索树的左右子树也是二叉搜索树。

正确答案正确

解析详情

【答案】正确

【考点】二叉搜索树(BST)定义

【解析】 二叉搜索树具有递归性质:其左子树和右子树也必须分别为二叉搜索树。

【易错点】 这是 BST 的核心定义,必须递归满足。