CCF GESP 2025年6月认证 C++ 7级

单选题
共 15 道 每题 2 分 共计 30 分
第 1 题
已知小写字母 b 的 ASCII 码为 $98$,下列 C++ 代码的输出结果是( )。
#include <iostream>
using namespace std;
 
int main() {
    char a = 'b' ^ 4;
    cout << a;
    return 0;
}
A
b
B
bbbb
C
f
D
102
第 2 题
已知 aint 类型变量,pint * 类型变量,下列赋值语句不符合语法的是( )。
A
*(p + a) = *p;
B
*(p - a) = a;
C
p + a = p;
D
p = p + a;
第 3 题
下列关于 C++ 类的说法,错误的是( )。
A
如需要使用基类的指针释放派生类对象,基类的析构函数应声明为虚析构函数。
B
构造派生类对象时,只调用派生类的构造函数,不会调用基类的构造函数。
C
基类和派生类分别实现了同一个虚函数,派生类对象仍能够调用基类的该方法。
D
如果函数形参为基类指针,调用时可以传入派生类指针作为实参。
第 4 题
下列 C++ 代码的输出是( )。
#include <iostream>
using namespace std;
 
int main() {
    int arr[5] = {2, 4, 6, 8, 10};
    int * p = arr + 2;
    cout << p[3] << endl;
    return 0;
}
A
6
B
8
C
编译出错,无法运行。
D
不确定,可能发生运行时异常。
第 5 题

假定只有一个根节点的树的深度为 1,则一棵有 $N$ 个节点的完全二叉树,则树的深度为( )。

A

$\lfloor \log_2(N) \rfloor + 1$

B

$\lfloor \log_2(N) \rfloor$

C

$\lceil \log_2(N) \rceil$

D

不能确定。

第 6 题

对于如下图的二叉树,说法正确的是( )。

A

先序遍历是 ABDEC。

B

中序遍历是 BDACE。

C

后序遍历是 DBCEA。

D

广度优先遍历是 ABCDE。

第 7 题
图的存储和遍历算法,下面说法错误的是( )。
A
图的深度优先遍历须要借助队列来完成。
B
图的深度优先遍历和广度优先遍历对有向图和无向图都适用。
C
使用邻接矩阵存储一个包含 $v$ 个顶点的有向图,统计其边数的时间复杂度为 $O(v^2)$。
D
同一个图分别使用出边邻接表和入边邻接表存储,其边结点个数相同。
第 8 题
一个连通的简单有向图,共有 28 条边,则该图至少有( )个顶点。
A
5
B
6
C
7
D
8
第 9 题
以下哪个方案不能合理解决或缓解哈希表冲突( )。
A
在每个哈希表项处,使用不同的哈希函数再建立一个哈希表,管理该表项的冲突元素。
B
在每个哈希表项处,建立二叉排序树,管理该表项的冲突元素。
C
使用不同的哈希函数建立额外的哈希表,用来管理所有发生冲突的元素。
D
覆盖发生冲突的旧元素。
第 10 题
以下关于动态规划的说法中,错误的是( )。
A
动态规划方法通常能够列出递推公式。
B
动态规划方法的时间复杂度通常为状态的个数。
C
动态规划方法有递推和递归两种实现形式。
D
对很多问题,递推实现和递归实现动态规划方法的时间复杂度相当。
第 11 题
下面程序的输出为( )。
#include <iostream>
using namespace std;
int rec_fib[100];
int fib(int n) {
    if (n <= 1)
        return n;
    if (rec_fib[n] == 0)
        rec_fib[n] = fib(n - 1) + fib(n - 2);
    return rec_fib[n];
}
int main() {
    cout << fib(6) << endl;
    return 0;
}
A
8
B
13
C
64
D
结果是随机的。
第 12 题
下面程序的时间复杂度为( )。
int rec_fib[MAX_N];
int fib(int n) {
    if (n <= 1)
        return n;
    if (rec_fib[n] == 0)
        rec_fib[n] = fib(n - 1) + fib(n - 2);
    return rec_fib[n];
}
A
$O(2^n)$
B
$O(\phi^n)$, $\phi = \frac{\sqrt{5} - 1}{2}$
C
$O(n^2)$
D
$O(n)$
第 13 题
下面 search 函数的平均时间复杂度为( )。
int search(int n, int * p, int target) {
    int low = 0, high = n;
    while (low < high) {
        int middle = (low + high) / 2;
        if (target == p[middle]) {
            return middle;
        } else if (target > p[middle]) {
            low = middle + 1;
        } else {
            high = middle;
        }
    }
    return -1;
}
A
$O(n \log(n))$
B
$O(n)$
C
$O(\log(n))$
D
$O(1)$
第 14 题
下面程序的时间复杂度为( )。
int primes[MAXP], num = 0;
bool isPrime[MAXN] = {false};
void sieve() {
    for (int n = 2; n <= MAXN; n++) {
        if (!isPrime[n])
            primes[num++] = n;
        for (int i = 0; i < num && n * primes[i] <= MAXN; i++) {
            isPrime[n * primes[i]] = true;
            if (n % primes[i] == 0)
                break;
        }
    }
}
A
$O(n)$
B
$O(n \times \log n)$
C
$O(n \times \log \log n)$
D
$O(n^2)$
第 15 题

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

A

1, 2, 4, 5, 3, 7, 6, 8, 9

B

1, 2, 5, 4, 3, 7, 8, 6, 9

C

1, 4, 5, 2, 7, 3, 8, 6, 9

D

1, 5, 4, 2, 7, 3, 8, 6, 9

单选题部分已到底了。