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

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

内容正文:

青少年软件编程(Python)等级考试试卷(四级) 202206真题与解析 分数:100  题数:38 测试时长:60分钟 一、单选题(共25题,每题2分,共50分) 1.有如下Python程序,包含lambda函数,运行该程序后,输出的结果是?( ) g = lambda x,y:x*y print(g(2,3)) A. 2 B. 3 C. 6 D. 8 2.运行下列程序,输出的结果是?( ) def dtox(x,base = 2):     s = []     while x>0:         s.append(x % base)         x = x // base     return s print(dtox(11)) A. 程序出错 B. 1101 C. [1, 1, 0, 1] D. [1, 0, 1, 1] 3.下列哪项不是函数的优点?( ) A. 提高代码的复用率。 B. 使得程序简洁,程序功能清晰。 C. 便于程序的修改,便于扩展。 D. 代码运行速度更快。 4.下列关于函数的描述正确的是?( ) A. 函数内的语句不会改变任何非全局变量的值。 B. 传入函数的参数都会以副本的形式存在函数中。 C. 函数的名称不能与Python的保留字相同。 D. 每个函数必须有一个return语句。 5.Python中自定义函数的关键字是?( ) A. sub B. def C. function D. void 6.运行下列程序,输出的结果是?( ) def nxs(x):     s = 0     while x:         s = s * 10 + x % 10         x //= 10     return s print(nxs(106)) A. 106 B. 610 C. 160 D. 601 7.Python编写的自定义函数dy,执行该程序段后,输出的结果是?( ) def dy(x,y):     return x>y print(dy(10,20)) A. 10 B. 20 C. False D. True 8.在函数中有一种叫空函数。 构造一个空函数,下面的横线处应填?( ) def  函数名( ):     ______________ A. None B. return None C. pass D. empty 9.下列代码的输出结果是?( ) def fun(a,b):     t = a     a = b     b = t     print(a, b) fun(pow(3,2),pow(2,3))   #pow(x,y)返回x**y的值 A. 3 2 B. 8 9 C. 2 3 D. 9 8 10.函数中用return [表达式] 结束函数,选择性地返回一个值给调用方,有时不带表达式的return相当于返回?( ) A. 0 B. None C. 1 11.对于下面的函数: def f(x,z,y=2):     print(x+y+z) 用f(1,2,3)和f(1,2)两个调用语句,运行结果分别是?( ) A. 都是5 B. 6和5 C. 都是6 D. 5和6 12.下列这段程序的打印结果是?( ) def demo(item,lis=[]):     lis=[]     lis.append(item)     return lis print(demo('a'),end='') print(demo('b')) A. ['a']['a', 'b'] B. ['a']['b'] C. [][] D. [ ]['b'] 13.函数如下: def showNumber(numbers):     for n in numbers:         print(n) 下面哪个选项在调用该函数时会报错?( ) A. showNumber([2,4,5]) B. showNumber('abcesf’) C. showNumber(3.4) D. showNumber((12,4,5)) 14.下列关键字中,用来导入第三方库的是?( ) A. include B. from C. import D. continue 15.以下选项中,不属于第三方库安装工具pip能够实现的功能是?( ) A. 安装一个第三方库。 B. 卸载已经安装的第三方库。 C. 修改已经安装的第三方库。 D. 查询已经安装的第三方库。 16.关于评价算法的优劣,以下说法正确的是?( ) A. 只要考虑是否得出正确答案。 B. 只要考虑算法的执行时间。 C. 只要考虑算法所占用的空间。 D. 从算法执行时间和需占用的空间两方面考虑。 17.下列程序实现求菲波那契数列第4项的值: def f(n):     if n==1 or n==2:         return 1     elif n>2:         return f(n-1)+f(n-2)     else:         return -1 print(f(4)) 请问:这种解决方法属于哪种算法?( ) A. 归纳 B. 列举 C. 递推 D. 递归 18.著名的菲波那契数列为1,1,2,3,5,8,……。即除开始的两项为1外,其余每一项均为前两项之和。 下面的程序实现计算该数列的第4项值的大小。 n,a,b=4,1,1 if n==1:     print("第%d个数为%d。"%_____(1)______) if n==2:     print("第%d个数为%d。"%(n,b)) if n>2:     for i in range(2,n):         result=a+b         a,b=b,result print("第%d个数为%d。"%(n,result)) 请问:横线(1)所在位置不适合填入以下哪个选项?( ) A. (n,1) B. (n,a) C. (n,b) D. (a,n) 19.运行下列程序,输出的结果是?( ) def f(n):     if n==1:         return 1     else:         return f(n-1)+(n-1)*f(n-1) print(f(4)) A. 64 B. 24 C. 4 D. 16 20.已知Pell数列定义如下: 第5项的值是?( ) A. 29 B. 30 C. 12 D. 32 21.运行下列程序,输出的结果是?( ) def Pell(n):     if n==1:         return 1     if n==2:         return 2     if n>=3:         return 2*Pell(n-1)+Pell(n-2) print(Pell(4)) A. 12 B. 4 C. 3 D. 24 22.运行下列程序,输出的结果是?( ) def f(n):     if n==1 or n==2:         return 1     elif n>2:         return f(n-1)+f(n-2)     else:         return -1 print(f(-2)) A. -2 B. -1 C. 出错 D. 1 23.在1-20之间玩猜数字的游戏时,如果采用二分法的策略,并且给‘大了’或‘小了’的提示,最差的情况下多少次就可以猜中?( ) A. 5 B. 10 C. 15 D. 20 24.下列选项中,哪一项不是分治算法的特征?( ) A. 问题的规模缩小到一定程度就可以容易解决。 B. 该问题分解出的子问题的解可以合并为该问题的解。 C. 各个子问题必须分解到不能分解为止。 D. 该问题具有最优子结构性质。 25.下列排序算法中利用了分治算法思想的是?( ) A. 冒泡排序 B. 插入排序 C. 选择排序 D. 快速排序 二、判断题(共10题,共20分) 26.Python中自定义函数的代码需要写在调用该函数之前。( ) 27.Python定义函数时,可选参数必须写在非可选参数后面。( ) 28.Python中编写函数时,必须指明该函数的返回值。( ) 29.用户自定义函数是用户自己写的一段程序,一般包括函数名、参数、返回值、函数体等四部分。其中,函数名和参数是必不可少的部分。( ) 30.自定义函数def块中的代码不是主程序的一部分,运行会跳过该段代码。( ) 31.算法优化主要是为了减少冗余数据,优化时间复杂度和空间复杂度。( ) 32.在Python中使用爬虫技术抓取网站信息需要用到第三方库。( ) 33.对于递归而言,递推与回归,二者缺一不可。( ) 34.递归算法跟递推算法是一样的,都在重复调用。( ) 35.使用分治算法解决问题的一般步骤是分解、求解、合并。( ) 三、编程题(共3题,共30分) 36.字符加密。将大写字母逐个按其ASCII值转换为7位二进制数,并在最左边补0,使得每个字母转换为8位二进制数,然后将8位二进制数每四位转为十六进制数。如明文是"CIE",加密后的密文是"434945"。编写的python程序如下,完善划线处的代码。  def xtob(n): #将整数转为二进制数      if n <= 1:          return str(n)      return  xtob(n//2)+  ①    mingwen = "CIE"  he = '0123456789ABCDEF'  rst = ''  for c in mingwen:    s = "0" + xtob(ord(c)) #将明文转为8位二进制数     i = 0     data = 0    while i < 8:       data =data * 2 +  ②         if (i + 1) % 4 == 0:            rst = rst + he[data]            data = 0           ③    print('密文是:',rst) 37.辗转相除法求最大公约数,下列函数是用递归算法实现的,请完善横线处的代码。 def gcd(a,b):     m=a%b     if m==0:         return      ①          else:         a=b             ②               return       ③      print(gcd(12,18))  38.下面的程序运用分治算法寻找列表中的最大值。请将空格补全代码。 #子问题规模小于或等于2时 def zui_da_zhi(a_list):     if   ①   :         if a_list[0]>=a_list[1]:             most=a_list[0]         else:             most=a_list[1]     else:         most=a_list[0]     return most # 分治算法排序 def fen_zhi(init_list):     n=len(init_list)     if n<=2:                  #若问题规模小于或等于2,解决         return zui_da_zhi(init_list)     #分解(子问题规模为n/2)     left_list,right_list=   ②        #递归,分治     left_max,right_max=   ③        #合并     return zui_da_zhi([left_max,right_max]) #测试数据 test_data=[12,25,4,47,69,5,4,6,37,89,21] print('最大值为:',fen_zhi(test_data)) 参考答案及解析: 一、单选题 1. 答案:C - 解析:这里是一个匿名函数,当传入参数2和3时,计算2*3=6。 2. 答案:C - 解析:函数dtox有一个位置参数x,一个默认值参数base,默认值是2,本函数的功能是将参数x转换成base进制,保存列表s返回。本程序将参数11转换成二进制后的结果,因此选C。 3. 答案:D - 解析:函数可以提高代码的复用率、使程序简洁清晰、便于修改和扩展,但不一定能使代码运行速度更快。 4. 答案:C - 解析:函数内的语句可能会改变全局变量的值;传入函数的参数在函数中有自己的存储位置,但不一定是副本形式;函数名不能与Python保留字相同;函数不一定要有`return`语句。 5. 答案:B - Python中自定义函数的关键字是`def`。 6. 答案:D - 自定义函数nxs功能将参数x各位数字逆序拼接成新的整数,即将106,拼接成(6*10+0)*10+1,即601,选D。 7. 答案:C - 函数`dy`比较两个数的大小并返回布尔值,10小于20,所以返回`False`。 8. 答案:C - 构造空函数可以使用`pass`语句。 9. 答案:B - 函数`fun`交换两个参数的值并输出,`pow(3, 2)=9`,`pow(2, 3)=8`,交换后输出8和9。 10. 答案:B - 不带表达式的`return`相当于返回`None`。 11. 答案:B - 函数`f`有一个默认参数`y=2`,当调用`f(1, 2, 3)`时,计算1+3+2=6;调用`f(1, 2)`时,使用默认参数计算1+2+2=5。 12. 答案:B - 函数`demo`每次调用都会创建一个新的空列表并添加参数,所以输出`['a']['b']`。 13. 答案:C - 函数`showNumber`接收可迭代对象作为参数,3.4不是可迭代对象,调用时会报错。 14. 答案:C - `import`关键字用来导入第三方库。 15. 答案:C - `pip`工具可以安装、卸载、查询第三方库,但不能修改第三方库。 16. 答案:D - 评价算法的优劣需要从算法执行时间和需占用的空间两方面考虑。 17. 答案:D - 程序通过递归调用自身来计算菲波那契数列的值。 18. 答案:D - 当`n==1`时,应该输出`第1个数为1`,所以不能填入`(a,n)`。 19. 答案:B - 函数`f`是递归函数,计算f(4)=f(3)+3f(3)=4(f(3))=4(f(2)+2f(2))=12(f(2)) =12(f(1)+f(1))=12*2=24 20. 答案:A - 根据题目中给出的递推公式计算可得第5项的值是29。 21. 答案:A - 函数`Pell`通过递归调用自身计算数列的值,`Pell(4)=2*Pell(3)+Pell(2)=2*(2*Pell(2)+Pell(1))+Pell(2)=2*(2*2+1)+2=12`。 22. 答案:B - 当`n<1`时,函数返回-1。 23. 答案:A - 在1-20之间采用二分法猜数字,最多需要5次(2⁴<20<2⁵)。 24. 答案:C - 分治算法中各个子问题不一定必须分解到不能分解为止。 25. 答案:D - 快速排序利用了分治算法思想。 二、判断题 26. 答案:对 - Python中自定义函数的代码需要写在调用该函数之前。 27. 答案:对 - Python定义函数时,可选参数必须写在非可选参数后面。 28. 答案:错 - Python中编写函数时,不一定要指明该函数的返回值。 29. 答案:错 - 用户自定义函数一般包括函数名、参数、返回值、函数体等四部分,但参数和返回值不是必不可少的部分。 30. 答案:对 - def块中的代码并不是主程序的一部分,程序运行时会跳过这一部分,从def块以外的第一行代码开始运行。 31. 答案:对 - 算法优化主要是为了减少冗余数据,优化时间复杂度和空间复杂度。 32. 答案:对 - 在Python中使用爬虫技术抓取网站信息需要用到第三方库,如`requests`、`BeautifulSoup`等。 33. 答案:对 - 对于递归而言,递推与回归二者缺一不可。 34. 答案:错 - 递归算法和递推算法虽然都有重复调用的特点,但它们的实现方式和思想不同。 35. 答案:对 - 使用分治算法解决问题的一般步骤是分解、求解、合并。 三、编程题 36.参考答案: 参考程序: def xtob(n): #将整数转为二进制数     if n <= 1:         return str(n)     return xtob(n//2)+str(n%2)  mingwen = "CIE"  he = '0123456789ABCDEF'  rst = ''  for c in mingwen:     s = "0" + xtob(ord(c)) #将明文转为8位二进制数     i = 0     data = 0     while i < 8:         data = data * 2 + int(s[i])         if (i + 1) % 4 == 0:             rst = rst + he[data]             data = 0         i += 1  print('密文是:',rst) 解析:本题将每个大写字母转换为二进制数,①处代码是递归的方法将十进制转二进制,若整数不是0或1的时候,继续整除2,因此①处代码是xtob(n//2)+str(n%2);8位二进制数每4位二进制数转十六进制数,因此②处的代码是data * 2 + int(s[i]) ;③处的代码是循环变量i自增1,因此该处代码是i=i+1。 : 评分标准: (1)str(n%2) ; (4分) (2)int(s[i]) ; (4分) (3)i += 1 或i=i+1。 (4分) 37.参考答案: 参考程序: def gcd(a,b):     m=a%b     if m==0:         return b     else:         a=b         b=m         return  gcd(a,b) print(gcd(12,18)) 试题解析: 评分标准: (1)b; (3分) (2)b=m;(3分) (3)gcd(a,b)。(4) 解析:对于①处,当余数m为 0 时,说明此时的除数b就是最大公约数,所以返回b。 对于②处,更新a为b,b为m,准备下一次递归调用。 对于③处,递归调用gcd(a, b),继续用辗转相除法求最大公约数,直到余数为 0 为止。 38.参考答案: 参考程序: #子问题规模小于或等于2时 def zui_da_zhi(a_list):     if len(a_list) == 2:         if a_list[0]>=a_list[1]:             most=a_list[0]         else:             most=a_list[1]     else:         most=a_list[0]     return most # 分治算法排序 def fen_zhi(init_list):     n=len(init_list)     if n<=2:                  #若问题规模小于或等于2,解决         return zui_da_zhi(init_list)     #分解(子问题规模为n/2)     left_list,right_list=init_list[:n//2],init_list[n//2:]     #递归,分治     left_max,right_max=fen_zhi(left_list),fen_zhi(right_list)     #合并     return zui_da_zhi([left_max,right_max]) #测试数据 test_data=[12,25,4,47,69,5,4,6,37,89,21] print('最大值为:',fen_zhi(test_data)) 评分标准: (1)len(a_list) == 2;  (2分) (2)init_list[:n//2],init_list[n//2:];   (3分) (3)fen_zhi(left_list),fen_zhi(right_list)。  (3分) 解析: ①处填len(a_list) == 2:在函数`zui_da_zhi`中,这个条件用于判断传入的列表`a_list`的长度是否为 2。如果长度为 2,就比较这两个元素的大小来确定最大值;如果长度不为 2(在 else 分支中处理),就直接取列表的第一个元素作为最大值(这里可以根据实际情况调整,也可以设定一个初始值然后遍历列表比较来确定最大值)。 ②处填init_list[:n//2],init_list[n//2:]:在函数`fen_zhi`中,这里是将初始列表`init_list`按照中间位置进行分割,分成左右两个子列表。`init_list[:n//2]`表示取列表从开头到中间位置(不包括中间位置)的元素,得到左子列表;`init_list[n//2:]`表示取列表从中间位置到末尾的元素,得到右子列表。 ③处填fen_zhi(left_list),fen_zhi(right_list):在函数`fen_zhi`中,这里是递归地调用函数本身来处理分割后的左右子列表,分别得到左右子列表中的最大值。然后将这两个最大值作为参数传入`zui_da_zhi`函数中,最终确定整个列表的最大值。 学科网(北京)股份有限公司 $$

资源预览图

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