#12667. GESP 202509 C++ 七级
GESP 202509 C++ 七级
GESP 202509 C++ 七级
一、 单项选择题(共 15 题,每题 2 分,共计 30 分)
- [2 分] 已知小写字母
b的 ASCII 码为 98,下列 C++ 代码的输出结果是( )。
#include <iostream>
using namespace std;
int main() {
char a = 'b' + 1;
cout << a;
return 0;
}
( {{ select(1) }} )
- b
- c
- 98
- 99
- [2 分] 已知
a为int类型变量,p为int *类型变量,下列表达式不合法的是( )。 ( {{ select(2) }} )
a * ap * pa && ap && p
- [2 分] 下列关于 C++ 类的说法,错误的是( )。 ( {{ select(3) }} )
- 如果一个类包含纯虚函数,则它不能包含成员变量。
- 如果一个类包含纯虚函数,则不能用它定义对象。
- 派生类对象占用的内存总是不小于基类对象。
- 派生类可以实现基类的虚函数。
- [2 分] 已知数组
a的定义int a[10] = {-1};,下列说法不正确的是( )。 ( {{ select(4) }} )
- 数组
a至少占用 10 个int大小的内存,一般为 40 个字节。 - 数组
a的所有元素均被初始化为 -1。 - 语句
a[-1] = 0;不会产生编译错误,但会导致难以预测的运行结果。 - 语句
a[13] = 0;不会产生编译错误,但会导致难以预测的运行结果。
- [2 分] 一棵完全二叉树有 165 个结点,则叶结点有多少个?( ) ( {{ select(5) }} )
- 38
- 82
- 83
- 84
- [2 分] 下列关于二叉树的说法,错误的是( )。 ( {{ select(6) }} )
- 二叉排序树的中序遍历顺序与元素排序的顺序是相同的。
- 自平衡二叉查找树(AVL 树)是一种二叉排序树。
- 个元素的二叉排序树,其高度一定为 。
- 任意的森林,都可以映射为一颗二叉树进行表达和存储。
- [2 分] 下列关于树和图的说法,错误的是( )。 ( {{ select(7) }} )
- 保留树的所有节点,并把树的每个节点指向其父节点,则可以将树转换为一个有向强连通图。
- 保留树的所有节点,并把树的每个节点指向其子节点,则可以将树转换为一个有向无环图。
- 每个连通图都存在生成树。
- 每个存在生成树的有向图,都一定是强连通的。
- [2 分] 对一个包含 个顶点、 条边的图,执行广度优先搜索,其最优时间复杂度是( )。 ( {{ select(8) }} )
- [2 分] 以下哪个方案不能合理解决或缓解哈希表冲突( )。 ( {{ select(9) }} )
- 用新元素覆盖发生冲突的哈希表项。
- 在每个哈希表项处,使用单链表管理该表项的冲突元素。
- 建立额外的单链表,用来管理所有发生冲突的元素。
- 使用不同的哈希函数再建立一个哈希表,用来管理所有发生冲突的元素。
- [2 分] 以下关于贪心法和动态规划的说法中,错误的是( )。 ( {{ select(10) }} )
- 对特定的问题,贪心法不一定适用。
- 当特定的问题适用贪心法时,通常比动态规划的时间复杂度更低。
- 对很多问题,递推实现和递归实现动态规划方法的时间复杂度相当。
- 采用动态规划的算法一定具有多项式时间复杂度。
- [2 分] 下面程序的输出为( )。
#include <iostream>
using namespace std;
int fib(int n) {
if (n <= 1) return 1;
return fib(n - 1) + fib(n - 2);
}
int main() {
cout << fib(6) << endl;
return 0;
}
( {{ select(11) }} )
- 8
- 13
- 21
- 无法正常运行。
- [2 分] 下面程序的时间复杂度为( )。
int rec_fib[MAX_N];
int fib(int n) {
if (n <= 1) return n;
if (rec_fib[n] != 0) return rec_fib[n];
return rec_fib[n] = fib(n - 1) + fib(n - 2);
}
( {{ select(12) }} )
- [2 分] 下面
init_sieve函数的时间复杂度为( )。
int sieve[MAX_N];
void init_sieve(int n) {
for (int i = 1; i <= n; i++) sieve[i] = i;
for (int i = 2; i <= n; i++)
for (int j = i; j <= n; j += i)
sieve[j]--;
}
( {{ select(13) }} )
- [2 分] 下面
count_triple函数的时间复杂度为( )。
int gcd(int m, int n) {
if (m == 0) return n;
return gcd(n % m, m);
}
int count_triple(int n) {
int cnt = 0;
for (int v = 1; v * v * v * 4 <= n; v++)
for (int u = v + 1; u * (u + v) * 2 <= n; u += 2)
if (gcd(u, v) == 1) {
int a = u * u - v * v;
int b = 2 * u * v;
int c = u * u + v * v;
cnt += n / (a + b + c);
}
return cnt;
}
( {{ select(14) }} )
- [2 分] 下列选项中,哪个不可能是下图的深度优先遍历序列( )。 ( {{ select(15) }} )
- 2, 3, 5, 7, 8, 9, 6, 4, 1
- 5, 7, 8, 9, 1, 2, 4, 3, 6
- 6, 8, 9, 5, 7, 1, 2, 3, 4
- 8, 5, 7, 9, 1, 2, 3, 6, 4
二、 判断题(每题 2 分,共 20 分)
- [2 分] C++ 语言中,表达式
9 && 12的结果类型为int,值为 8。 ( {{ select(16) }} )
- 正确
- 错误
- [2 分] C++ 语言中,在有
int a[10];定义的范围内,通过表达式a[-1]进行访问将导致编译错误。 ( {{ select(17) }} )
- 正确
- 错误
- [2 分] 选择排序一般是不稳定的。 ( {{ select(18) }} )
- 正确
- 错误
- [2 分] C++ 语言中,
float和int类型一般都是 4 字节,因此float类型能够表达不同的浮点数值的数量,与int类型能够表达不同的整数值的数量是相同的。 ( {{ select(19) }} )
- 正确
- 错误
- [2 分] 使用
math.h或cmath头文件中的对数函数,表达式log(256)的结果类型为double,值约为 8.0。 ( {{ select(20) }} )
- 正确
- 错误
- [2 分] 一棵有 个结点的完全二叉树,则树的深度为 。 ( {{ select(21) }} )
- 正确
- 错误
- [2 分] 邻接表和邻接矩阵都是图的存储形式。通常,使用邻接表比使用邻接矩阵的时间复杂度更低。 ( {{ select(22) }} )
- 正确
- 错误
- [2 分] C++ 语言中,类的构造函数可以声明为私有(private)。 ( {{ select(23) }} )
- 正确
- 错误
- [2 分] 泛洪算法的递归实现容易造成溢出,因此大的二维地图算法中,一般使用广度优先搜索实现。 ( {{ select(24) }} )
- 正确
- 错误
- [2 分] 很多游戏中为玩家设置多种可供学习的技能,要学习特定技能又往往需要先学习 1 个或以上的技能。尽管这样的技能间依赖关系被玩家称为“技能树”,但它并不一定是树,更可能是有向无环图。 ( {{ select(25) }} )
- 正确
- 错误