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

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

内容正文:

青少年软件编程(Python)等级考试试卷(四级) 202209真题与解析 分数:100  题数:38 测试时长:60分钟 一、单选题(共25题,每题2分,共50分) 1.下列不是评判一个算法优劣的标准是?( ) A.时间复杂度 B.空间复杂度 C.难易 D.健壮性 2.某自定义函数中使用了3个变量,其中2个变量都指定了默认值,调用该函数时,参数的个数最少为几个?( ) A. 0 B. 2 C. 3 D. 1 3.Python中用于字符与其ASCII码相互转换的内置函数是?( ) A. float() abs() B. pow() format() C.ord() chr() D. round() import() 4.Python中,可以将数字类字符串转换成整数的函数是?( ) A. int( ) B. float( ) C. bool( ) D. class( ) 5.运行下列这段程序,正确的输出结果是?( ) LS = ["apple", "red", "orange"] def funb(a):      LS.append(a) funb("yellow") print(LS) A. ["apple","red","orange"] B. ["apple","red","orange","yellow"] C. [] D. ["yellow"] 6.下列代码的输出结果是?( ) def func(a, b):     c=a**2+b     b=a     return c a=10 b=2 c=func(b,a)+a print(c,b) A. 102 2 B. 24 10 C. 24 2 D. 102 10 7.下列关于函数返回值的描述正确的是?( ) A.函数可以没有返回值,也可以有一个或多个返回值 B.函数定义中最多含有一个return语句 C.在函数定义中用return语句时,至少给一个返回值 D.函数中 return语句只能放在函数定义的最后 8.运行下列这段程序,正确的输出结果是?( ) def reverseA(s):     t=""     for i in range(0,len(s)):            t=s[i]+t      return t print(reverseA("reverse")) A. esrever B. reverse C. rsereve D. Rseveer 9.下列导入pandas模块的方法不正确的是?( ) A. import pandas B. import pandas as p C. import pandas * D. from pandas import * 10.Python中提供了大量的标准库模块,比如利用time模块可以获取计算机的时钟信息,包括日期和时间,若想要实现延时1分钟,则应该使用的语句是?( ) A. sleep(3600) B. time.time(60) C. time.asctime(1) D. time.sleep(60) 11.使用分治算法的基本步骤是?( ) A.分解、解决、合并 B.分解、解决 C.合并、解决 D.合并、解决、分解 12.二分查找法是运用哪种策略实现的算法?( ) A.分治法 B.贪心法 C.回溯法 D.动态规划法 13.下列程序是分治算法的典型应用,其运行结果是?( ) def dividAndConquer(arr,left,right): if (right == left + 1) or (right == left): Return max(arr[left],arr[right])     mid = int((left + right) / 2)    leftMax = dividAndConquer(arr,left,mid)  rightMax = dividAndConquer(arr,mid,right) return max(leftMax,rightMax) arr1 = [8, 1, 14, 19, 5] print(dividAndConquer(arr1,0,4)) A. 1 B. 19 C. 8 D. 5 14.下列程序输出的结果是?( ) def change(a,b):   a=10   b+=a a=4 b=5 change(a,b) print(a,b) A. 4 5 B. 10 5 C. 4 15 D. 10 15 15.下列程序运行的结果是?( ) def a():     print("here") b() a() def b():     print("there") a() b() A.出错 B.死循环 C. here D. here There 16.设函数f定义如下: def f(x,y = 0):     pass 下列选项执行时,出现错误的是?() A. f(,2) B. f(1,2) C. f(1) D.f(1,) 17.下列程序段运行的结果是?( ) def check(x = 2,y = 3):    print(x,y)  check(y=6,x=5) A. 5 6 B. 6 5 C. 2 3 D. 3 2 18.def AddApple(fruit=None):          if fruit is None:                fruit=[]         fruit.append('Apple')     return fruit    AddApple()    AddApple()    print(AddApple(['Pear'])) 以上程序段运行的结果是?() A. ['Pear','Apple'] B. ['Pear','Apple','Apple'] C. ['Apple','Pear','Apple','Apple'] D. ['Apple'] 19.def ThankYou(name): print("感谢%s对公司的贡献!" %name) ThankYou('张三') ThankYou() 以上程序运行的结果是?( ) A.打印输出:感谢张三对公司的贡献! 然后报错:TypeError: ThankYou() missing 1 required positional argument: 'name' B.打印输出: 感谢张三对公司的贡献! 感谢对公司的贡献! C.无法输出。 D.需要增加main函数才能正确运行。 20.编写程序计算1+1/2+1/3+……+1/n的结果,可以使用哪种调用函数自身的算法?( ) A.枚举 B.递归 C.解析 D.分治 21.用下面的程序求解计算s=1+3+5+7+9的值,请选择横线处应填写的代码?( ) def Sum(n):   if n<=1:      return 1   else:     return ________ print(Sum(9)) A. n+Sum(n-1) B. n+Sum(n+1) C. n+Sum(n+2) D. n+Sum(n-2) 22.下列选项中,哪一项不是递归函数必须要具备的条件?( ) A.明确的边界条件 B.边界值 C.循环语句 D.终止条件 23.用递归算法实现5的阶乘,则下方的程序中横线上需要的代码是?( ) def func(n):    if n<_______:        return func(n+1)*n    else:       return 1 print(func(1)) A. 4 B. 5 C. 6 D. 7 24.执行以下代码,程序的输出结果是?( ) def weight(n):    if n==1:        return 100 else:        return weight(n-1) +10 print(weight(3)) A. 100 B. 110 C. 120 D. 130 25.以下关于递归与递推的说法,错误的是?( ) A.递归算法不涉及高深的数学知识,比较容易理解。 B.递归过程一般通过函数或子过程来实现。 C.递归算法是递推分解问题,然后再将最简单情况的解回归成大问题的解。 D.存在既可以用递归算法解决,也可以用递推算法解决的问题。 二、判断题(共10题,共20分) 26.函数中return语句只能放在函数定义的最后。( ) 27.Python定义函数时如果没有参数,也不能省略后面的空括号。( ) 28.函数的参数分为形参和实参两种,函数调用中实参和形参的值可以互相传递。( ) 29.导入模块中指定成员时,可采用的语句是:import 成员名1,成员名2  from  模块名。( ) 30.二分搜索、快速排序可以使用分治算法进行求解。( ) 31.调用带有默认值参数的函数时,不能为默认值参数传递任何值,只能使用函数定义时设定的默认值。( ) 32.在Python中,可以在自定义函数中再定义函数。( ) 33.在定义一个函数时,如果出现调用自身的成分,则称为递推。( ) 34.递归算法通常显得很简洁,因为多次调用自身,所以运行效率较高, 应该大力提倡用递归算法设计程序。( ) 35.同样的问题使用不同的算法编程解决,其时间复杂度可能不一样。( ) 三、编程题(共3题,共30分) 36. 验证哥德巴赫猜想:任意一个大于等于4的偶数总可以分解为两个素数之和。请在下面的横线上补全代码,使得通过键盘输入一个偶数x(x<1000,输出这两个素数。如果有多组解,只需要输出一组,并且第一个素数要尽可能地小。例如,输入“10”,输出“3 7“;输入“18”,输出“5  13”。 def prime(x):    for i in range(2, x):        if x%i == 0:              return      ①          return 1 x=int(input("输入一个偶数x:")) for k in range(    ②      ,x//2+1):      if prime(k) and prime(     ③      ):          print(      ④       )         break 37.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数,例如12321、765567就是回文数。请补全下列代码,编程实现用分治的方法判断一个整数是否是回文数。 def ispel(s):     num = len(    ①    )      if num == 0:           return False     if num == 1:           return True     if num == 2:           return s[0] == ②     else:      return s[0] == s[num - 1] and ispel(s[1:    ③   ]) st = input("请输入一个整数:") if    ④     == True:      print("输入的是回文数") else:     print("输入的不是回文数") 38.小青蛙爬楼梯。楼梯有n级。小青蛙每次只能爬1级或2级。当楼梯只有1级时,青蛙只有1种爬法。当楼梯有2级时,青蛙有2种爬法:一次爬2级;一次爬1级,爬2次。请从键盘上接收楼梯级数n,输出青蛙有几种爬法。 示例输入 请输入楼梯级数:8 示例输出 8级楼梯共有34种爬法。 程序如下: def Climb(n):     if    ①   :            return 1    elif n==2:    ②       else:           return   ③      n=int(input("请输入楼梯级数:")) if n>0:          print("%d级楼梯共有%d种爬法。"%(   ④   ,   ⑤   )) 参考答案及解析: 一、单选题 1. 答案:C - 解析:评判一个算法优劣的标准通常包括时间复杂度、空间复杂度和健壮性等,难易不是评判算法优劣的标准。 2. 答案:D - 解析:当函数中有部分参数指定了默认值时,调用函数时可以不提供有默认值的参数,所以参数个数最少为未指定默认值的参数个数,即1个。 3. 答案:C - 解析:`ord()`函数用于将字符转换为 ASCII 码值,`chr()`函数用于将 ASCII 码值转换为字符。 4. 答案:A - 解析:`int()`函数可以将数字类字符串转换成整数。 5. 答案:B - 解析:函数`funb`向列表`LS`中添加元素,调用函数后列表变为`["apple","red","orange","yellow"]`。 6. 答案:C - 解析:函数`func`计算`a**2 + b`并返回,调用`func(b,a)+a`即`func(2,10)+10=(2**2 + 10)+10=14+10=24`,此时`b`的值仍为2。 7. 答案:A - 解析:函数可以没有返回值,也可以有一个或多个返回值;函数可以有多个`return`语句;`return`语句可以没有返回值;`return`语句可以放在函数的任何位置。 8. 答案:A - 解析:函数`reverseA`通过循环将字符串反转,`reverse`反转后为`esrever`。 9. 答案:C - 导入`pandas`模块的正确方法有`import pandas`、`import pandas as p`、`from pandas import *`,而`import pandas *`这种方式不规范,容易引起命名冲突。 10. 答案:D - `time.sleep(60)`可以实现延时1分钟,`time.sleep()`的参数单位是秒。 11. 答案:A - 分治算法的基本步骤是分解、解决、合并。 12. 答案:A - 二分查找法是运用分治策略实现的算法。 13. 答案:B - 程序是用分治算法求列表中的最大值,给定列表`[8, 1, 14, 19, 5]`,最大值为19。 14. 答案:A - 函数内为局部变量,所以主程序的a、b值并未改变。 15. 答案:A - 第一次调用b的时候,b还未被定义。 16. 答案:A - 函数调用时实参的传递方式错误,不能写成`f(,2)`这种形式。 17. 答案:A - 函数`check`使用关键字参数调用,输出结果为`5 6`。 18. 答案:A - 函数`AddApple`如果没有传入参数则创建一个新列表并添加`Apple`,如果传入参数则在参数列表后添加`Apple`,最后调用`AddApple(['Pear'])`输出`['Pear','Apple']`。 19. 答案:A - 调用`ThankYou('张三')`正常输出,调用`ThankYou()`缺少参数会报错。 20. 答案:B - 计算`1+1/2+1/3+……+1/n`可以使用递归算法,将问题分解为当前项和剩余项的和。 21. 答案:D - 要求解`s = 1 + 3 + 5 + 7 + 9`,可以通过递归的方式,每次将当前的奇数`n`与`n - 2`的结果相加,即`n + Sum(n - 2)`。当`n <= 1`时,返回 1,从而逐步计算出总和。 22. 答案:C - 递归函数必须要具备明确的边界条件和终止条件,当满足边界条件时,函数不再进行递归调用而是直接返回一个确定的值。边界值是在边界条件中具体的数值。而循环语句不是递归函数必须具备的,递归是通过函数自身调用自身来实现重复操作,而不是通过循环语句。 23. 答案:C - if的判断表达式为n<a+1时,程序才能执行到n=a的情况。 24. 答案:C - 这个函数是通过递归计算重量,当`n == 1`时返回 100,否则每次都是前一个重量加上 10。所以`weight(3)`的计算过程是:`weight(2)`是`weight(1)+10 = 110`,`weight(3)`是`weight(2)+10 = 120`。 25. 答案:A。 - 递归算法虽然不涉及高深的数学知识,但是递归思想和模型并不容易理解。 二、判断题 26. 答案:错 - `return`语句可以放在函数的任何位置。 27. 答案:对 - Python定义函数时空括号不可以省略。 28. 答案:错 - 实参的值传递给形参,形参的值不能传递给实参。 29. 答案:错 - 导入模块中指定成员时,可采用的语句是`from 模块名 import 成员名1,成员名2`。 30. 答案:对 - 二分搜索、快速排序可以使用分治算法进行求解。 31. 答案:错 - 调用带有默认值参数的函数时,可以为默认值参数传递新的值。 32. 答案:对 - 在 Python 中,可以在自定义函数中再定义函数。 33. 答案:错 - 在定义一个函数时,如果出现调用自身的成分,则称为递归。 34. 答案:错 - 递归算法通常显得很简洁,但由于多次调用自身,可能存在重复计算,运行效率不一定高。 35. 答案:对 - 同样的问题使用不同的算法编程解决,其时间复杂度可能不一样。 三、编程题 36.参考答案: 参考程序: def prime(x):     for i in range(2, x):         if x%i == 0:             return  0         return 1 x=int(input("输入一个数x:")) for k in range(2,x//2+1):     if prime(k) and prime(x-k):         print(k,x-k)         break 评分标准: (1) 0 或等效答案 ;(3分) (2) 2 或等效答案 ;(3分) (3) x-k 或等效答案 ;(3分) (4) k,x-k 或等效答案 。(3分) 试题解析: ①处填0:在函数`prime(x)`中,遍历从 2 到`x`的数,如果`x`能被`i`整除,说明`x`不是素数,此时返回`0`表示不是素数。如果遍历完都没有找到能整除`x`的数,说明`x`是素数,函数返回`1`。 ②处填2:在寻找满足哥德巴赫猜想的两个素数时,从最小的素数 2 开始遍历。因为素数是从 2 开始的,所以循环从 2 开始尝试可能的第一个素数`k`。 ③处填x - k:对于给定的偶数`x`,如果`k`是一个素数,那么另一个数就是`x - k`。要判断`x`能否分解为两个素数之和,就需要判断`x - k`是否也是素数。 ④处填k, x - k:当找到满足条件的两个素数`k`和`x - k`时,输出这两个素数。用逗号分隔表示两个值同时输出。 37.参考答案: 参考程序: def ispel(s):     num = len(s)      if num == 0:         return False     if num == 1:         return True     if num == 2:         return s[0] == s[1]     else:         return s[0] == s[num - 1] and ispel(s[1:num - 1]) st = input("请输入一个整数:") if ispel(st) == True:     print("输入的是回文数") else:     print("输入的不是回文数") 评分标准: ①  s或等效答案 ;   (2分) ②  s[1]或等效答案 ;  (2分) ③  num-1或等效答案 ; (2分) ④  ispel(st) 或等效答案。(2分) 试题解析: 以下是对每个填空的解释: ①处填s:在函数`ispel(s)`中,需要获取传入参数`s`的长度来判断不同长度情况下是否为回文数,所以这里是`s`。 ②处填s[1]:当字符串长度为 2 时,判断这个长度为 2 的字符串是否为回文数,只需判断第一个字符和第二个字符是否相等,即`s[0] == s[1]`。 ③处填num - 1:当字符串长度大于 2 时,递归调用`ispel`函数,传入的参数应该是去掉首尾字符的子字符串。切片`s[1:num - 1]`表示从第二个字符开始到倒数第二个字符结束的子字符串。 ④处填ispel(str(st)):首先,输入的整数`st`需要转换为字符串形式,然后调用`ispel`函数判断这个字符串是否为回文数。如果判断结果为`True`,说明输入的是回文数;否则不是回文数。 38.参考答案: 参考程序: def Climb(n):     if n==1:         return 1     elif n==2:         return 2     else:         return Climb(n-1)+Climb(n-2) n=int(input("请输入楼梯级数:")) if n>0: print("%d级楼梯共有%d种爬法。"%(n,Climb(n))) 评分标准: (1)n==1;  (2分) (2)return 2; (2分) (3)Climb(n-1)+Climb(n-2); (2分) (4)n; (2分) (5)Climb(n).(2分) 试题解析: ①处填n==1:这是判断当楼梯级数为 1 时的情况。如果楼梯只有 1 级,根据题目描述青蛙只有 1 种爬法,所以当`n == 1`时,函数应该返回 1。 ②处填return 2:当楼梯有 2 级时,青蛙有 2 种爬法,所以在这个条件分支下直接返回 2。 ③处填Climb(n - 1)+Climb(n - 2):对于大于 2 级的楼梯,青蛙可以从`n - 1`级台阶再跨一步上来,或者从`n - 2`级台阶跨两步上来。所以爬`n`级楼梯的方法数等于爬`n - 1`级楼梯的方法数加上爬`n - 2`级楼梯的方法数,通过递归调用`Climb`函数来实现。 ④处填n:在输出语句中,要显示输入的楼梯级数,所以这里填入变量`n`。 ⑤处填Climb(n):这里要显示对应楼梯级数的爬法总数,通过调用`Climb`函数传入`n`来计算并输出。 学科网(北京)股份有限公司 $$

资源预览图

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