#1553. 初赛模拟卷 B(3)

初赛模拟卷 B(3)

初赛模拟卷 B(3)

第 1 题(单选)

关于 C++ 中类的描述,正确的是()。

{{ select(1) }}

  • 如果类没有用户声明的构造函数,编译器会隐式声明一个默认构造函数
  • 类的析构函数可以被重载,一个类可以有多个析构函数
  • 类中的所有成员都必须声明为 public
  • 类和结构体在 C++ 中没有区别,包括默认访问权限也相同

第 2 题(单选)

在二叉搜索树(BST)中,若中序遍历序列为 {1, 2, 3, 4, 5},且先序遍历的第一个元素为 3,下列说法正确的是()。

{{ select(2) }}

  • 3 是根节点,2 是 3 的左子节点,4 是 3 的右子节点
  • 该 BST 是平衡的
  • 3 是根节点,1 是 3 的左子树中的最左节点
  • 5 是 3 的右子节点

第 3 题(单选)

格雷编码中,3 位格雷编码 101 之后的下一个编码不可能是()。

{{ select(3) }}

  • 100
  • 111
  • 001
  • 000

第 4 题(单选)

在 C++ 中,如果一个类没有定义任何构造函数,编译器()。

{{ select(4) }}

  • 会生成一个默认的无参构造函数
  • 不会生成任何构造函数
  • 只生成拷贝构造函数
  • 会生成一个带参构造函数

第 5 题(单选)

关于树的遍历说法,正确的是()。

{{ select(5) }}

  • 前序遍历结果是根节点在最后
  • 中序遍历结果一定是升序
  • 后序遍历的最后一个是根节点
  • 层序遍历必须使用递归

第 6 题(单选)

下列关于 C++ 中多态的说法,正确的是()。

{{ select(6) }}

  • 只有通过指针或引用调用虚函数才能体现运行时多态
  • 通过对象直接调用虚函数也能体现多态
  • 多态只能通过继承实现
  • 虚函数必须用 override 关键字

第 7 题(单选)

下列关于哈夫曼树的说法,正确的是()。

{{ select(7) }}

  • 哈夫曼树是带权路径长度(WPL)最小的二叉树
  • 哈夫曼树一定是完全二叉树
  • 哈夫曼树中可能存在度为1的节点
  • 哈夫曼树中权值较大的节点离根较远

第 8 题(单选)

下面关于 C++ 类继承的说法,正确的是()。

{{ select(8) }}

  • C++ 只支持单继承
  • C++ 只支持多继承
  • C++ 同时支持单继承和多继承
  • C++ 不支持继承

第 9 题(单选)

已知 3 位格雷编码的顺序是从 000 到 100,按照此顺序,001 和 011 之间相差()位不同。

{{ select(9) }}

  • 1
  • 2
  • 3
  • 4

第 10 题(单选)

在 C++ 中,对类的成员变量进行“数据隐藏”通常是通过()实现。

{{ select(10) }}

  • public
  • private
  • virtual
  • static

第 11 题(单选)

下列选项中,哪一个不属于多态的表现形式?()

{{ select(11) }}

  • 函数重载
  • 运算符重载
  • 虚函数
  • 类模板

第 12 题(单选)

在 C++ 中,下列关于静态成员函数的说法,正确的是()。

{{ select(12) }}

  • 静态成员函数可以访问非静态成员变量
  • 静态成员函数可以通过 this 指针调用
  • 静态成员函数可以不通过对象直接调用
  • 静态成员函数必须是 public 的

第 13 题(单选)

下列关于 C++ 中 new 和 delete 的说法,正确的是()。

{{ select(13) }}

  • new 分配的内存可以使用 free 释放
  • new 和 malloc 完全等价
  • new 会调用构造函数,delete 会调用析构函数
  • new 只能分配单个对象

第 14 题(单选)

下列关于格雷编码的说法,正确的是()。

{{ select(14) }}

  • 格雷编码不是唯一的
  • 所有 n 位格雷编码的长度一定是 2^n
  • 格雷编码的相邻编码保证仅有一位不同
  • 以上都对

第 15 题(单选)

在 C++ 中,关于构造函数的初始化列表,下列说法正确的是()。

{{ select(15) }}

  • 必须在构造函数体内赋值
  • 主要用于初始化 const 成员变量和引用成员变量
  • 使用初始化列表没有性能优势
  • 初始化列表的初始化顺序与列表顺序一致

第 16 题(单选)

下面关于递归和迭代的说法,正确的是()。

