2026年3月 GESP CCF编程能力等级认证Python五级真题
答案和更多内容请查看网站【试卷中心 -----电子学会 ---- Python ---- 五级】网站链接青少年软件编程历年真题模拟题实时更新青少年软件编程Python等级考试试卷五级一、单题题第1题关于Python实现的单链表、双链表和循环链表下列说法正确的是( )。A. 在Python实现的单链表中若已知任意结点对象的引用则可以在O(1)时间内删除该结点。B. Python实现的循环链表中一定不存在值为None的引用属性。C. 在Python实现的循环双链表中尾结点对象的next属性值一定为None。D. 在Python实现的带头结点的循环单链表中判定链表是否为空只需判断头结点对象的next属性是否引用头结点自身即head.next is head。第2题双向循环链表中要在结点p之前插入新结点s均非空以下操作正确的是( )。A. s.nextpp.prevsq.nextss.prevqB. s.prevps.nextp.nextp.next.prevsp.nextsC. s.nextps.prevp.prevp.prev.nextsp.prevsD. s.nextps.prevnullptrp.prevs第3题下面函数删除单向链表中val x的节点并且使用哑结点统一对头结点和中间节点的删除操作。横线处应填( )。class Node: def __init__(self, val): self.val val self.next None def eraseAll(head, x): dummy Node(0) dummy.next head cur dummy while cur.next: if cur.next.val x: # 填空处 else: cur cur.next return dummy.nextA. cur cur.nextB. cur.next cur.next.nextC. cur.next NoneD. cur.next nullptr第4题对如下代码实现的欧几里得算法辗转相除法调用gcd(48, 18)得到的调用序列为( )。def gcd(a, b): if b 0: return a else: return gcd(b, a % b)A. gcd(48,18) - gcd(18,12) - gcd(12,6) - gcd(6,0)B. gcd(48,18) - gcd(30,18) - gcd(12,18)C. gcd(48,18) - gcd(18,30) - gcd(30,6)D. gcd(48,18) - gcd(12,18) - gcd(6,12)第5题下面代码实现了欧拉线性筛横线处应填写( )。def euler_sieve_for(n): if n 2: is_composite [False] * (n 1) primes [] return [] for i in range(2, n 1): if not is_composite[i]: primes.append(i) # 横线处 p primes[j] if i * p n: break is_composite[i * p] True if i % p 0: break return primesA. for j in range(len(primes1)):B. for j in range(len(primes)1):C. for j in range(len(primes)):D. for j in range(len(primes)-1):第6题埃氏筛中将内层循环从j i*i开始而不是j 2*i的主要原因是( )。def eratosthenes_sieve_for(n): if n 2: return [] is_composite [False] * (n 1) primes [] for i in range(2, n 1): if is_composite[i]: primes.append(i) continue # 用for循环模拟C的 j i*i; j n; j i for j in range(i * i, n 1, i): is_composite[j] True return primesA. 因为2*i一定不是合数B. i*i一定是质数C. 小于i*i的i的倍数已被更小质因子筛过D. 这样可以把时间复杂度降为O(n)第7题下面程序的运行结果为( )。def check(n, a, k, dist): cnt1 last a[0] for i in range(1,n): if a[i] - last dist: cnt1 last a[i] return cntk def solve(n,a, k): a.sort() l0 r a[-1]-a[0] while l r: mid (l r 1)//2 if check(n, a, k, mid): lmid else: rmid-1 return l if __name____main__: a [1, 2, 8,4,9] n5 k3 result solve(n, a, k) print(result)A.2 B.3 C.4 D.5第8题在升序数组中查找第一个大于等于x的位置下面循环中横线应填( )。def LowerBound(a,x): l0 rlen(a) while l r: mid l(r -l) //2 if a[mid]x: # 横线处 else: lmid1 return lA. rmidB. lmidC. rmid1D. lmid-1第9题关于递归函数调用下列说法错误的是( )。A. 递归调用层次过深时可能会耗尽栈空间导致栈溢出B. 尾递归函数可以通过编译器优化来避免栈溢出C. 所有递归函数都可以通过循环结构来改写从而避免栈溢出D. 栈溢出发生时程序会抛出异常并可以继续执行后续代码第10题给定n根木头第i根长度为a[i]。要切成不少于m段等长木段求最大可能长度则横线上应填写( )。def check(a,m,x): cnt0 for length in a: if x0: return True cnt length // x if cntm: return True return cntm def main(): import sys input sys.stdin.read().split() idx0 n int(input[idx]) idx1 m int(input[idx]) idx1 a[] mx0 for _ in range(n): numint(input[idx]) idx1 a.append(num) mx max(mx,num) l1 rmx ans0 while l r: mid l (r - l) // 2 if check(a, m,mid): ansmid # 横线处1 else: # 横线处2 print(ans)A. lmid1和rmid-1B. rmid和lmid1C. lmid1和rmidD. lmid-1和rmid1答案和更多内容请查看网站【试卷中心 -----电子学会 ---- Python ---- 五级】网站链接青少年软件编程历年真题模拟题实时更新