GESP 2025年9月_C++七级试卷

从PDF导入:GESP 2025年9月_C++七级试卷

C++ 180分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
已知小写字母b的ASCII码为98,下列C++代码的输出结果是( )。

#include
using namespace std;
int main() {
char a = 'b' + 1;
cout << a;
return 0;
}

A. b
B. c
C. 98
D. 99
第2题 中级 2.0分 单选
已知a为int类型变量,p为int*类型变量,下列表达式不符合语法的是( )。
A. a*a
B. p*p
C. a&&a
D. p&&p
第3题 中级 2.0分 单选
下列关于C++类的说法,错误的是( )。
A. 如果一个类包含纯虚函数,则它不能包含成员变量。
B. 如果一个类包含纯虚函数,则不能用它定义对象。
C. 派生类对象占用的内存总是不小于基类对象。
D. 派生类可以不实现基类的虚函数。
第4题 中级 2.0分 单选
已知数组a的定义int a[10]={-1};,下列说法不正确的是( )。
A. 数组a至少占用10个int大小的内存,一般为40个字节。
B. 数组a的所有元素均被初始化为-1。
C. 语句a[-1]=0;不会产生编译错误,但会导致难以预测的运行结果。
D. 语句a[13]=0;不会产生编译错误,但会导致难以预测的运行结果。
第5题 中级 2.0分 单选
一棵完全二叉树有165个结点,则叶结点有多少个?( )
A. 38
B. 82
C. 83
D. 84
第6题 中级 2.0分 单选
下列关于二叉树的说法,错误的是( )。
A. 二叉排序树的中序遍历顺序与元素排序的顺序是相同的。
B. 自平衡二叉查找树(AVL树)是一种二叉排序树。
C. n个元素的二叉排序树,其高一定为⌊log₂n⌋。
D. 任意的森林,都可以映射为一颗二叉树进行表达和存储。
第7题 中级 2.0分 单选
下列关于树和图的说法,错误的是( )。
A. 保留树的所有节点,并把树的每个节点指向其父节点,则可以将树转换为一个有向弱连通图。
B. 保留树的所有节点,并把树的每个节点指向其子节点,则可以将树转换为一个有向无环图。
C. 每个连通图都存在生成树。
D. 每个存在生成树的有向图,都一定是强连通的。
第8题 中级 2.0分 单选
对一个包含V个顶点、E条边的图,执行广度优先搜索,其最优时间复杂度是( )。
A. O(V+E)
B. O(V)
C. O(E)
D. O(V²)
第9题 中级 2.0分 单选
以下哪个方案不能合理解决或缓解哈希表冲突( )。
A. 用新元素覆盖发生冲突的哈希表项。
B. 在每个哈希表项处,使用单链表管理该表项的冲突元素。
C. 建立额外的单链表,用来管理所有发生冲突的元素。
D. 使用不同的哈希函数再建立一个哈希表,用来管理所有发生冲突的元素。
第10题 中级 2.0分 单选
以下关于贪心法和动态规划的说法中,错误的是( )。
A. 对特定的问题,贪心法不一定适用。
B. 当特定的问题适用贪心法时,通常比动态规划的时间复杂度更低。
C. 对很多问题,递推实现和递归实现动态规划方法的时间复杂度相当。
D. 采用动态规划的算法一定具有多项式时间复杂度。
第11题 中级 2.0分 单选
下面程序的输出为( )。

#include
using namespace std;
int rec_fib[100];
int fib(int n) {
if (n <= 1)
return n;
if (rec_fib[n] != 0)
return rec_fib[n];
rec_fib[n] = fib(n - 1) + fib(n - 2);
return rec_fib[n];
}
int main() {
cout << fib(7) << endl;
return 0;
}

A. 8
B. 13
C. 21
D. 无法正常结束。
第12题 中级 2.0分 单选
下面程序的时间复杂度为( )。

int rec_fib[MAX_N];
int fib(int n) {
if (n <= 1)
return n;
if (rec_fib[n] != 0)
return rec_fib[n];
return fib(n - 1) + fib(n - 2);
}

A. O(n)
B. O(2^n)
C. O(n²)
D. O(1)
第13题 中级 2.0分 单选
下面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]--;
}

