#1699. GESP-C++七级(2026-06)

GESP-C++七级(2026-06)

CCF GESP C++ 七级 (2026 年 09 月)

一、单选题(每题 2 分,共 30 分)

1. 下列 C++ 代码的输出结果是( )

#include <iostream>
using namespace std;
int main() {
    int a = 5, b = 3;
    cout << (a & b) + (a | b) << endl;
    return 0;
}

{{ select(1) }}

  • 6
  • 7
  • 8
  • 9

2. 使⽤ cmath 或 math.h 中的数学库函数,下列说法中正确的是( )

{{ select(2) }}

  • pow(2, 3) 的返回值类型为 int
  • sin(30) 的参数 30 表⽰ 度
  • sqrt(4) 的返回值类型为 int
  • log(1) 的返回值为 0.0 ,且类型为 double

3. 有 个字符,出现次数分别为 、 、 、 。构造哈夫曼树后,出现次数为 的字符的哈夫曼编码长度为 ( )。 A. B. C. D.

{{ select(3) }}

  • 1
  • 2
  • 3
  • 4

4. 从 个点连接成的⽹格的左上角⾛到右下角,每次只能向右或向下移动,不同的路径共有( )条 .

{{ select(4) }}

  • 20
  • 35
  • 70
  • 126

5. 在含有 个结点的⼆叉排序树中查找⼀个元素,平均时间复杂度和最坏时间复杂度分别为( )

{{ select(5) }}

  • O(logn)O(\log n)O(n)O(n)
  • O(n)O(n)O(logn)O(\log n)
  • O(logn)O(\log n)O(logn)O(\log n)
  • O(1)O(1)O(n)O(n)

6. 有 4 堆⽯⼦,数量分别为 1、2 、3 、4 。每次可以合并相邻两堆,合并代价为两堆⽯⼦数之和。将所有⽯⼦合 并成⼀堆的最⼩总代价为( )。####

{{ select(6) }}

  • 17
  • 19
  • 20
  • 23

7. 在⽆权图中,使⽤ BFS 从起点开始遍历,并在访问由结点 u 扩展的相邻结点 v 时记录 dist[v] = dist[u] + 1 ,且起点的 dist 为 0 ,则最终 dist[v] 表⽰的是( )。

{{ select(7) }}

  • 起点到结点 v 的最少边数
  • 结点 v 的度数
  • 从起点到结点 v 的路径上经过的最⼤边权
  • 包含结点 v 的连通块⼤⼩

8. 在⼆维⽹格上实现泛洪填充时,为了防⽌递归层数过深,最适合的⾮递归实现⽅式是( )

{{ select(8) }}

  • 使⽤哈希表记录每个格⼦被访问的次数
  • 使⽤快速排序预处理⽹格
  • 使⽤⼆分查找定位边界
  • 使⽤队列实现 BFS 或使⽤显式栈模拟 DFS

9. 关于哈希表,下列说法正确的是( )

{{ select(9) }}

  • 只要哈希函数选择合适,就可以完全避免冲突
  • 在链地址法中,查找⼀个元素的时间复杂度⼀定为
  • 开放定址法发⽣冲突后,会在表内寻找下⼀个可⽤位置
  • 哈希表的查找速度与表中元素个数⽆关

10. 下列 C++ 代码的输出结果是( ) 3

#include <iostream>
using namespace std
void inc(int &x) {
    x++;
}
int main() {
    int a = 3;
    inc(a);
    cout << a;
    return 0;
}

{{ select(10) }}

  • 3
  • 4
  • 5
  • 编译错误

11. ⽤动态规划求两个序列 和 的最长公共⼦序列长度,若 dp[i][j] 表⽰ 前 i 个元素与 前 j 个 元素的 LCS 长度。当 时,正确的状态转移是( )。

{{ select(11) }}

  • dp[i][j] = dp[i - 1][j - 1] + 1
  • dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
  • dp[i][j] = dp[i - 1][j] + 1
  • dp[i][j] = dp[i][j - 1]

12. 下列代码是⼀维数组优化 0/1 背包的核⼼⽚段,执⾏后 dp[8] 的输出结果是( )

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    int w = 3, v = 5, W = 8;
    int dp[9] = {0};
    for (int c = W; c >= w; c--)
    dp[c] = max(dp[c], dp[c - w] + v);
        cout << dp[8] << endl;
    return 0;
}

{{ select(12) }}

  • 0
  • 1
  • 3
  • 5

13. 若要求排序后相等元素的相对顺序保持不变,下列排序算法中最不适宜使⽤的是( )

{{ select(13) }}

  • 冒泡排序
  • 插⼊排序
  • 归并排序
  • 快速排序

14. 下列代码⽚段的时间复杂度为( ) A. B. C. D.

long long s = 0;
for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j += i)
        s += i + j;

{{ select(14) }}

  • O(n)O(n)
  • O(nlogn)O(n \log n)
  • O(n2)O(n^2)
  • O(nn)O(n\sqrt{n})

15. 已知 int a[6] = {1, 3, 5, 7, 9, 11}; int *p = a + 1; ,则表达式 *(p + 3) 的值是( )

{{ select(15) }}

  • 5
  • 7
  • 9
  • 11

二、判断题(每题 2 分,共 20 分)

1. 使⽤ cmath 或 math.h 中的函数,表达式 exp(0) 的结果值为 1.0 ,且类型为 double

{{ select(16) }}

2. 采⽤开放定址法处理冲突的哈希表中,删除⼀个元素后可以直接将该位置置空,不会影响后续查找

{{ select(17) }}

3. 在哈夫曼树中,出现次数更多的叶⼦结点,其深度总是更⼩

{{ select(18) }}

4. 在⼀个有向图中,所有顶点的⼊度之和总是等于所有顶点的出度之和

{{ select(19) }}

5. ⼴度优先搜索通常借助队列实现,深度优先搜索通常借助栈或递归实现

{{ select(20) }}

6. 快速排序的平均时间复杂度为 ,最坏时间复杂度也为

{{ select(21) }}

7. 为解决 0/1 背包问题,使⽤⼀维数组优化时,内层容量循环应从⼤到⼩枚举

{{ select(22) }}

8. 使⽤邻接表存储图时,遍历某个顶点的所有邻边所需时间与图中顶点数成正⽐

{{ select(23) }}

9. 在按层序从 开始对结点编号的完全⼆叉树中,编号为 ( )的结点的⽗结点编号为

{{ select(24) }}

10. 在定义了数组 int arr[10]; 后,表达式 arr 和表达式 &arr[0] 总是等价的 。

{{ select(25) }}