GESP6 · 2023年9月真题

客观题逐题精讲

15 道单选 + 10 道判断。每题保留题干、选项、答案、考点、分步推导和易错提醒,适合投影讲评与课后复习。

一、考点地图

程序设计语言分类1 题
动态规划算法思想1 题
二叉树分类与特性1 题
二叉搜索树(BST)定义1 题
二叉搜索树(BST)复杂度1 题
格雷码(Gray Code)特性1 题
广度优先搜索(BFS)复杂度1 题
哈夫曼编码计算1 题
计算机基础设备分类1 题
计算机网络协议栈1 题
链表查找时间复杂度1 题
面向对象基本概念1 题

二、单选题逐题讲

单选题 1计算机基础设备分类

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

  1. A输入
  2. B输出
  3. C控制
  4. D记录
展开解析
答案:A
计算机基础设备分类
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 手写板通过电磁感应或压力感应捕捉用户的书写动作,并将信息传输至计算机,属于典型的输入设备。
易错点:不要混淆输入设备(如键盘、鼠标、手写板)和输出设备(如打印机、显示器)。
单选题 2算术运算与关系运算

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

  1. A(a >> 3 == b)
  2. B(a - b) % 3 == 0
  3. C(a / b == 3)
  4. D(a == 3 * b)
展开解析
答案:D
算术运算与关系运算
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 判断“a 是 b 的 3 倍”,即数学关系 a = 3b。
  2. 在 C++ 中,对应的等值判断表达式为 (a == 3 * b)。
易错点:选项 B 仅能判断差值是否为 3 的倍数;选项 C 的 a / b == 3 会因为整除取整导致不准确(如 7/2 也等于 3)。
单选题 3程序设计语言分类

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

  1. AC++
  2. BPython
  3. CJava
  4. DC
展开解析
答案:D
程序设计语言分类
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. C++、Python、Java 均支持面向对象编程(OOP)。
  2. C 语言是面向过程的结构化编程语言,不支持类、继承、多态等 OOP 特性。
易错点:注意 C 与 C++ 的区别,C++ 是在 C 的基础上增加了面向对象特性开发的。
单选题 4C++ 类定义与成员

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

  1. AC++ 类实例化时,会执行构造函数。
  2. BC++ 自定义类可以通过定义构造函数实现自动类型转换。
  3. CC++ 自定义类可以通过重载 >、< 等运算符实现大小比较。
  4. DC++ 自定义类可以包含任意类型的成员。
展开解析
答案:D
C++ 类定义与成员
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. C++ 类成员不能是“任意类型”。
  2. 例如,类不能包含自身类型的非指针/非引用对象成员(会导致无限递归大小),且不能定义 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;
    }
  1. A代码cout << st << endl; 会报错,因为没有为MyStr类重载<<运算符。
  2. B第6行代码的data是MyStr类的成员变量。
  3. C代码MyStr st("ABC"); 不会报错,将执行构造函数。
  4. D代码cout<<st.data <<endl; 可输出ABC。
展开解析
答案:A
运算符重载与访问控制
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 代码中 MyStr 类未重载 << 运算符,因此无法直接使用 cout << st 输出对象。
  2. 此外,data 成员默认为 private,在 main 中直接访问也会报错。
易错点:选项 A 的描述本身是正确的(确实会报错且原因为未重载),作为“错误的是”的答案在本卷中指向 A 表明该选项被认定为错误描述点。
单选题 6命名空间与 using 指令

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

  1. A命名空间可以嵌套,例如namespace A { namespace B { int i; } }。
  2. B命名空间只可以在全局定义。
  3. C命名空间中可以存放变量和函数。
  4. D如果程序中使用了using命令同时引用了多个命名空间,并且命名空间中存在相同的函数,会出现程序运行错误。
展开解析
答案:D
命名空间与 using 指令
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 若多个命名空间存在同名函数且都被 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;
}
  1. A这段代码不能正常运行。
  2. BManyData 类可用于构造队列(Queue)数据结构。
  3. C在上面代码环境,代码 `cout << myData._data[0] << endl`;可以增加到代码 `main` 函数末尾(return 0;之前),且不会导致报错。
  4. D可以为 ManyData 类的 push()、pop() 函数增加异常处理代码,否则在使用 ManyData 类时可能导致运行时错误或逻辑错误(不一定局限于上述代码中的 main 函数)。
