#1684. GESP-C++七级(2025-09)
GESP-C++七级(2025-09)
CCF GESP C++ 七级 (2025 年 09 月)
一、单选题(每题 2 分,共 30 分)
1. 已知⼩写字母 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 * a
- p * p
- a && a
- p && p
3. 下列关于C++类的说法,错误的是( )
{{ select(3) }}
- 如果⼀个类包含纯虚函数,则它不能包含成员变量。
- 如果⼀个类包含纯虚函数,则不能⽤它定义对象。
- 派⽣类对象占⽤的内存总是不⼩于基类对象。
- 派⽣类可以不实现基类的虚函数。
4. 已知数组 a 的定义 int a[10] = {-1}; ,下列说法不正确的是( )
{{ select(4) }}
- 数组 a ⾄少占⽤ 10 个 int ⼤⼩的内存,⼀般为 40 个字节。
- 数组 a 的所有元素均被初始化为 -1 。
- 语句 a[-1] = 0; 不会产⽣编译错误,但会导致难以预测的运⾏结果。
- 语句 a[13] = 0; 不会产⽣编译错误,但会导致难以预测的运⾏结果。
5. ⼀棵完全⼆叉树有165个结点,则叶结点有多少个?( )
{{ select(5) }}
- 38
- 82
- 83
- 84
6. 下列关于⼆叉树的说法,错误的是( )
{{ select(6) }}
- ⼆叉排序树的中序遍历顺序与元素排序的顺序是相同的。
- ⾃平衡⼆叉查找树(AVL树)是⼀种⼆叉排序树。
- 个元素的⼆叉排序树,其⾼⼀定为 。
- 任意的森林,都可以映射为⼀颗⼆叉树进⾏表达和存储。
7. 下列关于树和图的说法,错误的是( )
{{ select(7) }}
- 保留树的所有节点,并把树的每个节点指向其⽗节点,则可以将树转换为⼀个有向弱连通图。
- 保留树的所有节点,并把树的每个节点指向其⼦节点,则可以将树转换为⼀个有向⽆环图。
- 每个连通图都存在⽣成树。
- 每个存在⽣成树的有向图,都⼀定是强连通的。
8. 对⼀个包含 个顶点、 条边的图,执⾏⼴度优先搜索,其最优时间复杂度是( ) A. B. C. D.
{{ select(8) }}
9. 以下哪个⽅案不能合理解决或缓解哈希表冲突( )
{{ select(9) }}
- ⽤新元素覆盖发⽣冲突的哈希表项。
- 在每个哈希表项处,使⽤单链表管理该表项的冲突元素。
- 建⽴额外的单链表,⽤来管理所有发⽣冲突的元素。
- 使⽤不同的哈希函数再建⽴⼀个哈希表,⽤来管理所有发⽣冲突的元素。
10. 以下关于贪⼼法和动态规划的说法中,错误的是( )
{{ select(10) }}
- 对特定的问题,贪⼼法不⼀定适⽤。
- 当特定的问题适⽤贪⼼法时,通常⽐动态规划的时间复杂度更低。
- 对很多问题,递推实现和递归实现动态规划⽅法的时间复杂度相当。
- 采⽤动态规划的算法⼀定具有多项式时间复杂度。
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;
}
{{ select(11) }}
- 8
- 13
- 21
- ⽆法正常结束。
12. 下⾯程序的时间复杂度为( ) A. B. C. D.
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);
}
{{ select(12) }}
- , where
13. 下⾯ init_sieve 函数的时间复杂度为( ) A. B. C. D.
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) }}
14. 下⾯ count_triple 函数的时间复杂度为( ) A. B. C. D.
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;
}
{{ select(14) }}
15. 下列选项中,哪个不可能是下图的深度优先遍历序列( )

{{ 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 分)
1. C++语⾔中,表达式 9 && 12 的结果类型为 int 、值为 8
{{ select(16) }}
- 对
- 错
2. C++语⾔中,在有 int a[10]; 定义的范围内,通过表达式 a[-1] 进⾏访问将导致编译错误
{{ select(17) }}
- 对
- 错
3. 选择排序⼀般是不稳定的
{{ select(18) }}
- 对
- 错
4. C++语⾔中, float 和 int 类型⼀般都是 4 字节,因此 float 类型能够表达不同的浮点数值的数量,与 int 类型能够表达不同的整数值的数量是相同的。
{{ select(19) }}
- 对
- 错
5. 使⽤ math.h 或 cmath 头⽂件中的对数函数,表达式 log(256) 的结果类型为 double 、值约为 8.0
{{ select(20) }}
- 对
- 错
6. ⼀棵有N 个节点的完全⼆叉树,则树的深度为 。( )
{{ select(21) }}
- 对
- 错
7. 邻接表和邻接矩阵都是图的存储形式。通常,使⽤邻接表⽐使⽤邻接矩阵的时间复杂度更低
{{ select(22) }}
- 对
- 错
8. C++语⾔中,类的构造函数可以声明为私有(private)
{{ select(23) }}
- 对
- 错
9. 泛洪算法的递归实现容易造成溢出,因此⼤的⼆维地图算法中,⼀般使⽤⼴度优先搜索实现
{{ select(24) }}
- 对
- 错
10. 很多游戏中为玩家设置多种可供学习的技能,要学习特定技能⼜往往需要先学习1个或以上的前置技能。尽 管这样的技能间依赖关系常被玩家称为“技能树”,但它并不⼀定是树,更可能是有向⽆环图。
{{ select(25) }}
- 对
- 错