#275. GESP2025031五级选择题

GESP2025031五级选择题

2025年3月CCF GESP C++五级单选题(共15题,每题2分,满分30分)

  1. 链表不具备的特点是( )? {{ select(1) }}
  • 可随机访问任何一个元素
  • 插入、删除操作不需要移动元素
  • 无需事先估计存储空间大小
  • 所需存储空间与存储元素个数成正比
  1. 双向链表中p指向一个非首尾结点,要删除结点p,下述语句中错误的是( )? {{ select(2) }}
  • p->next->prev = p->next; p->prev->next = p->prev; delete p;
  • p->prev->next = p->next; p->next->prev = p->prev; delete p;
  • p->next->prev = p->prev; p->next->prev->next = p->next; delete p;
  • p->prev->next = p->next; p->prev->next->prev = p->prev; delete p;
  1. 实现空的双向循环链表(含头尾哨兵结点),横线处应填的最佳代码是( )? {{ select(3) }}
  • list->head->prev = list->head; list->tail->prev = list->head;
  • list->head->next = list->tail; list->tail->prev = list->head;
  • list->head->next = list->tail; list->tail->next = list->head;
  • list->tail->next = nullptr; list->head->next = list->tail;

  1. 用辗转相除法求gcd(84, 60)的步骤中,第二步计算的数是( )? {{ select(4) }}
  • 84和60
  • 60和24
  • 24和12
  • 12和0

  1. 根据唯一分解定理,下面整数的唯一分解正确的是( )? {{ select(5) }}
  • 18 = 3 × 6
  • 28 = 4 × 7
  • 36 = 2 × 3 × 6
  • 30 = 2 × 3 × 5
  1. 实现素数表线性筛法的代码,横线处应填的最佳代码是( )? {{ select(6) }}
  • j < primes.size()
  • i * primes[j] <= n
  • j < primes.size() && i * primes[j] <= n
  • j <= n

  1. 程序运行中递归调用层数过多,会因为( )引发错误? {{ select(7) }}
  • 系统分配的栈空间溢出
  • 系统分配的堆空间溢出
  • 系统分配的队列空间溢出
  • 系统分配的链表空间溢出
  1. 对factorialA和factorialB两个函数,说法错误的是( )? {{ select(8) }}
  • 两个函数实现的功能相同
  • 两个函数的时间复杂度均为 (O(n))
  • factorialA采用递归方式
  • factorialB采用递归方式

  1. 下列算法中,( )是不稳定的排序? {{ select(9) }}
  • 选择排序
  • 插入排序
  • 归并排序
  • 冒泡排序
  1. 快速排序算法(从小到大排序)的partition函数中,横线处应填的最佳代码是( )? {{ select(10) }}
  • if (arr[j] > pivot) { i++; swap(arr[i], arr[j]); }
  • if (arr[j] < pivot) { i++; swap(arr[i], arr[j]); }
  • if (arr[j] < pivot) { swap(arr[i], arr[j]); i++; }
  • if (arr[j] == pivot) { i++; swap(arr[i], arr[j]); }

  1. 用二分法在[1, 100]内猜数,最多需要猜( )次? {{ select(11) }}
  • 100
  • 10
  • 7
  • 5
  1. 二分查找算法中,横线处能填写的最佳代码是( )? {{ select(12) }}
  • int mid = left + (right - left) / 2;
  • int mid = left;
  • int mid = (left + right) / 2;
  • int mid = right;

  1. 贪心算法的核心特征是( )? {{ select(13) }}
  • 总是选择当前最优解
  • 回溯尝试所有可能
  • 分阶段解决子问题
  • 总能找到最优解
  1. 计算数组最大元素的findMax函数,( )正确实现了分治逻辑? {{ select(14) }}
  • if (low == high) return arr[low]; int mid = (low + high) / 2; return arr[mid];
  • if (low >= high) return arr[low]; int mid = (low + high) / 2; int leftMax = findMax(arr, low, mid - 1); int rightMax = findMax(arr, mid, high); return leftMax + rightMax;
  • if (low > high) return 0; int mid = low + (high - low) / 2; int leftMax = findMax(arr, low, mid); int rightMax = findMax(arr, mid + 1, high); return leftMax * rightMax;
  • if (low == high) return arr[low]; int mid = low + (high - low) / 2; int leftMax = findMax(arr, low, mid); int rightMax = findMax(arr, mid + 1, high); return (leftMax > rightMax) ? leftMax : rightMax;
  1. 高精度乘法函数中,横线处应填写的代码为( )? {{ select(15) }}
  • int temp = c[k];
  • int temp = c[k] + carry;
  • int temp = c[k] - carry;
  • int temp = c[k] * carry;