理论卷2025年12月GESP等级认证(Python) · 五级

GESP Python 5级 2025.12

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

对如下定义的循环单链表,横线处填写( )。

class Node:
 def __init__(self, data):
 self.data = data 
 self.next = None 

def create_list(value):
 head = Node(value)
 head.next = head 
 return head

def insert_tail(head, value):
 p = head
 while p.next != head:
 p = p.next
 node = Node(value)
 node.next = head
 p.next = node

def print_list(head):
 _______________________________
 while True:
 print(p.data, end=" ")
 p = p.next
 if p == head:
 break
 print()
A
 if head is None:
 return
 p.next = head
B
 if head is None:
 return
 p = head.next
C
 if head is None:
 return
 p = head
D
 if head.next is None:
 return
 p = head
2
单选题号 #8697
分值 2

区块链技术是比特币的基础。在区块链中,每个区块指向前一个区块,构成链式列表,新区块只能接在链尾,不允许在中间插入或删除。下面代码实现插入区块添加函数,则横线处填写( )。

class Block:
 def __init__(self, idx, data, prev_block):
 self.index = idx 
 self.data = data 
 self.prev = prev_block 
class Blockchain:
 def __init__(self):
 self.tail = None 

 def init(self):
 genesis_block = Block(0, "Genesis Block", None)
 self.tail = genesis_block

 def add_block(self, data):
 ____________________________________

 def clear(self):
 cur = self.tail
 while cur is not None:
 prev_block = cur.prev
 cur.prev = None
 cur = prev_block
 self.tail = None

 def print_chain(self):
 cur = self.tail
 chain = []
 while cur is not None:
 chain.append(f"Block {cur.index}: {cur.data}")
 cur = cur.prev
 for block_info in reversed(chain):
 print(block_info)

A

new_block = Block(self.tail.index, data, self.data)

B

new_block = Block(self.tail.index + 1, data, self.tail)

 self.tail = new_block
C

new_block = Block(self.tail.index, data+1, self.data)

 self.tail = new_block
D

new_block = Block(self.tail.index, data, self.tail)

 self.tail.data = new_block
3
单选题号 #8698
分值 2

下面关于单链表和双链表的描述中,正确的是( )。

class DNode:
 def __init__(self, data):
 self.data = data 
 self.prev = None 
 self.next = None 

def delete_dnode(node):
 if node.prev:
 node.prev.next = node.next
 if node.next:
 node.next.prev = node.prev
 node.prev = None
 node.next = None

class SNode:
 def __init__(self, data):
 self.data = data 
 self.next = None 

def delete_snode(head, node):
 if head is None or node is None:
 return
 prev = head
 while prev.next != node:
 prev = prev.next
 prev.next = node.next
 node.next = None
A

双链表删除指定节点是 O(1)O(1),单链表是 O(1)O(1)。

B

双链表删除指定节点是 O(n)O(n),单链表是 O(1)O(1)。

C

双链表删除指定节点是 O(1)O(1),单链表是 O(n)O(n)。

D

双链表删除指定节点是 O(n)O(n),单链表是 O(n)O(n)。

4
单选题号 #8699
分值 2

假设我们有两个数 a=38a = 38 和 b=14b = 14,它们对模 mm 同余,即 a≡b(modm)a \equiv b \pmod{m}。以下哪个值不可能是 mm?

A

33

B

44

C

66

D

99

5
单选题号 #8700
分值 2

下面代码实现了欧几里得算法,下面有关说法,错误的是( )。

def gcd1(a: int, b: int) -> int:
 return a if b == 0 else gcd1(b, a % b)

def gcd2(a: int, b: int) -> int:
 while b != 0:
 temp = b
 b = a % b
 a = temp
 return a
A

gcd1() 实现为递归方式。

B

gcd2() 实现为迭代方式。

C

当 aa 较大时,gcd1() 实现会多次调用自身,需要较多额外的辅助空间。

D

当 aa 较大时,gcd1() 的实现比 gcd2() 执行效率更高。

6
单选题号 #8701
分值 2

唯一分解定理描述的内容是( )。

A

任何正整数都可以表示为两个素数的和。

B

任何大于 11 的合数都可以唯一分解为有限个质数的乘积。

C

两个正整数的最大公约数总是等于它们的最小公倍数除以它们的乘积。

D

所有素数都是奇数。

7
单选题号 #8702
分值 2

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

def linear_sieve(n):
 if n n:
 break
 ——————————————————————————
 if i % p == 0:
 break
 
 return primes
A

is_prime[i * p] = False

B

is_prime[i] = False

C

is_prime[i * p] = True

D

is_prime[i + p] = False

8
单选题号 #8703
分值 2

下列关于排序的说法,正确的是( )。

A

快速排序是稳定排序。

B

归并排序通常是稳定的。

C

插入排序是不稳定排序。

D

冒泡排序不是原地排序。

9
单选题号 #8704
分值 2

下面代码实现了归并排序。下述关于归并排序的说法中,不正确的是( )。

def merge(arr, temp, l, mid, r):
 i = l 
 j = mid + 1 
 k = l 

 while i = r:
 return 
 mid = l + (r - l) // 2

 merge_sort(arr, temp, l, mid)
 merge_sort(arr, temp, mid + 1, r)
 merge(arr, temp, l, mid, r)
def merge_sort_wrapper(arr):
 if not arr:
 return []
 temp = [0] * len(arr)
 merge_sort(arr, temp, 0, len(arr) - 1)
 return arr
A

归并排序的平均复杂度是 O(nlog⁡n)O(n \log n)

B

归并排序需要 O(n)O(n) 的额外空间

C

归并排序在最坏情况的时间复杂度是O(n2)O(n^2)

D

归并排序适合大规模数据

10
单选题号 #8705
分值 2

下述 python 代码实现了快速排序算法,最差情况时间复杂度是( )。

def partition(arr, low, high):
 i = low
 j = high
 pivot = arr[low] 

 while i = pivot:
 j -= 1
 while i = high:
 return 
 
 p = partition(arr, low, high)
 quick_sort(arr, low, p - 1)
 quick_sort(arr, p + 1, high)

def quick_sort_wrapper(arr):
 if not arr:
 return []
 quick_sort(arr, 0, len(arr) - 1)
 return arr
A

O(n)O(n)

B

O(log n)O (log \ n)

C

O(n2)O(n^2)

D

O(n log n)O (n \ log \ n)

🔒

已解锁前 10 题

第 11~27 题(共 17 题)需开通题库会员或使用积分包作答
本卷为 VIP 试卷:需开通题库会员(无限刷)或购买积分包(每题 1 积分);已购长期正课学员自动享有权益
海小星AI平台海小星AI平台

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

课程方向

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

联系我们

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

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

隐私政策服务条款