理论卷2024年9月GESP等级认证(C++) · 五级

GESP C++ 5级 2024.09

满分 100 · 及格 60 · 时长 60 分钟 · 共 27 题 (单选15 / 判断10 / 编程题2)
试卷阅览 · 免费预览前 10 题 · 交卷后可查看答案与解析
1
单选题号 #12078
分值 2

下面关于链表和数组的描述,错误的是( )。

A

数组大小固定,链表大小可动态调整。

B

数组支持随机访问,链表只能顺序访问。

C

存储相同数目的整数,数组比链表所需的内存多。

D

数组插入和删除元素效率低,链表插入和删除元素效率高。

2
单选题号 #12079
分值 2

通过( )操作,能完成在双向循环链表结点 pp 之后插入结点 ss 的功能(其中 nextnext 域为结点的直接后继,prevprev 域为结点的直接前驱)。

A

p->next->prev = s; s->prev = p; p->next = s; s->next = p->next;

B

p->next->prev = s; p->next = s; s->prev = p; s->next = p->next;

C

s->prev = p; s->next = p->next; p->next = s; p->next->prev = s;

D

s->next = p->next; p->next->prev = s; s->prev = p; p->next = s;

3
单选题号 #12080
分值 2

对下面两个函数,说法错误的是( )。

int sumA(int n) {
 int res = 0;
 for (int i = 1; i <= n; i++) {
 res += i;
 }
 return res;
}

int sumB(int n) {
 if (n == 1)
 return 1;
 int res = n + sumB(n - 1);
 return res;
}
A

sumAsumA 体现了迭代的思想。

B

SumBSumB 采用的是递归方式。

C

SumBSumB 函数比 SumASumA 的时间效率更高。

D

两个函数的实现的功能相同。

4
单选题号 #12081
分值 2

有如下函数 fun ,则 fun(20, 12) 的返回值为( )。

int fun(int a, int b) {
 if (a % b == 0)
 return b;
 else
 return fun(b, a % b);
A

2020

B

1212

C

44

D

22

5
单选题号 #12082
分值 2

下述代码实现素数表的埃拉托斯特尼筛法,筛选出所有小于等于 nn 的素数,则横线上应填的最佳代码是( )。

void sieve_Eratosthenes(int n) {
 vector is_prime(n + 1, true);
 vector primes;

 for (int i = 2; i * i <= n; i++) {
 if (is_prime[i]) {
 primes.push_back(i);
 ________________________________ { // 在此处填入代码
 is_prime[j] = false;
 }
 }
 }

 for (int i = sqrt(n) + 1; i <= n; i++) {
 if (is_prime[i]) {
 primes.push_back(i);
 }
 }

 return primes;
}
A

for (int j = i; j <= n; j++)

B

for (int j = i * i; j <= n; j++)

C

for (int j = i * i; j <= n; j += i)

D

for (int j = i; j <= n; j += i)

6
单选题号 #12083
分值 2

下述代码实现素数表的线性筛法,筛选出所有小于等于 nn 的素数,则横线上应填的代码是( )。

vector sieve_linear(int n) {
 vector is_prime(n + 1, true);
 vector primes;

 for (int i = 2; i <= n / 2; i++) {
 if (is_prime[i])
 primes.push_back(i);
 ________________________________ { // 在此处填入代码
 is_prime[i * primes[j]] = 0;
 if (i % primes[j] == 0)
 break;
 }
 }

 for (int i = n / 2 + 1; i <= n; i++) {
 if (is_prime[i])
 primes.push_back(i);
 }

 return primes;
}
A

for (int j = 0; j < primes.size() && i * primes[j] <= n; j++)

B

for (int j = 1; j < primes.size() && i * j <= n; j++)

C

for (int j = 2; j < primes.size() && i * primes[j] <= n; j++)

D

以上都不对

7
单选题号 #12084
分值 2

下面函数可以将 nn 的所有质因数找出来,其时间复杂度是( )。

#include 
#include 

vector get_prime_factors(int n) {
 vector factors;

 while (n % 2 == 0) {
 factors.push_back(2);
 n /= 2;
 }

 for (int i = 3; i * i 2) {
 factors.push_back(n);
 }

 return factors;
}
A

O(n2)O(n^2)

B

O(nlogn)O(nlogn)

C

O((n)logn)O(\sqrt(n)logn)

D

O(n)O(n)

8
单选题号 #12085
分值 2

现在用如下代码来计算 xnx^n ( nn 个 xx 相乘),其时间复杂度为( )。

double quick_power(double x, unsigned n) {
 if (n == 0) return 1;
 if (n == 1) return x;
 return quick_power(x, n / 2) * quick_power(x, n / 2) * ((n & 1) ? x : 1);
}
A

O(n)O(n)

B

O(n2)O(n^2)

C

O(logn)O(logn)

D

O(nlogn)O(nlogn)

9
单选题号 #12086
分值 2

假设快速排序算法的输入是一个长度为 nn 的已排序数组,且该快速排序算法在分治过程总是选择第一个元素作为基准元素。下面选项( )描述的是在这种情况下的快速排序行为。

A

快速排序对于此类输入的表现最好,因为数组已经排序。

B

快速排序对于此类输入的时间复杂度是 O(nlogn)O(nlogn)。

C

快速排序对于此类输入的时间复杂度是 O(n2)O(n^2)。

D

快速排序无法对此类数组进行排序,因为数组已经排序。

10
单选题号 #12087
分值 2

考虑以下 C++ 代码实现的归并排序算法:

void merge(int arr[], int left, int mid, int right) {
 int n1 = mid - left + 1;
 int n2 = right - mid;

 int L[n1], R[n2];

 for (int i = 0; i < n1; i++)
 L[i] = arr[left + i];
 for (int j = 0; j < n2; j++)
 R[j] = arr[mid + 1 + j];

 int i = 0, j = 0, k = left;
 while (i < n1 && j < n2) {
 if (L[i] <= R[j]) {
 arr[k] = L[i];
 i++;
 }
 else {
 arr[k] = R[j];
 j++;
 }
 k++;
 }

 while (i < n1) {
 arr[k] = L[i];
 i++;
 k++;
 }

 while (j < n2) {
 arr[k] = R[j];
 j++;
 k++;
 }
}

void merge_sort(int arr[], int left, int right) {
 if (left < right) {
 int mid = left + (right - left) / 2;

 merge_sort(arr, left, mid);
 merge_sort(arr, mid + 1, right);

 merge(arr, left, mid, right);
 }
}

对长度为 nn 的数组 arrarr ,挑用函数 merge_sort(a, 0, n-1) ,在排序过程中 merge 函数的递归调用次数大约是
( )。

A

O(1)O(1)

B

O(n)O(n)

C

O(logn)O(logn)

D

O(nlogn)O(nlogn)

🔒

已解锁前 10 题

第 11~27 题(共 17 题)可在考试中作答
本卷为普通试卷:注册用户每题扣 1 积分(每日登录送 30 体验积分),交卷后查看答案与解析
海小星AI平台海小星AI平台

点亮AI梦想,编程未来之星。专业的青少年AI编程教育平台。

课程方向

  • AIGC人工智能
  • Scratch图形化
  • Python编程
  • C++/NOIP竞赛

联系我们

  • 北京市西城区万博苑7号楼3层F28室
  • +86-010-83553010
  • contact@seanova.cn

© 2026 海小星AI平台|京ICP备2022032747号

隐私政策服务条款