#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) }}
- 正确
- 错误