理论卷2026年6月GESP等级认证(Python) · 五级

GESP Python 5级 2026.06

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

假设 head 不为空,下面是实现单向循环链表在头节点后插入新节点的代码,横线处应填入( )。

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

def insert_after_head(head, x):
 new_node = Node(x)
 ____________________
A
new_node.next = head.next
head.next = new_node
B
new_node.next = head
head.next = new_node
C
head.next = new_node
new_node.next = head
D
new_node.next = head.next
head = new_node
2
单选题号 #8346
分值 2

下面代码遍历并输出一个循环单链表,其中 head 指向链表的第一个节点,横线处应填入的是( )。

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

def printList(head):
 if head is None:
 return
 p = head
 _______________________
 print()
A
while p is not None:
 print(p.val, end=" ")
 p = p.next
B
while p.next is not None:
 print(p.val, end=" ")
 p = p.next
C
while True:
 print(p.val, end=" ")
 p = p.next
 if p == head:
 break
D
while p:
 print(p.val, end=" ")
 p = p.next
3
单选题号 #8347
分值 2

双链表结点定义如下,若要删除双链表中的中间结点(非首尾节点)p,写法正确的是( )。

class Node:
 def __init__(self, val):
 self.val = val
 self.prev = None
 self.next = None
A
p.prev.next = p.next
p.next.prev = p.prev
del p
B
p.next.prev = p.next
p.prev.next = p.prev
del p
C
p.prev = p.next
p.next = p.prev
del p
D
p.next.next = p.prev
p.prev.prev = p.next
del p
4
单选题号 #8348
分值 2

使用如下欧几里得算法求 gcd(105, 45) 时,函数 gcd(a, b) 的递归调用序列正确的是( )。

def gcd(a, b):
    return a if b == 0 else gcd(b, a % b)
A

gcd(105, 45) -> gcd(45, 60) -> gcd(60, 15) -> gcd(15, 0)

B

gcd(105, 45) -> gcd(45, 15) -> gcd(15, 0)

C

gcd(105, 45) -> gcd(60, 45) -> gcd(15, 45)

D

gcd(105, 45) -> gcd(15, 45) -> gcd(15, 0)

5
单选题号 #8349
分值 2

下面代码实现线性筛(欧拉筛),以筛选出 n 以内的所有素数。横线处的代码应为( )。

def sieve(n):
    is_prime = [True] * (n + 1)
    primes = []

    if n >= 0:
        is_prime[0] = False
    if n >= 1:
        is_prime[1] = False

    for i in range(2, n + 1):
        if is_prime[i]:
            primes.append(i)
        j = 0
        while j < len(primes) and i * primes[j] <= n:
            is_prime[i * primes[j]] = False
            if ________________:  # 在此处填入代码
                break
            j += 1
    return primes
A

i % primes[j] == 0

B

primes[j] % i == 0

C

i % primes[j] != 0

D

i == primes[j]

6
单选题号 #8350
分值 2

下面关于埃氏筛法的说法正确的是( )。

A

每个合数只会被筛掉一次

B

从每个素数出发,把它的倍数标记为合数

C

只能判断一个数是不是偶数

D

不能求出素数表

7
单选题号 #8351
分值 2

下面代码实现了计算 xnx^n 的快速幂算法,该算法体现的编程思想是( )。

def power(x, n):
    if n == 0:
        return 1
    res = power(x, n // 2)
    if n % 2 == 0:
        return res * res
    else:
        return res * res * x
A

枚举

B

贪心

C

分治

D

模拟

8
单选题号 #8352
分值 2

下面代码用于统计 n 中因子 2 出现了多少次。若 n = 40,输出是( )。

n = 40
cnt = 0
while n % 2 == 0:
    cnt += 1
    n = n // 2
print(cnt)
A

1

B

2

C

3

D

4

9
单选题号 #8353
分值 2

在一个有序数组中查找第一个大于或等于 x 的元素位置,横线处应填写( )。

def lowerBound(a, x):
    l = 0
    r = len(a)
    while l < r:
        mid = l + (r - l) // 2
        if a[mid] >= x:
            ________________  # 在此处填入代码
        else:
            l = mid + 1
    return l
A

r = mid + 1

B

r = mid - 1

C

r = mid

D

l = mid

10
单选题号 #8354
分值 2

有若干根木头,长度存于 wood。每切一刀可以把一段木头分成两段。函数 check(wood, K, x) 返回:用不超过 K 刀,能否使所有木段长度都不超过 x。下面代码使用二分答案查找最小可行的 x,横线处应填( )。

def binary_cut(wood, K):
    l = 1
    r = 0
    for length in wood:
        r = max(r, length)
    while l < r:
        mid = l + (r - l) // 2
        if check(wood, K, mid):
            ________________  # 在此处填入代码
        else:
            l = mid + 1
    return l
A

r = mid + 1

B

r = mid

C

l = mid

D

r = mid - 1

🔒

已解锁前 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号

隐私政策服务条款