A. O(n)
B. O(nloglogn)
C. O(nlogn)
D. O(n²)
第14题 中级 2.0分 单选
下面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 i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (gcd(i, j) == 1) cnt++;
return cnt;
}

A. O(n²)
B. O(n²logn)
C. O(nlogn)
D. O(n)
第15题 中级 2.0分 单选
下列选项中,哪个不可能是下图的深度优先遍历序列( )。

A. 2,3,5,7,8,9,6,4,1
B. 5,7,8,9,1,2,4,3,6
C. 6,8,9,5,7,1,2,3,4
D. 8,5,7,9,1,2,3,6,4
第16题 中级 2.0分 判断
C++语言中,表达式9&&12的结果类型为int、值为8。
T. 正确
F. 错误
第17题 中级 2.0分 判断
C++语言中,在有int a[10];定义的范围内,通过表达式a[-1]进行访问将导致编译错误。
T. 正确
F. 错误
第18题 中级 2.0分 判断
选择排序一般是不稳定的。
T. 正确
F. 错误
第19题 中级 2.0分 判断
C++语言中,float和int类型一般都是4字节,因此float类型能够表达不同的浮点数值的数量,与int类型能够表达不同的整数值的数量是相同的。
T. 正确
F. 错误
第20题 中级 2.0分 判断
使用math.h或cmath头文件中的对数函数,表达式log(256)的结果类型为double、值约为8.0。
T. 正确
F. 错误
第21题 中级 2.0分 判断
一棵有N个节点的完全二叉树,则树的深度为⌊log₂N⌋+1。
T. 正确
F. 错误
第22题 中级 2.0分 判断
邻接表和邻接矩阵都是图的存储形式。通常,使用邻接表比使用邻接矩阵的时间复杂度更低。
T. 正确
F. 错误
第23题 中级 2.0分 判断
C++语言中,类的构造函数可以声明为私有(private)。
T. 正确
F. 错误
第24题 中级 2.0分 判断
泛洪算法的递归实现容易造成溢出,因此大的二维地图算法中,一般使用广度优先搜索实现。
T. 正确
F. 错误
第25题 中级 2.0分 判断
很多游戏中为玩家设置多种可供学习的技能,要学习特定技能又往往需要先学习1个或以上的前置技能。尽管这样的技能间依赖关系常被玩家称为"技能树",但它并不一定是树,更可能是有向无环图。
T. 正确
F. 错误
第26题 中级 25.0分 编程
连通图

时间限制:1.0s 内存限制:512.0MB
给定一张包含n个结点与m条边的无向图,结点依次以1,2,...,n编号,第i条边(1≤i≤m)连接结点ui与结点vi。
如果从一个结点经过若干条边可以到达另一个结点,则称这两个结点是连通的。
你需要向图中加入若干条边,使得图中任意两个结点都是连通的。请你求出最少需要加入的边的条数。
注意给出的图中可能包含重边与自环。

【输入格式】
第一行,两个正整数n,m。接下来m行,每行两个正整数ui,vi,表示一条边。
【输出格式】
输出一行,一个整数,表示使得图中任意两个结点连通所需加入的边的最少数量。
【样例输入1】
4 4
1 2
2 3
3 1
1 4
【样例输出1】
0
对于所有测试点,保证1≤n≤10⁵,1≤m≤10⁵。
第27题 中级 25.0分 编程
金币收集

时间限制:1.0s 内存限制:512.0MB
小A正在游玩收集金币的游戏。具体来说,在数轴上将会出现n枚金币,其中第i枚(1≤i≤n)金币将会在时刻ti出现在数轴上坐标为i的位置。
小A必须在时刻ti恰好位于坐标i,才可以获得第i枚金币。
游戏开始时为时刻0,此时小A的坐标为0。
小A每个时刻只能选择保持不动,或是向右移动一个单位。
小A想知道他最多能收集多少枚金币。你能帮他收集最多的金币吗?

【输入格式】
第一行,一个正整数n。第二行,n个正整数t₁,t₂,...,tₙ。
【输出格式】
输出一行,一个整数,表示最多能收集的金币数量。
【样例输入1】
5
1 3 2 5 4
【样例输出1】
3
对于所有测试点,保证1≤n≤10⁵,1≤ti≤10⁹。
💬