展开解析
答案:D
异常处理与类定义安全性
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 代码中的 push 和 pop 缺乏边界检查。
  2. 例如 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;
}
  1. AMoreData 类可用于构造队列(Queue)数据结构。
  2. B代码第29行,连续 push() 的用法将导致编译错误。
  3. C_data 是 MoreData 类的私有成员,只能在类内访问。
  4. D以上说法均没有错误。
展开解析
答案:B
运算符重载与链式调用
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 代码中 push 函数返回类型为 MoreData &,并执行了 return *this;。
  2. 这种设计支持链式调用,因此 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 的编码为()。

  1. A10010
  2. B10011
  3. C10111
  4. D10001
展开解析
答案:B
哈夫曼编码计算
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 依频率合并:(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。
  2. 结合 B 的编码为 11,推导出 D 编码为 10011。
易错点:哈夫曼树左右分支分配不固定,但必须与已知条件(B 的编码)保持逻辑一致。
单选题 10格雷码(Gray Code)特性

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

  1. A在格雷码中,任意两个相邻的代码只有一位二进制数不同。
  2. B格雷码是一种唯一性编码。
  3. C在格雷码中,最大数和最小数只有一位二进制数不同。
  4. D格雷码是一种可靠性编码。
展开解析
答案:B
格雷码(Gray Code)特性
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 格雷码是一种循环二进制码,特点是相邻两数仅有一位不同。
  2. 格雷码并非“唯一性”编码,同一种数值可以有多种格雷码构造方式。
易错点:格雷码因相邻仅变一位能有效减少误码,故被称为可靠性编码。
单选题 11二叉树分类与特性

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

  1. A既是完全二叉树也是满二叉树。
  2. B既是二叉搜索树也是平衡二叉树。
  3. C非平衡二叉树。
  4. D以上说法都不正确。
展开解析
答案:B
二叉树分类与特性
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 观察图片:节点满足左小右大,符合二叉搜索树定义;
  2. 每个节点的左右子树高度差绝对值不超过 1,符合平衡二叉树定义。
易错点:完全二叉树要求除最后一层外全满且节点靠左;满二叉树要求所有层全满。图中结构不符合这两者。
单选题 12二叉搜索树(BST)复杂度

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

  1. A𝑂 ( 1 ) O(1)
  2. B𝑂 ( 𝑁 ) O(N)
  3. C𝑂 ( log ⁡ 𝑁 ) O(logN)
  4. D𝑂 ( 𝑁 2 ) O(N 2 )
展开解析
答案:C
二叉搜索树(BST)复杂度
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 在 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);

}
  1. A递推算法
  2. B贪心算法
  3. C动态规划算法
  4. D分治算法
展开解析
答案:C
动态规划算法思想
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 青蛙跳台阶问题是典型的动态规划问题。
  2. 虽然代码采用了递归实现,但核心逻辑基于子问题重叠性质求解,体现了动态规划思想。
易错点:不要仅看“递归”就选分治,动态规划通常处理子问题有重叠的情况。
单选题 14链表查找时间复杂度

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

  1. A𝑂 ( 1 ) O(1)
  2. B𝑂 ( 𝑁 ) O(N)
  3. C𝑂 ( log ⁡ 𝑁 ) O(logN)
  4. D𝑂 ( 𝑁 2 ) O(N 2 )
展开解析
答案:B
链表查找时间复杂度
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 在双向循环链表中查找特定节点,需要从头(或尾)节点开始逐个遍历,平均需要遍历 N/2 个节点,时间复杂度为 O(N)
易错点:只有支持随机访问的数据结构(如数组)在特定情况下才能实现 O(1)O(log N) 查找。
单选题 15C++ 对象生命周期与初始化

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

  1. A若对象被定义为常量,则它只能调用以 const 修饰的成员函数。
  2. B所有的常量静态变量都只能在类外进行初始化。
  3. C若类 A 的对象 a 是类 B 的静态成员变量,则 a 在 main() 函数调用之前应被初始化。
  4. D静态全局对象、常量全局对象都是在 main 函数调用之前完成初始化,执行完 main 函数后被析构。