{{ select(16) }}

  • 递归一定比迭代效率高
  • 所有递归算法都可以转化为迭代算法
  • 迭代一定比递归更容易理解
  • 递归算法一定占用更少内存

第 17 题(单选)

哈夫曼编码的构造过程中,每次合并后的新节点的权值是()。

{{ select(17) }}

  • 被合并的两个节点权值之和
  • 被合并的两个节点权值之差
  • 被合并的两个节点权值之积
  • 被合并的两个节点权值最大值

第 18 题(单选)

对于深度优先搜索和广度优先搜索,下列说法正确的是()。

{{ select(18) }}

  • DFS 使用队列辅助,BFS 使用栈辅助
  • DFS 和 BFS 都能处理有向图和无向图
  • DFS 总是比 BFS 占用更少内存
  • BFS 一定比 DFS 快

第 19 题(单选)

下列关于 C++ 中 sizeof 运算符的说法,正确的是()。

{{ select(19) }}

  • sizeof 是一个函数
  • sizeof 在编译时求值
  • sizeof 只能用于数据类型
  • sizeof 在运行时求值

第 20 题(单选)

在 C++ 中,若要创建一个对象并使其在堆上分配内存,应该使用()。

{{ select(20) }}

  • malloc
  • new
  • alloc
  • create

第 21 题(单选)

下列关于哈夫曼树和哈夫曼编码的说法,正确的是()。

{{ select(21) }}

  • 哈夫曼树不一定是二叉树
  • 哈夫曼编码是一种前缀编码
  • 哈夫曼树的带权路径长度一定最大
  • 哈夫曼编码是固定长度的

第 22 题(单选)

在 C++ 中,关于析构函数的说法,正确的是()。

{{ select(22) }}

  • 析构函数可以有参数
  • 析构函数可以被重载
  • 析构函数在对象销毁时自动调用
  • 析构函数必须显式调用

第 23 题(单选)

下列关于贪心算法的说法,正确的是()。

{{ select(23) }}

  • 贪心算法一定能够得到全局最优解
  • 贪心算法通常需要证明最优子结构
  • 贪心算法适用于具有最优子结构和重叠子问题的问题
  • 贪心算法每一步都选择当前最优解,希望得到全局最优解

第 24 题(单选)

关于 C++ 中默认构造函数,下列说法正确的是()。

{{ select(24) }}

  • 如果用户定义了任何构造函数,编译器就不再生成默认构造函数
  • 每个类都必须有默认构造函数
  • 默认构造函数不能有参数
  • 默认构造函数只能由编译器生成

第 25 题(单选)

下面有关递归的说法,正确的是()。

{{ select(25) }}

  • 递归必须要有基值条件
  • 递归的效率总是高于循环
  • 递归函数不需要调用自身
  • 递归不能用于解决问题

第 26 题(单选)

若要对一个实际问题使用广度优先搜索,往往需要()。

{{ select(26) }}

  • 使用栈来存储状态
  • 使用优先队列
  • 使用队列来存储状态
  • 使用数组记录所有状态

第 27 题(单选)

在 C++ 中,下列哪一种访问说明符允许类成员在任何位置被访问()。

{{ select(27) }}

  • private
  • protected
  • public
  • 默认访问说明符

第 28 题(单选)

关于树的深度和高度,下列说法正确的是()。

{{ select(28) }}

  • 深度和高度通常可以互换
  • 节点的高度是从该节点向下到最远叶子节点的边数
  • 根节点的深度为 0
  • 以上都对

第 29 题(单选)

二叉排序树(BST)中序遍历的结果是()。

{{ select(29) }}

  • 降序序列
  • 升序序列
  • 乱序序列
  • 与插入顺序相关

第 30 题(多选)

关于循环队列,下列哪些说法是正确的?()

{{ multiselect(30) }}

  • 循环队列解决了顺序队列的“假溢出”问题
  • 循环队列通常使用一个空闲位置来区分队空和队满
  • 循环队列的入队和出队操作时间复杂度为 O(1)
  • 循环队列只能使用数组实现

第 31 题(多选)

关于二叉树的顺序存储,下列哪些说法是正确的?()

{{ multiselect(31) }}

  • 适用于完全二叉树
  • 使用数组存储
  • 对于不完全二叉树,存储时会浪费空间
  • 可以快速找到某个节点的父节点和子节点

第 32 题(多选)

关于完全二叉树,下列哪些说法是正确的?()

{{ multiselect(32) }}

  • 只有最后一层节点可能不满
  • 最后一层节点尽量靠左排列
  • 可以用数组进行顺序存储
  • 所有叶子节点都在同一层

