01 202103青少年软件编程(Python)等级考试试卷(四级)

标签:
普通文字版答案
2024-11-01
| 14页
| 127人阅读
| 1人下载

内容正文:

青少年软件编程(Python)等级考试试卷(四级) 202103真题与解析 分数:100  题数:38 测试时长:60分钟 一、单选题(共25题,每题2分,共50分) 1. 不超过100个元素的有序数列,使用二分查找能找到指定的元素,可能的查找次数不包括?( ) A.  1次 B.  6次 C.  7次 D.  8次 2. 运行以下代码,正确的打印结果是?( ) def f():     c=0     for i in range(4,51,4):         if i%6==0:             c=c+1     return c print(f())   A.  1 B.  2 C.  4 D.  8 3. 10个人站一列,分苹果,问第10个人分到多少个苹果,他说比前面一个人多分到2个,依次往前,都说比前面一个人多分到2个,最后问第一个人,他说分到10个苹果。用以下函数求第10个人分到的苹果数,则应补充选项为?( ) def  apple(n):      if n == 1:          return 10      else:          return                    print(apple(10)) A.  apple(n)+2 B.  n+2 C.  apple(n-1)+2 D.  apple(n+1)-2 4. 观察程序段,以下说法错误的是?( ) def fib(n):     if n==1 or n==2:         s=1     else:         s=fib(n-1)+fib(n-2)     return s m=int(input("请输入m的值(m>2):")) print(fib(m)) A.  如果输入m的值为8,打印的结果为20 B.  该程序段用了递归来实现 C.  如果缺少语句“return s”,程序会报错 D.  语句“def fib(n):”中的n为形参 5. 关于python函数参数的说法正确的是?( ) A.  函数一定要有参数和返回值 B.  在调用一个函数时,若函数中修改了形参变量的值,则对应的实参变量的值也被修改 C.  参数的值是否会改变,与函数中对变量的操作有关,与参数类型无关 D.  函数的形参在函数被调用时获得初始值 6. 关于递归与递推方法的比较,错误的观点是?( ) A.  递归是将复杂问题降解成若干个子问题,依次降解,求出低阶规模的解,代入高阶问题中,直至求出原问题的解; B.  递推是构造低阶的问题,并求出解,依次推导出高阶的问题以及解,直至求出问题的解; C.  数学上的递推关系可以通过递归的方法来实现; D.  递归算法代码简洁,运行速度比递推快,因此应该尽量采用递归的方法; 7. 运行以下代码,输出结果正确的是?( ) a=1 b=c=[] def fun(a,c):     a=2     c.append(a) fun(a,c) print(a,b,c) A.  2 [2] [2] B.  1 [] [2] C.  1 [2] [2] D.  2 [] [2] 8. 关于Turtle库的表述中,错误的是?( ) A.  Turtle库是Python语言中一个很流行的绘制图像的函数库。 B.  画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。 C.  turtle.circle( )是只能画一个指定半径为r的圆。 D.  turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。 9. 有100枚金币,其中有1枚轻1克的假金币,现在要找出这枚假金币,但身边只有1个没有刻度的天秤。小明先是将金币分成50枚一堆,共两堆称重,在轻的那一堆中又分成两堆,接着在轻的25枚中分成12,12,1三堆称重,若两堆12枚的重量相同,则假币为单独剩下的那一枚,否则在轻的那一堆中继续按照之前的办法称下去,直到找到假金币。请问小明采用的办法与哪个算法有着相似之处?( ) A.  递归 B.  分治 C.  枚举 D.  贪心 10. 运行以下代码,正确的打印结果是?( ) def f(s):     t=0     max=0     for i in s:         if i>="0" and i<="9":             t=t+1         else:             if t>max:                 max=t             t=0     print(max) list="123ab45cd6d" f(list) A.  0 B.  1 C.  2 D.  3 11. 下列关于函数的描述正确的是?( ) A.  函数是可重复使用的,用来实现单一,或相关联功能的代码段 B.  函数中必须return语句 C.  函数好处是模块性,但不能提高代码的利用率 D.  函数内容以冒号起始,可以不缩进 12. 调用以下函数时,语句“s=s+i”被执行的次数是?( ) def f():     s=0     i=1     while i<10:         if i%3==0 or s%2==1:             s=s+i         i=i+1     print(s) A.  3 B.  4 C.  5 D.  6 13. 已知有n本按照书名拼音排序好的图书,使用对分查找法搜索其中任何一本书,最多查找次数为6次,则n的值可能为?( ) A.  20 B.  50 C.  80 D.  110 14. 某程序代码设计如下,若输入整数5,则最终输出的结果为?( ) def fact(x):     if x==1:         s=1     else:         s=fact(x-1)*x     return s n=int(input("请输入一个大于1的整数:")) print(fact(n)+fact(n-1)) A.  120 B.  24120 C.  144 D.  12024 15. 用匿名函数方式求两个数中较大的数,下列定义语句格式正确的是?( ) A.  result = lambda 'x,y': y if x> y else x B.  result= lambda x,y: y if x> y else x C.  result= lambda 'x,y': x if x> y else y D.  result= lambda x,y: x if x> y else y 16. 下列程序段的正确运行结果是?( ) def fun(m,n):     while m!=n:         if m>n:             m=m-n         else:             n=n-m     return m print(fun(24,16)) A.  4 B.  8 C.  -8 D.  2 17. 运行下列程序,输出结果正确的是?( ) def fun(x,y=5):     return x*y a=fun(10,10) print(a) A.  100 B.  50 C.  10 D.  运行出错 18. 如果需要在某函数内部调用上一层的局部变量,则可以使用( )关键字。 A.  Local B.  nonlocal C.  global D.  nonglobal 19. 在Python程序中,设已定义函数op,它有一个整型传值参数,一个字符串型传值参数。设x,y为整型变量,z为字符串型变量,则下列能调用该函数的正确语句是?( ) A.  op B.  op(x,y,z) C.  op x,y D.  op(x+y,z) 20. 下列哪个语句段的时间复杂度最低?( ) A.  if n%2==0:     x=x*2 else:     x=x+2 B.  n=1 while n<=100:     x=x+2 C.  for i in range(100):     for j in range(10):         x=x+2 D.  for i in range(100):     for j in range(i):         x=x+2 21. 下列哪个不是Python中的内建函数?( ) A.  asc(x) B.  ord(x) C.  chr(x) D.  abs(x) 22. 关于函数的定义语句,以下几项中正确的是?( ) A.  def f(c=2,a,b): B.  def f(a,b=2,c): C.  def f(*c,**d,a,b): D.  def f(a,b,*c,**d): 23. 下列关于递归的描述不正确的是?( ) A.  递归函数一定包含条件控制语句 B.  递归函数一定包含调用自身的语句 C.  在调用自身函数时需要明确的边界终止条件 D.  递归算法一般代码简洁,执行效率高,空间复杂度低 24. 下列哪个不是Python第三方库的pip安装方法?( ) A.  使用pip命令 B.  使用wheel命令 C.  集成安装方法 D.  文件安装方法 25. 对于下列递归式子,当n=4时,F的值是?( ) F(n)=F(n-1)+3    F(1)=2 A.  2 B.  5 C.  11 D.  14 二、判断题(共10题,每题2分,共20分) 26. def add(a, b, c=0):     return a+b+c print(add(1, 2, 4)) 这段程序的运行结果为3。 27. 算法复杂度分析的目的是分析算法的效率,以求改进。 28. sum=0 for i in range(5):     sum=sum+i print(sum) 运行以上程序,输出结果是15。 29. 已有函数def demo(*p):return sum(p),表达式 demo(1, 2, 3, 4) 的值为10。   30. 使用python -m pip install --upgrade pip命令能够升级pip。   31. 在python函数中,局部变量不能与全局变量重名。   32. 下列程序段返回的值为“Hello!Python”。 lst="Hello!Python" def f():     global lst     lst="Hello!"     return lst f() print(lst)   33. 使用分治算法求解,子问题不能重复。   34. 设计一个程序来求xn(x的几次方)的值,算法思想是:把xn转换为x*xn-1,而xn-1又可以转换为x*xn-2,如此重复下去,直到x*x0,而x0=1,从而求出了xn的值。这个程序可以用递归来实现。 35. 下列程序段能正确打印1。 def f(a,b):     a=a+b     b=a-b     a=a-b     return b print(F(1,4)) 三、编程题(共3题,共30分) 36. 利用分治思想,给定一个顺序表,编写一个求出其最大值的程序。 根据上述算法思想,补全下列代码。 输入输出示例:当顺序表是 [22,13,34,4,68,15,5,58,36],输出:68 def fun_max(num=list):     return max(num) def fun(num):     n =    ①        if n <= 2:         return    ②        l_list, r_list = num[:n//2], num[n//2:]     l_max, r_max =    ③        return fun_max(   ④   ) if __name__ == "__main__":     alist = [22,13,34,4,68,15,5,58,36]     print(fun(alist))   37. 现有n个人依次围成一圈玩游戏,从第1个人开始报数,数到第m个人出局,然后从出局的下一个人开始报数,数到第m个人又出局,...,如此反复到只剩下最后一个是胜利者。设n个人的编号分别为1,2,...,n,打印出局的顺序。 根据上述算法思想,补全下列代码。 输入输出示例:当n=10,m=4,输出如下: 出局的人是: 4 出局的人是: 8 出局的人是: 2 出局的人是: 7 出局的人是: 3 出局的人是: 10 出局的人是: 9 出局的人是: 1 出局的人是: 6 最后胜利者是: 5 def fun(n,k):     L = list(   ①   )     if n == 1:         return     else:         x = 0         for i in    ②                x =   ③   - 1             print('出局的人是:',L[x])             del L[x]             if x < 0:                 x = 0         print('最后胜利者是:',   ④   ) fun(10,4)   38. 设计一个算法,将一个正整数分解质因数。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,输出即可。 (2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 根据上述算法思想,补全下列代码。 输入输出示例:当n=105,输出:105= 3*5*7          当n=60,输出:60= 2*2*3*5 def fun(n):     print('%d='%n,end=' ')     for i in    ①   :         while n!=i:             if n>i and   ②   :                 print(i,end='*')                    ③                else:                 break         else:                ④                break if __name__ == "__main__":     while True:         num=input("输入一个正整数:")         if not num.isdigit():             break         fun(int(num))   参考答案及解析: 一、单选题 1. 答案:D - 解析:对于不超过100个元素的有序数列,使用二分查找最多需要查找7次,因为\(2^7 = 128\gt100\)。 2. 答案:C - 解析:函数`f`中遍历4到50中所有4的倍数,如果该数同时能被6整除,则计数器`c`加1。4到50中能被6整除的4的倍数有12、24、36、48,共4个。 3. 答案:C - 解析:递归函数,第`n`个人分到的苹果数等于第`n - 1`个人分到的苹果数加2。 4. 答案:A - 解析:斐波那契数列,输入8,第8项应为21,不是20。该程序用递归实现,缺少`return s`会报错,`n`是形参。 5. 答案:D - 解析:函数不一定有参数和返回值;函数中修改形参变量的值,实参变量的值不一定被修改,与参数传递方式有关;参数的值是否改变与参数类型和操作都有关;函数的形参在函数被调用时获得初始值。 6. 答案:D - 解析:递归不一定比递推运行速度快,递归可能会有很多重复计算,占用更多内存和时间。 7. 答案:C - 解析:函数体内变量a的值为2,添加到了列表c中,b和c指向同一个列表地址,因此列表b也随之改变。 8. 答案:C - 解析:`turtle.circle()`可以画圆,也可以画弧形,有多个参数可以设置。 9. 答案:B - 解析:分治算法的思想是将一个大问题分解为多个小问题,分别求解小问题,再合并结果得到大问题的解。小明找假金币的方法是将问题不断分解,与分治算法相似。 10. 答案:D - 解析:函数`f`遍历字符串,统计连续的数字字符的长度,取最长的长度。在给定字符串中,最长的连续数字字符长度为3。 11. 答案:A - 解析:函数是可重复使用的代码段,用于实现单一或相关联的功能;函数不一定要有`return`语句;函数提高了代码的模块性和利用率;函数内容以`def`关键字起始,代码块需要缩进。 12. 答案:C - 解析:函数中当`i`是3的倍数或者`s`是奇数时,执行`s = s + i`。当`i`从1增加到9时,满足条件的`i`有1、3、5、7、9,所以语句被执行5次。 13. 答案:B - 解析:对规模为n的数据进行对分查找时,无论是否查找到,至多进行 |log2n|+1次(|log2n|表示小于等于log2n的最大整数),因此25≤n<26,即32≤n<64。。 14. 答案:C - 解析:由于fact(5)=fact(4)*5, fact(4)=fact(3)*4, fact(3)=fact(2)*3, fact(2)=fact(1)*2, fact(1)=1,所以fact(5)+fact(4)=120+24=144。 15. 答案:D - 解析:匿名函数的定义语法:lambda 参数:表达式语法。先写lambda关键字,然后依次写匿名函数的参数,多个参数中间用逗号连接,然后是一个冒号,冒号后面写返回的表达式。 16. 答案:B - 解析:函数`fun`使用辗转相减法求两个数的最大公约数。24和16的最大公约数是8。 17. 答案:A - 解析:函数`fun`有一个必选参数`x`和一个可选参数`y`,默认值为5。调用`fun(10,10)`时,返回`10*10 = 100`。 18. 答案:B - 解析:`nonlocal`关键字用于在函数内部引用上一层的局部变量。 19. 答案:D - 解析:在调用自定函数时需要用到“函数名<参数表>”的方法,且自定义函数op共有两个参数。 20. 答案:A - 解析:选项A是简单的条件判断,时间复杂度为常数级别;选项B是简单的循环,时间复杂度为O(n);选项C是两层嵌套循环,时间复杂度为O(n^2);选项D也是两层嵌套循环,但内层循环次数不确定,时间复杂度也高于选项A。 21. 答案:A - 解析:Python中没有`asc(x)`这个内建函数。`ord(x)`返回字符的 ASCII 值,`chr(x)`根据 ASCII 值返回字符,`abs(x)`返回数字的绝对值。 22. 答案:D - 解析:在 Python 中,函数定义时参数的顺序是必选参数、默认参数、可变参数(`*args`)、关键字参数(`**kwargs`)。 23. 答案:D - 解析:递归算法一般代码简洁,但执行效率不一定高,因为可能存在很多重复计算,空间复杂度也可能较高。 24. 答案:B - 解析:Python 第三方库的安装方法有使用`pip`命令、集成安装方法和文件安装方法。 25. 答案:C - 解析:根据递归式子,F(2)=F(1)+3=2+3=5,F(3)=F(2)+3=5+3=8,F(4)=F(3)+3=8+3=11。 二、判断题: 26. 答案:错 - 解析:`add(1, 2, 4)`的结果是1 + 2 + 4 = 7。 27. 答案:对 - 解析:算法复杂度分析的目的就是分析算法的时间复杂度和空间复杂度,以便找到更高效的算法,进行改进。 28. 答案:错 - 解析:`sum = 0`,`for i in range(5)`循环中,`sum = sum + i`,即`sum = 0 + 1 + 2 + 3 + 4 = 10`。 29. 答案:对 - 解析:函数`demo`使用可变参数,`demo(1, 2, 3, 4)`将参数求和,结果为1 + 2 + 3 + 4 = 10。 30. 答案:对 - 解析:`python -m pip install --upgrade pip`命令可以升级`pip`。 31. 答案:错 - 解析:在 Python 函数中,局部变量可以与全局变量重名,但在函数内部,局部变量会覆盖全局变量。 32. 答案:错 - 解析:函数中定义了全局变量`lst`,并将其赋值为`"Hello!"`,返回`lst`,但打印的是全局变量`lst`,在函数调用后,全局变量`lst`的值变为`"Hello!"`,不是`"Hello!Python"`。 33. 答案:对 - 解析:分治算法的子问题之间不可以包含公共的子问题。 34. 答案:对 - 解析:求\(x^n\)的值可以通过递归实现,将问题转化为x * x^{n - 1},直到n = 0时返回1。 35. 答案:错 - 解析:函数`f`中的参数`a`和`b`与调用函数时的参数`1`和`4`没有直接关系,函数中的赋值操作也不会影响外部的变量,所以不能正确打印1。 三、编程题 36.参考答案: 评分标准: ① len(num) 或等效答案; (2分) ② fun_max(num) 或等效答案; (2分) ③ fun(l_list), fun(r_list) 或等效答案;  (2分) ④ [l_max, r_max] 或等效答案;(2分) 解析: ① len(num)获取输入顺序表的长度。 ②当长度小于等于 2 时,直接调用fun_max函数求出最大值。 ③递归调用fun函数分别求出左右两部分的最大值。 ④将左右两部分的最大值组成一个新的列表传入fun_max函数,求出最终的最大值。 参考程序: def fun_max(num=list): return max(num) def fun(num): n = len(num) if n <= 2: return fun_max(num) l_list, r_list = num[:n//2], num[n//2:] l_max, r_max = fun(l_list), fun(r_list) return fun_max([l_max, r_max]) if __name__ == "__main__": alist = [22,13,34,4,68,15,5,58,36] print(fun(alist)) 37.参考答案: 评分标准: ① range(1,n+1) 或等效答案;(3分) ② range(n-1): 或等效答案;(3分) ③ (x + k) % len(L) 或等效答案;(3分) ④ L[0] 或等效答案;(3分) 解析: ①range(1, n + 1)生成从 1 到n的序列,即人员的编号列表。 ②range(n-1)遍历人员列表的索引。 ③ (x + k ) % len(L)根据报数规则确定出局的人的索引,其中% len(L)是为了处理循环报数的情况。 ④L[0]最后剩下的一个人就是胜利者。 试题解析: 参考程序: def fun(n,k):     L = list(range(1,n+1))     if n == 1:         return     else:         x = 0         for i in range(n-1):             x = (x + k) % len(L) - 1             print('出局的人是:',L[x])             del L[x]             if x < 0:                 x = 0         print('最后胜利者是:',L[0]) fun(10,4) 38.参考答案: 评分标准: ① range(2,n+1) 或等效答案;(3分) ② n%i==0 或等效答案;(3分) ③ n=n//i 或等效答案;(2分) ④ print(n) 或等效答案;(2分) 解析: ①range(2, n + 1)从 2 开始遍历到n,因为质因数是大于等于 2 的整数。 ②n % i == 0判断n能否被i整除,如果能整除说明i是n的一个质因数。 ③n = n // i用n除以i的商作为新的n继续寻找质因数。 ④print(n)当n等于i时,说明找到了最后一个质因数,直接输出。 试题解析: 参考程序: def fun(n):     print('%d='%n,end=' ')     for i in range(2,n+1):         while n!=i:             if n>i and n%i==0:                 print(i,end='*')                 n=n//i             else:                 break         else:             print(n)             break if __name__ == "__main__":     while True:         num=input("输入一个正整数:")         if not num.isdigit():             break         fun(int(num)) 学科网(北京)股份有限公司 $$

资源预览图

01 202103青少年软件编程(Python)等级考试试卷(四级)
1
01 202103青少年软件编程(Python)等级考试试卷(四级)
2
01 202103青少年软件编程(Python)等级考试试卷(四级)
3
所属专辑
相关资源
示范课
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。