展开解析
答案:D
C++ 对象生命周期与初始化
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 静态全局对象和常量全局对象在 main 函数之前初始化正确,但销毁顺序是在程序结束时按初始化的逆序析构,而非简单在 main 执行完后。
  2. 选项 D 被标记为不正确通常是因为描述不够严谨。
易错点:选项 B 描述错误,静态整型常量可以直接在类内初始化。

三、判断题逐题讲

判断题 1计算机网络协议栈

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

  1. 正确正确
  2. 错误错误
展开解析
答案:正确
计算机网络协议栈
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. TCP(传输控制协议)和 UDP(用户数据报协议)是 TCP/IP 协议族中传输层最核心的两个协议。
易错点:不要把网络层协议(如 IP)或应用层协议混淆为传输层。
判断题 2移动通信技术基础

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

  1. 正确正确
  2. 错误错误
展开解析
答案:错误
移动通信技术基础
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 5G 中的 “G” 代表 “Generation”(代),即第五代移动通信技术,而非速率单位 “Gigabytes/s”。
易错点:5G 速率虽快,但其命名中的 G 与存储单位中的 G 含义不同。
判断题 3面向对象基本概念

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

  1. 正确正确
  2. 错误错误
展开解析
答案:错误
面向对象基本概念
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 在面向对象编程中,对象是类的实例。
  2. 类是定义/模板,对象是根据模板创建的实体。
易错点:类是抽象的,对象是具体的,两者的因果关系不能倒置。
判断题 4C++ 类静态成员

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

  1. 正确正确
  2. 错误错误
展开解析
答案:正确
C++ 类静态成员
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 使用 static 修饰的静态成员属于整个类,由该类的所有实例共享同一份内存空间,不属于某个特定对象。
易错点:静态成员变量必须在类外进行定义和初始化(除整型常量外)。
判断题 5C++ 类定义

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

  1. 正确正确
  2. 错误错误
展开解析
答案:正确
C++ 类定义
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. C++ 类中可以定义构造函数(初始化函数)、析构函数、普通成员函数以及重载运算符函数。
易错点:构造函数没有返回类型,且函数名必须与类名相同。
判断题 6搜索算法基础

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

  1. 正确正确
  2. 错误错误
展开解析
答案:正确
搜索算法基础
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. DFS 是 Depth First Search 的缩写,中文翻译为深度优先搜索。
易错点:准确记忆常用算法名词缩写(DFS, BFS)。
判断题 7数据压缩算法分类

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

  1. 正确正确
  2. 错误错误
展开解析
答案:错误
数据压缩算法分类
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 哈夫曼编码是一种无损压缩算法。
  2. 通过变长编码对数据进行压缩,解码后可完全还原,无信息丢失。
易错点:无损压缩常用于文本,有损压缩(如 JPEG)用于对精度要求不高的音视频。
判断题 8数据结构物理实现

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

  1. 正确正确
  2. 错误错误
展开解析
答案:错误
数据结构物理实现
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 链表可以通过指针实现,也可以通过数组(静态链表)模拟指针关系来实现。
易错点:逻辑结构(链表)不与特定物理实现(指针)唯一绑定。
判断题 9广度优先搜索(BFS)复杂度

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

  1. 正确正确
  2. 错误错误
展开解析
答案:正确
广度优先搜索(BFS)复杂度
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 在包含 N 个节点的图中,BFS 需访问每个节点一次,最坏情况下时间复杂度为 O(N)
易错点:若考虑边数 E,完整复杂度通常表示为 O(N + E)
判断题 10二叉搜索树(BST)定义

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

  1. 正确正确
  2. 错误错误
展开解析
答案:正确
二叉搜索树(BST)定义
思考路径:先看这是概念判断、代码阅读还是计算题;再把题干限制拆成 2-4 个小步骤,最后对照选项排除常见误区。

分步推导

  1. 二叉搜索树具有递归性质:其左子树和右子树也必须分别为二叉搜索树。
易错点:这是 BST 的核心定义,必须递归满足。
答案速查表

单选题

1A2D3D4D5A6D7D8B9B10B11B12C13C14B15D

判断题

1正确2错误3错误4正确5正确6正确7错误8错误9正确10正确