第 33 题(多选)

关于队列的基本操作,下列哪些是正确的?()

{{ multiselect(33) }}

  • enqueue(入队)
  • dequeue(出队)
  • isEmpty(判空)
  • getSize(获取大小)

第 34 题(多选)

关于二叉树的链式存储结构,下列哪些说法是正确的?()

{{ multiselect(34) }}

  • 每个节点包含两个指针域
  • 可以方便地进行各种遍历
  • 存储 n 个节点需要 2n 个指针域
  • 空指针域的数量为 n+1

第 35 题(多选)

关于二叉排序树(BST),下列哪些说法是正确的?()

{{ multiselect(35) }}

  • 左子树中所有节点的值均小于根节点的值
  • 中序遍历 BST 可以得到一个升序序列
  • BST 的查找效率与树的高度有关
  • 删除 BST 中的节点时,如果被删除节点有左右子树,可以用左子树的最大节点来替换

第 36 题(多选)

关于二叉排序树的查找,下列说法正确的有()。

{{ multiselect(36) }}

  • 平均查找长度与树的形状有关
  • 最坏情况下查找效率退化为 O(n)
  • 二叉排序树查找效率一定高于顺序查找
  • 插入和删除操作会改变树的形状

第 37 题(多选)

下列哪些是动态规划的特点?()

{{ multiselect(37) }}

  • 最优子结构
  • 贪心选择
  • 重叠子问题
  • 自底向上或自顶向下求解

第 38 题(多选)

下列哪些算法可以用动态规划求解?()

{{ multiselect(38) }}

  • 背包问题
  • 最长公共子序列
  • 最短路径(Dijkstra 算法)
  • 斐波那契数列

第 39 题(多选)

下列哪些问题是典型的动态规划问题?()

{{ multiselect(39) }}

  • 爬楼梯问题
  • 最长上升子序列
  • 最短路径(无权图)
  • 0-1 背包问题

第 40 题(单选)

在 C++ 中,关于虚析构函数的说法正确的是()。

{{ select(40) }}

  • 只有基类的析构函数必须声明为虚函数
  • 所有类的析构函数必须声明为虚函数
  • 虚析构函数确保了通过基类指针删除派生类对象时,会调用派生类的析构函数
  • 虚析构函数会导致内存泄露

第 41 题(单选)

下面关于面向对象编程的“多态”说法,错误的是()。

{{ select(41) }}

  • 多态分为编译时多态和运行时多态
  • 函数重载属于编译时多态
  • 虚函数属于运行时多态
  • 多态只能通过继承实现

第 42 题(单选)

在 C++ 中,若要在派生类中重写基类的一个成员函数,需要在基类中将该函数声明为()。

{{ select(42) }}

  • virtual
  • static
  • const
  • inline

第 43 题(单选)

关于哈夫曼树的构造过程,下列说法正确的是()。

{{ select(43) }}

  • 每次取两个权值最大的节点合并
  • 每次取两个权值最小的节点合并
  • 权值小的节点离根更近
  • 哈夫曼树不一定是二叉树

第 44 题(单选)

在 C++ 中,下列关于构造函数的说法正确的是()。

{{ select(44) }}

  • 构造函数可以有返回值类型
  • 构造函数必须与类名相同
  • 一个类只能有一个构造函数
  • 构造函数可以被继承

第 45 题(判断)

为了实现一个队列,使其出队操作的时间复杂度为 O(1) 并且避免数组删除首元素的 O(n) 问题,常见有效的方法是使用环形数组。()

{{ select(45) }}

  • 正确
  • 错误

第 46 题(判断)

对一棵二叉排序树进行中序遍历,可以得到一个递增的有序序列。()

{{ select(46) }}

  • 正确
  • 错误

第 47 题(判断)

若所有字符出现频率相同,则哈夫曼编码一定会得到完全二叉树。()

{{ select(47) }}

  • 正确
  • 错误

第 48 题(判断)

在 C++ 中使用一维数组 vector tree 存储按层遍历的完全二叉树时,若根节点存储在 tree[0],则对于任意非空节点 tree[i],其右孩子(如果存在)必然位于 tree[2*i+2]。 ()

{{ select(48) }}

  • 正确
  • 错误

第 49 题(判断)

在 C++ 中使用栈来非递归地实现二叉树的前序遍历时,为了保证遍历顺序正确,在处理完当前结点后,应该先将该结点的左孩子压入栈中,然后再将右孩子压入栈中。()

{{ select(49) }}

  • 正确
  • 错误