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

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

内容正文:

青少年软件编程(Python)等级考试试卷(四级) 202212真题与解析 分数:100  题数:38 测试时长:60分钟 一、单选题(共25题,每题2分,共50分) 1.有n个按名称排序的商品,使用对分查找法搜索任何一商品, 最多查找次数为5次,则n的值可能为?( ) A. 5 B. 15 C. 30 D. 35 2.下列有关分治算法思想的描述不正确的是?( ) A. 将问题分解成的子问题具有相同的模式 B. 当问题足够小时,可以直接求解 C. 可以将子问题的结果合并成原问题的解 D. 将问题分解出的各个子问题相互包含,相互之间可以有公共子问题 3.下列问题使用分治算法思想的是?( ) A. 求100以内的素数 B. 求100个整数之和 C. 求斐波那契数列第n项 D. 快速排序算法对n个数排序 4.李宇同学利用Python语言编写了一段“根据出生年月判断生肖属相”的程序,调试运行时, 程序没有报错且顺利运行,但未能正确输出对应属相,造成这个结果的原因可能是?( ) A. 程序语句语法错误 B. 时间复杂度太高 C. 求解算法逻辑错误 D. Python环境配置不对 5.一般来说,递归需要有边界条件、递归前进段和递归返回段。当不满足边界条件时,( ); 当满足边界条件时,( )。 A. 返回,前进 B. 中断,前进 C. 前进,返回 D. 中断,返回 6.以下哪一项不是递归算法的特征?( ) A. 要实现递归必须有一个函数,并且在这个函数体内要自己调用自己。 B. 递归必须要有判断条件,这个判断条件可以是判断次数。 C. 到达判断的条件后必须有返回,目的是结束递归。 D. 未到达判断条件时,不可以返回该函数。 7.关于斐波那契数列,下列空白处的代码填写正确的是?( ) def func(num):     if num==1:         return 1     elif num==2:         return 1     else:                        lst=[] b=input('请输入选择的数字:') b1=int(b) for a in range(1,b1+1):     print(func(a))     lst.append(func(a))     a+=1 print(lst) A. return func(num+1)+func(num-2) B. return func(num-1)+func(num) C. return func(num-1)+func(num-2) D. return func(num-1)+func(num+2) 8.在有序列表[2,3,10,15,20,25,28,29,30,35,40]中,使用二分法查找20, 需要查找多少次能找到?( ) A. 5 B. 4 C. 3 D. 2 9.下列程序输出正确的是?( ) def ac(n):     if n < 0:         return     else:         ac(n-1)         print(n) ac(4) A. 0,1,2,3,4 B. 1,2,3,4 C.  0 1 2 3 D.  1 2 3 4 10.阅读下列程序,运行结果正确的是?( ) def power(x,y):     if y==0:         return 1     else:         return x * power(x,y-1) print(power(4,5)) A. 243 B. 8 C. 1206 D. 1024 11.下载但不安装一个第三方库的命令格式是?( ) A. pip search 第三方库名 B. pip uninstall 第三方库名 C. pip install 第三方库名 D. pip download 第三方库名 12.不需要使用Python的pip工具安装的是?( ) A. Python标准库 B. 第三方库 C. 用户自己开发的库 D. Python扩展库 13.使用lambda定义匿名函数如下:f=lambda x:x+1,则f(f(1))代码运行结果是?( ) A. 1 B. 2 C. 3 D. 会报错 14.关于函数,以下选项中描述错误的是?( ) A. 函数是一段具有特定功能的、可重用的语句组。 B. 函数能完成特定的功能,对函数的调用不需要了解函数内部实现原理,只要了解函数的输入输出方式即可。 C. 使用函数的主要目的是减低编程难度和代码重用。 D. Python 使用“del”保留字定义一个函数。 15.某自定义函数有两个参数,并且这两个参数都指定了默认值。我们在调用这个函数时,最少需要提供几个实参?( ) A. 0 B. 1 C. 2 D. 3   16.以下关于Python中使用函数的描述,错误的是?( ) A. 程序里一定要有main函数。 B. 使用函数前要先定义函数。 C. 函数在被调用时才执行。 D. 函数执行结束后,程序执行流程会自动返回到函数被调用的语句之后。 17.在Python中,函数通过可变参数*args传入的参数,在函数内以哪种数据类型存储?( ) A. 元组 B. 列表 C. 集合 D. 字典 18.下列关于函数调用的说法正确的是?( ) A. 调用函数时一定要赋值。 B. 只要安装成功第三方库,不要导入,就可以直接调用第三方库里的函数。 C. Python内置的标准函数可以多次调用。 D. 函数调用时,如果参数有默认值,就不能给它再赋新的值了。 19.自定义函数的关键字是?( ) A. define B. del C. def D. Dfe 20.下列选项中不能作为自定义函数名的是?( ) A. Int B. _int2 C. str2int D. 2_int 21.函数定义如下: def func(a,b=0,c=0):     pass 下列选项调用错误的是?( ) A. func(1) B. func(1,2) C. func(1, ,3) D. func(1,2,3) 22.下列选项中,函数定义错误的是?( ) A. def afunc(a,b=2): B. def bfunc(a,b): C. def cfunc(a,*b): D. def dfunc(*a,b): 23.运行下列代码,输出结果为?( ) def func(a,b,*args):     print(a)     print(b)     print(args) func(1,2,3,4,5,6) A. 1,2,3,4,5,6 B. 1 2 (3,4,5,6) C. 1 2 [3,4,5,6] D. 1 2 3,4,5,6 24.下列关于函数的说法正确的是?( ) A. 一个函数在同一个程序中最多只能被调用999次 B. 函数的返回值不可以赋值给变量 C. 使用Python内置模块里的函数时,要先导入该模块到当前文件中 D. 调用没有参数的函数时可以不带圆括号 25.下列选项中,不是函数的是?( ) A. max() B. input() C. string() D. sum() 二、判断题(共10题,共20分) 26.计算下面这段程序的时间复杂度为平方阶:O(n^2)。( ) sum1=0 for i in range(101):     sum1+=i   27. 汉诺塔游戏是递归调用的经典案例。( ) 28.递推关系是递归的重要组成。( ) 29.以下命令: pip get pandas 用于下载第三方库pandas,但不马上安装。( ) 30.使用Python语言编程,可以定义一个名叫pass的函数。( ) 31.函数中没有return语句或者return语句不带任何返回值,那么该函数的返回值为True。( )   32.在Python中调用函数的时候,必须将每个实参都关联到函数定义中的每一个形参, 最简单的关联方式就是基于实参的顺序。但也可以通过关键字实参的“关键字-值”方式关联形参, 这时就不必考虑函数调用过程中实参的顺序。( )   33.在Python中,全局变量名和局部变量名一定不能重名。( ) 34.调用函数时,Python将形式参数传递给实际参数。( ) 35.分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题, 这些子问题相互独立且与原问题性质相同。( ) 三、编程题(共3题,共30分) 36.从键盘接收一组不重复整数,并将这组整数按从小到大的顺序排列。 以下程序采取快速排序法对这组整数进行排序。 快速排序法的原理是: (1)取这组数据中间那个数为锚定值mid; (2)从这组数据开头往右找,遇到比mid大的数则停下,位置记为i; (3)从这组数据末尾往左找,遇到比mid小的数则停下,位置记为j; (4)如果此时i仍在j左边,即i<=j,则交换这两个数; (5)重复(2)~(4)直到i、j重合; (6)对i左边的数进行快速排序; (7)对右边的数进行快速排序。 输入示例: 请输入需要排序的一组整数,数与数之间用空格隔开:6 10 11 8 4 1 9 7 输出示例: 排序结果:1 4 6 7 8 9 10 11  程序模板: def QuickSort(left,right):     if            ①           :         return     mid=Numbers[left+(right-left)//2]     i=left     j=right     while i<j:         while Numbers[i]<mid:             i+=1         while Numbers[j]>mid:             j-=1         if i<=j:                     ②                    QuickSort(left,j-1)         QuickSort(i+1,right)  Numbers=list(map(int,input("请输入需要排序的一组整数,数与数之间用空格隔开:").           ③           )) QuickSort(0,           ④           ) print("排序结果:",end="") for i in Numbers:     print(i,end=" ") 37.鸡兔同笼是中国古代的数学名题之一。大约在1500年前,《孙子算经》中就记载了这个有趣的问题。 书中是这样叙述的: 今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何? 意思是:有若干只鸡兔同在一个笼子里(笼中最少有一只鸡和一只兔), 从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔? 今天我们用编程的方法来求解一下这道数学命题吧。 def ji_tu(head,leg):     j=0     t=0     while j<head:         j += 1         t =            ①                    if (leg==           ②           ):             print('有鸡{}只,有兔子{}只。'.format(           ③           ))     return (j,t) while True:     try:         sum_head=int(input('请输入总头数:'))         sum_leg=int(input('请输入总脚数:'))         if            ④           :             print('输入鸡和兔子的总头数或总脚数错误,请重新输入!')         else:             ji_tu(           ⑤           )     except:         print('能不能正常输入数据?') 38.有一个游戏:有两个人,第一个人先从1和2中挑一个数字,第二个人可以在对方的基础上选择加1或者加2,然后又轮到第一个人,他也可以选择加1或者加2,之后再把选择权交给对方,就这样双方交替地选择加1或者加2,谁先加到20,谁就赢了。在不考虑谁输谁赢的情况下,从一开始(以1或2为起点)加到20,有多少种不同的递加过程? 比如1,4,7,10,12,15,18,20算一种; 2,5,8,11,14,17,20又是一种。那么一共会有多少种这样的过程呢? 我们可以用递归算法来解决这个问题,请补全代码。 def guo_cheng(n):     if             ①           :         return 1     return            ②            # 输出所有过程的个数 print (guo_cheng(           ③           )) 参考答案及解析: 一、单选题 1. 答案:C - 解析:对分查找法在最坏情况下,查找次数为 log₂(n) + 1,当查找次数为 5 时,n 的值在 2⁴到 2⁵之间,30 在这个范围内。 2. 答案:D - 解析:分治算法将问题分解出的各个子问题相互独立,不可以有公共子问题。 3. 答案:D - 解析:快速排序算法是典型的分治算法,将问题分解成子问题,分别排序后再合并。求 100 以内的素数、求 100 个整数之和、求斐波那契数列第 n 项都不适合用分治算法。 4. 答案:C - 解析:程序没有报错且顺利运行,但未能正确输出对应属相,最可能的原因是求解算法逻辑错误。语法错误会导致程序报错;时间复杂度高不一定导致结果错误;Python 环境配置不对会导致程序无法运行。 5. 答案:C - 解析:当不满足边界条件时,递归前进;当满足边界条件时,递归返回。 6. 答案:D - 解析:未到达判断条件时,也可以返回该函数,比如在递归过程中可能会有提前返回的情况。 7. 答案:C - 解析:斐波那契数列的定义是从第三项开始,每一项都是前两项之和,即`return func(num - 1) + func(num - 2)`。 8. 答案:B - 解析:有序列表[2,3,10,15,20,25,28,29,30,35,40],用二分法找 20,第一次中间是 25,小于 25 左找;第二次中间 10,大于 10 右找;第三次中间 15,大于 15 右找;第四次找到 20,答案 B,查 4 次。 9. 答案:C - 解析:依次输出0-4,print()默认换行。 10. 答案:D - 解析:函数`power`是计算`x`的`y`次方,`power(4, 5)=4 * power(4, 4)=4 * 4 * power(4, 3)=...=4 * 4 * 4 * 4 * 4=1024`。 11. 答案:D - 解析:`pip download 第三方库名`可以下载但不安装第三方库。 12. 答案:A - 解析:Python 标准库是随 Python 安装一起提供的,不需要使用`pip`工具安装。第三方库、用户自己开发的库和 Python 扩展库通常需要使用`pip`安装。 13. 答案:C - 解析:`f = lambda x: x + 1`,`f(1)`返回`2`,`f(f(1))`即`f(2)`返回`3`。 14. 答案:D - 解析:Python 使用`def`保留字定义一个函数,不是`del`。 15. 答案:A - 解析:当函数的参数都指定了默认值时,调用函数可以不提供实参。 16. 答案:A - 解析:Python 程序里不一定要有`main`函数。 17. 答案:A - 解析:函数通过可变参数`*args`传入的参数,在函数内以元组的形式存储。 18. 答案:C - 解析:调用函数时不一定要赋值;安装第三方库后需要导入才能调用其中的函数;函数调用时,如果参数有默认值,可以给它再赋新的值。Python 内置的标准函数可以多次调用。 19. 答案:C - 自定义函数的关键字是`def`。 20. 答案:D - 自定义函数名不能以数字开头。 21. 答案:C - 函数调用时实参的传递方式错误,不能写成`func(1,,3)`这种形式。 22. 答案:D - 定义函数时可变参数`*a`不能在关键字参数`b`之后。 23. 答案:B - 函数`func`接收三个参数,前两个是普通参数,后面的可变参数以元组形式存储,输出结果为`1 2 (3, 4, 5, 6)`。 24. 答案:C - 一个函数在同一个程序中可以被多次调用,没有次数限制;函数的返回值可以赋值给变量;使用 Python 内置模块里的函数时,要先导入该模块到当前文件中;调用没有参数的函数时也需要带圆括号。 25. 答案:C - `max()`、`input()`、`sum()`都是函数,而`string`不是函数,应该是`str`。 2、 判断题 26. 答案:错 - 这段程序的时间复杂度为 O(n),不是平方阶。 27. 答案:对 - 汉诺塔游戏是递归调用的经典案例。 28. 答案:对 - 递推关系是递归的重要组成部分。 29. 答案:错 - `pip get pandas`不是用于下载第三方库但不安装的命令。 30. 答案:错 - 在 Python 中不能定义一个名叫`pass`的函数,因为`pass`是关键字。 31. 答案:错 - 函数中没有`return`语句或者`return`语句不带任何返回值,那么该函数的返回值为`None`。 32. 答案:对 - 在 Python 中调用函数时,可以基于实参的顺序关联形参,也可以通过关键字实参的“关键字 - 值”方式关联形参,这时就不必考虑实参的顺序。 33. 答案:错 - 在 Python 中,全局变量名和局部变量名可以重名。 34. 答案:错 - 调用函数时,Python 将实际参数传递给形式参数。 35. 答案:对 - 分治算法的基本思想是将一个规模为 N 的问题分解为 K 个规模较小的子问题,这些子问题相互独立且与原问题性质相同。 三、编程题 36.参考答案:                  评分标准: (1)left>=right;(2分) (2)Numbers[i],Numbers[j]=Numbers[j],Numbers[i];(2分) (3)split();(2分) (4)len(Numbers)-1。(2分) 试题解析: ①处填left>=right: 在快速排序算法中,当子列表的左边界大于等于右边界时,说明这个子列表只有一个元素或者没有元素,无需再进行排序操作,直接返回。 ②处填Numbers[i],Numbers[j]=Numbers[j],Numbers[i]: 当在循环中找到满足条件的两个位置`i`和`j`(即`Numbers[i]>=mid`且`Numbers[j]<=mid`,同时`i<=j`)时,交换这两个位置的元素,以实现将小于锚定值的元素移到左边,大于锚定值的元素移到右边的目的。 ③处填split():`input`函数获取用户输入的字符串后,使用`split()`方法可以按照空格将字符串分割成多个子字符串,这样就可以将输入的一组用空格隔开的整数转换为多个字符串形式的数字。 ④处填len(Numbers)-1:在调用快速排序函数`QuickSort`时,需要传入整个列表的范围。初始调用时,左边界为 0,右边界为列表长度减 1,这样可以确保对整个列表进行排序操作。 37.参考答案: 评分标准: (1)head-j ;  (2分) (2)(j*2+t*4);  (3分) (3)j,t; (2分)           (4)sum_head<2 or sum_leg<6 ;  (3分) (5)sum_head,sum_leg。  (2分) 试题解析: ①处填head - j: 在求解鸡兔同笼问题时,已知总头数为`head`,设鸡的数量为`j`,那么兔子的数量就是总头数减去鸡的数量,即`t = head - j`。 ②处填(j*2 + t*4): 因为每只鸡有两只脚,每只兔子有四只脚,所以总脚数等于鸡的数量乘以 2 加上兔子的数量乘以 4,这里已知鸡的数量为`j`,兔子数量`t = head - j`,所以总脚数为`(j*2 + (head - j)*4)`,化简后为`(j*2 + t*4)`。 ③处填j,t: 当找到满足条件的鸡和兔子的数量时,使用字符串格式化输出结果,分别输出鸡的数量`j`和兔子的数量`t`。 ④处填sum_head<2 or sum_leg<6: 鸡兔同笼问题中至少有一只鸡和一只兔,所以总头数应该大于等于 2,总脚数应该大于等于 6(一只鸡两只脚,一只兔子四只脚)。并且由于输入的总脚数应该是偶数(鸡和兔子的脚数都是偶数),所以这里的判断条件是`sum_head<2 or sum_leg<6`(这个条件不是唯一的,也可以写成`sum_head <= 1 or sum_leg <= 4 or sum_leg % 2!= 0`等类似的条件)。 ⑤处填sum_head,sum_leg: 调用函数`ji_tu`时,传入输入的总头数和总脚数,即`sum_head`和`sum_leg`。 38.参考代码: 评分标准:  (1)n==1 or n==2;(3分) (2)guo_cheng(n-1)+guo_cheng(n-2) ;(4分)           (3)20。(3分) 试题解析: ①处填n==1 or n==2: 在这个游戏中,当数字为 1 或 2 时,这是起始状态,只有一种方式可以到达这两个数字,所以当`n`等于 1 或 2 时,函数返回 1。 ②处填guo_cheng(n - 1) + guo_cheng(n - 2): 当数字大于 2 时,到达当前数字`n`的方式有两种情况,一种是从`n - 1`通过加 1 到达`n`,另一种是从`n - 2`通过加 2 到达`n`。所以到达`n`的不同过程数就等于到达`n - 1`的过程数加上到达`n - 2`的过程数,通过递归调用函数`guo_cheng`来实现。 ③处填20: 问题要求计算从一开始加到 20 的不同递加过程数,所以在调用函数`guo_cheng`时传入参数 20,即`guo_cheng(20)`,这样就能得到从 1 或 2 开始加到 20 的不同过程总数。           ​ 学科网(北京)股份有限公司 $$

资源预览图

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