万卷网> GESP认证 >C++ > 2025年9月CCF—GESP(C++七级)编程能力等级认证试卷

2025年9月CCF—GESP(C++七级)编程能力等级认证试卷
七级 2025 2026-07-14 20:18:21 94

一、单选题

1.

对一个包含 个顶点、 条边的图,执行广度优先搜索,其最优时间复杂度是( )。

A.

O(V+E)

B.

O(V)

C.

O(E)

D.

O(V^2)

2.

以下哪个方案不能合理解决或缓解哈希表冲突( )。

A.

用新元素覆盖发生冲突的哈希表项。

B.

在每个哈希表项处,使用单链表管理该表项的冲突元素。

C.

建立额外的单链表,用来管理所有发生冲突的元素。

D.

使用不同的哈希函数再建立一个哈希表,用来管理所有发生冲突的元素。

3.

已知 a 为 int 类型变量, p 为 int * 类型变量,下列表达式不符合语法的是( )。

A.

a * a

B.

p * p

C.

A & A

D.

政策与和平

4.

下列关于二叉树的说法,错误的是( )。

A.

二叉排序树的中序遍历顺序与元素排序的顺序是相同的。

B.

自平衡二叉查找树(AVL树)是一种二叉排序树。

C.

n个元素的二叉排序树,其高一定为[log2n]。

D.

任意的森林,都可以映射为一颗二叉树进行表达和存储。

5.

下面 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 * 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 = u * v * 2; 
int c = u * u + v * v; 
cnt += n / (a + b + c); 
} 
        return cnt; 
}


A.

O(n^2)

B.

O(n^2logn)

C.

O(nlogn)

D.

O(n)

6.

下面程序的时间复杂度为( )。

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.

B.

O(2^n)

C.

o(n^2)

D.

O(n)

7.

已知小写字母 b 的ASCII码为98,下列C++代码的输出结果是( )。

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

b

B.

c

C.

98

D.

99

8.

下列选项中,哪个不可能是下图的深度优先遍历序列( )。

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

9.

下列关于树和图的说法,错误的是( )。

A.

保留树的所有节点,并把树的每个节点指向其父节点,则可以将树转换为一个有向弱连通图。

B.

保留树的所有节点,并把树的每个节点指向其子节点,则可以将树转换为一个有向无环图。

C.

每个连通图都存在生成树。

D.

每个存在生成树的有向图,都一定是强连通的。

10.

以下关于贪心法和动态规划的说法中,错误的是( )。

A.

对特定的问题,贪心法不一定适用。

B.

当特定的问题适用贪心法时,通常比动态规划的时间复杂度更低。

C.

对很多问题,递推实现和递归实现动态规划方法的时间复杂度相当。

D.

采用动态规划的算法一定具有多项式时间复杂度。

11.

下面程序的输出为( )。

#include <iostream> 
using namespace std; 
int fib(int n) { 
        if (n == 0) 
                return 1; 
        return fib(n - 1) + fib(n - 2); 
} 
int main() { 
        cout << fib(6) << endl; 
        return 0; 
}


A.

8

B.

13

C.

21

D.

无法正常结束。

12.

一棵完全二叉树有165个结点,则叶结点有多少个?( )

A.

38

B.

82

C.

83

D.

84

13.

下列关于C++类的说法,错误的是( )。

A.

如果一个类包含纯虚函数,则它不能包含成员变量。

B.

如果一个类包含纯虚函数,则不能用它定义对象。

C.

派生类对象占用的内存总是不小于基类对象。

D.

派生类可以不实现基类的虚函数。

14.

下面 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^2)

15.

已知数组 a 的定义 int a[10] = {-1}; ,下列说法不正确的是( )。

A.

数组 a 至少占用 10 个 int 大小的内存,一般为 40 个字节。

B.

数组 a 的所有元素均被初始化为 -1 。

C.

语句 a[-1] = 0; 不会产生编译错误,但会导致难以预测的运行结果。

D.

语句 a[13] = 0; 不会产生编译错误,但会导致难以预测的运行结果。

二、判断题

1.

邻接表和邻接矩阵都是图的存储形式。通常,使用邻接表比使用邻接矩阵的时间复杂度更低。

A.正确 B.错误
2.

题 一棵有N个节点的完全二叉树,则树的深度为+1。( )

A.正确 B.错误
3.

C++语言中,在有 int a[10]; 定义的范围内,通过表达式 a[-1] 进行访问将导致编译错误。

A.正确 B.错误
4.

C++语言中, float 和 int 类型一般都是 4 字节,因此 float 类型能够表达不同的浮点数值的数量,与 int 类型能够表达不同的整数值的数量是相同的。

A.正确 B.错误
5.

泛洪算法的递归实现容易造成溢出,因此大的二维地图算法中,一般使用广度优先搜索实现。

A.正确 B.错误
6.

使用 math.h 或 cmath 头文件中的对数函数,表达式 log(256) 的结果类型为 double 、值约为 8.0 。

A.正确 B.错误
7.

C++语言中,表达式 9 && 12 的结果类型为 int 、值为 8 。

A.正确 B.错误
8.

C++语言中,类的构造函数可以声明为私有(private)。

A.正确 B.错误
9.

很多游戏中为玩家设置多种可供学习的技能,要学习特定技能又往往需要先学习1个或以上的前置技能。尽管这样的技能间依赖关系常被玩家称为“技能树”,但它并不一定是树,更可能是有向无环图。

A.正确 B.错误
10.

选择排序一般是不稳定的。2025.9-7

A.正确 B.错误

三、编程题

1.

金币收集

2.

连通图

公众号
客服 反馈
顶部