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

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

内容正文:

青少年软件编程(Python)等级考试试卷(四级) 202312真题与解析 分数:100  题数:38 测试时长:60分钟 一、单选题(共25题,每题2分,共50分) 1.下列有关分治算法思想的描述不正确的是?( ) A.下列有关分治算法思想的描述不正确的是?( ) B.将问题分解出的各个子问题相互之间有公共子问题。 C.将问题分解出的各个子问题相互之间有公共子问题。 D.可以将子问题的求解结果合并成原问题的解。   2.斐波那契数列前n项是1,1,2,3,5,8,13...... 补全下面程序代码,求第n项斐波那契数列的值。 def fib(n): if ______: return 1 else: return fib(n-1) + fib(n-2) A.n == 2 B.n < 2 C.n == 3 D.n < 3   3.用分治法求两个数的最大公约数,代码和运行结果如下,请选择合适的代码完成程序?( ) def fun(m, n): if m % n == 0: return n else: return __________ print(fun(98, 56)) 程序运行结果如下: 14 A.fun(n, m-n) B.fun(n, m%n) C.fun(m, m-n) D.fun(m, m%n)   4.列出第三方库的详细信息的pip指令是?( ) A.pip install <第三方库名> B.pip download<第三方库名> C.pip show<第三方库名> D.pip list<第三方库名>   5.想要在Python中导入math模块中的sqrt(x)函数,下列程序段错误的是?( ) A.import math math.sqrt(x) B.from math import sqrt as t t(x) C.from math import sqrt as m m.sqrt(x) D.import math sqrt(x)   6.关于求解“找出所有满足各位数字之和等于8的三位数”时,在下列数值范围内,算法执行效率最高的是?( ) A.0—999 B.0—1000 C.100—800 D.107—800   7.已知,从1到n的连续自然数相乘的积叫做阶乘,用符号n!表示, 比如3!=1×2×3,规定0!=1。那么用递归算法求n的阶乘,递归式正确的是?( ) A.f(0)=1,n=n*(n-1) B.f(0)=1,f(n)=f(0)*f(n-1) C.f(0)=1,f(n)=f(n)*f(n-1) D.f(0)=1,f(n)=n*f(n-1)   8.当n为6时,运行下列Python程序后的结果是?( ) def f(n): if n<=2: return 1 else: return f(n-1)+f(n-2) n=int(input("请输入一个正整数:")) print(f(n)) A.5 B.8 C.11 D.13   9.下列程序中,当n=4时,返回结果为?( ) def x(n): if n==1: return 1 else: return n+x(n-1) A.12 B.11 C.10 D.9 10.下列选项中,不属于递归特性的是?( ) A.递归函数一定包含条件控制语句 B.递归算法体现了大事化小的思想 C.递归效率不高,递归层次过多会导致栈溢出 D.递归算法代码简洁,效率较高 11.对于下列递归式子,当n=4时,F的值是?( ) F(n)=F(n-1)*2 F(1)=2 A.2 B.8 C.16 D.32   12.下面函数实现的功能是?( ) def mi(x, n): if n == 0: return 1 else: return x*mi(x, n-1) A. 计算x的n次方 B. 计算x的n次方 C. 计算x!*n D. D.计算x*n!   13.def afun(n): s=1 for i in range(1,n+1): s*=i return s 对以上代码解释错误的是?( ) A.程序正常运行时,afun(n)函数的作用是求n的阶乘 B.程序正常运行时,afun(n)函数的作用是求n+1的阶乘 C.s是局部变量 D.range()函数是Python内置函数   14.关于下列代码解释错误的一项是?( ) def ZhongYao(a:str,b:int)->str: word=a*b print('重要的事情说{}遍:{}'.format(b,word)) return ZhongYao ZhongYao('学习','3') A.参数a的数据类型必须是字符串 B.参数b的数据类型必须是整型 C.函数指定了返回值的数据类型是字符串 D.程序正常运行,输出结果是: 重要的事情说3遍:学习学习学习   15.下列代码的运行结果是?( ) def exchange(a,b): a,b=b,a print(a,b) a,b=3,5 exchange(a,b) print(a,b) A. 5 3 5 3 B. 3 5 3 5 C. 5 3 3 5 D. 5 3 3 5   16.下列代码的运行结果是?( ) def car_show(cars): for car in cars: print('good',car) car_show(['BYD','Haval','Wuling']) A. good ['BYD','Haval','Wuling'] B.'good','BYD' 'good','Haval' 'good','Wuling' C.good BYD Haval Wuling D.good BYD good Haval good Wuling   17.函数中定义了4个参数,其中2个参数都指定了默认值,见下面代码,那么在调用函数时参数个数最少是?( ) def SiBianXing(a,b,c=5,d=8): ZhouChang=a+b+c+d return ZhouChang SiBianXing( ? ) A.0 B.2 C.1 D.3   18.执行如下程序,以下选项中哪一项是错误的?( ) def f(a,b): c=a+b*2 b=a return c a=1 b=2 c=f(a,b)+b A.该函数名称为f B.执行该程序后,变量a的值为1 C.执行该程序后,变量b的值为2 D.执行该程序后,变量c的值为6   19.以下哪种情况下的代码块适合设计成函数?( ) A.复杂的功能块 B.难以看懂的功能块 C.难以看懂的功能块 D.会多次用到的功能块   20.使用位置实参的方式调用函数时,下列哪种情况下程序一定会出错?( ) A.传入的实参个数比形参个数多 B.部分形参赋以默认值 C.函数调用时,重新给赋予了默认值的形参传入新值 D.部分实参以关键字赋值的方式去调用函数   21.下列函数定义中,正确的是?( ) A. def myfunc(a,b,c) print(myfunc(a,b))   B. def myfunc(a=1,b,c): print(myfunc(a,b,c))   C. def myfunc(a,b=1,c): print(myfunc(a,b,c))   D. def myfunc(a,b,c=1): print(myfunc(a,b,c))   22.调用函数的时候,所使用的参数是?( ) A.实参 B.位置参数 C.关键字参数 D.不定长参数   23.对于如下自定义的函数: def myfunc(a,b,c): return a+b+c 以下调用该函数的语句中,能正确执行的是?( ) A.myfunc(1,2) B.myfunc(a=3,2,1) C.myfunc(3,b=2,1) D.myfunc(3,2,c=1)   24.使用*args和**kwargs形参来定义函数时,正确的说法是?( ) A.使用*args代表列表,使用**kwargs代表元组 B.可以在调用函数时传入多个实参 C.使用*args代表元组,使用**kwargs代表列表 D.使用*args代表字典,使用**kwargs代表列表   25.关于函数参数的默认值设置,描述不正确的是?( ) A.定义函数时,可以为某形参设定默认值 B.如果为某形参设定了默认值,则在调用函数时就不能再为该形参传入新值 C.如果为某形参设定了默认值,在调用函数时还可以为该形参再传入新值 D.关键字形参是一种为参数设置默认值的方式   2、 判断题(共10题,共20分) 26.分治算法是把一个大问题分解为若干个规模较小、性质相同的子问题。最后子问题 可以简单地直接求解,将所有子问题的解合并起来就是原问题的解。( )   27.pip联网直接下载安装第三方库时,只能临时更换下载源,不能更改默认的下载源。( )   28.运行以下代码的时间复杂度为O(n2)。( ) k=0 n=11 for i in range(n): k=k+1 for j in range(n): k=k+2 print(k)   29.对于递归而言,递推与回归,二者缺一不可。( )   30.递归算法必须确保,需要解决的问题可以转化为一个或多个子问题来求解,这些子问题的求解方法与原问题相同,只是在数量和规模上不同,而且每次递归调用时,问题规模都能够缩小。( )   31.当函数运行结束后,局部变量的值依然存在,下次函数调用可以继续使用。( )   32.内置函数不需要使用关键字import导入就可以使用,自定义函数可以先调用后定义。( )   33.编程时,需要把实现复杂功能的代码封装起来,设计成函数。( )   34.将实现特定功能的代码块设计成函数,有助于提高整个程序的运行速度。( )   35.如果允许形参设置默认值,则函数定义时要先列出没有默认值的形参,再列出有默认值的形参。( )   3、 编程题(共3题,共30分) 36.统计高分问题 小张在学习对分查找后,想利用该思路来实践一下,加深对该算法的理解。于是他按老师的要求,统计期末考试成绩,总分比他高的同学有多少个? 他的思路是,首先将全区所有学生的成绩降序排序,然后利用对分查找思想解决。他编写的代码如下,请完善划线处的代码。 cj = [654, 643, 621, 612, 609, 606,...] # 学生成绩存列表 cj 并已经降序排序 def dfsearch(key): i = 0 j = len(cj) - 1 while i <= j: m = (i + j) // 2 if cj[m] > key: ① else: j = m - 1 return ② key = int(input('输入待查找的成绩')) pos = ③ print('高于', key, '分的人数有', pos)   37.比岁数问题有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。  最后问第一个人,他说是10岁。请问第五个人多大? 请运用递归算法完成以下代码。 def age(n): if ① : c = 10 else: c = ② return c print(age( ③ ))   38.数学证明问题上世纪中期,校园里流行一种数学游戏,其规则十分简单:任意取一个自然数,若它是奇数,则把它乘以3加上1,若它是偶数,则除以2。按此规则进行下去,经过若干步的计算就能得到自然数1。这个数学现象至今都没有得到完全的证明,但是可以编程来验证它的正确性。 实现上述功能的部分程序代码如下,请补充完成空白处的内容。 以下是完整的代码: step = 1 midlist = [] def subwork(n): global step if n == 1: return step elif n % 2 == 0: n = ① midlist.append(n) step += 1 return subwork(② ) elif n % 2!= 0: n = ③ midlist.④ step += 1 return subwork(⑤) cur_num = int(input("请输入一个数字:")) subwork(cur_num) print(midlist) print(step) 参考答案及解析: 一、单选题 1. 答案:B - 解析:分治算法将问题分解出的各个子问题相互独立,不可以有公共子问题。 2. 答案:D - 解析:斐波那契数列的前两项都是1,当`n < 3`时,即`n`为0、1、2,这三种情况下都返回1,当`n>=3`时,通过递归调用`fib(n - 1)`和`fib(n - 2)`并将结果相加来计算第`n`项的值, 答案是D。 3. 答案:B - 解析:求最大公约数的分治算法,当`m % n!= 0`时,递归调用`fun(n, m % n)`。 4. 答案:C - 解析:答案是C。`pip show <第三方库名>`可列出指定第三方库的详细信息;A选项是安装库;B选项是下载库但不安装;D选项是列出已安装的所有库而非特定库详细信息。 5. 答案:D - 解析:直接使用`sqrt(x)`会报错,因为没有从`math`模块中正确导入`sqrt`函数。 6. 答案:D - 解析:缩小范围可以提高算法执行效率,107—800的范围更有针对性。 7. 答案:D - 解析:递归求阶乘,当`n = 0`时,`f(0)=1`,当`n > 0`时,`f(n)=n*f(n - 1)`。 8. 答案:B - 解析:根据给定的递归函数,当`n = 6`时,`f(6)=f(5)+f(4)=f(4)+f(3)+f(3)+f(2)=f(3)+f(2)+f(2)+f(1)+f(2)+f(1)+1=2+1+1+1+1+1+1=8`。 9. 答案:C - 解析:当`n = 4`时,`x(4)=4+x(3)=4+3+x(2)=4+3+2+x(1)=4+3+2+1=10`。 10. 答案:D - 解析:递归算法虽然代码简洁,但效率不一定高,递归层次过多会导致栈溢出。递归函数一定包含条件控制语句;递归体现了大事化小的思想。 11. 答案:C - 解析:当`n = 4`时,`F(4)=F(3)*2=F(2)*2*2=F(1)*2*2*2=2*2*2*2=16`。 12. 答案:A - 解析:函数`mi`通过递归实现计算`x`的`n`次方。 13. 答案:B - 解析:程序是求`n`的阶乘,不是`n + 1`的阶乘。 14. 答案:D - 解析:程序最后一行`return ZhongYao`错误,应该返回一个字符串。 15. 答案:C - 解析:函数`exchange`中交换了参数的值,但不会影响外部的变量`a`和`b`,所以输出结果是先`5 3`,然后`3 5`。 16. 答案:D - 解析:函数`car_show`遍历列表并输出,输出结果是`good BYD`、`good Haval`、`good Wuling`。 17. 答案:B - 解析:函数有四个参数,其中两个有默认值,调用时最少需要提供两个参数。 18. 答案:D - 解析:函数`f`中计算`c = a + b * 2`,传入`a = 1`,`b = 2`,则`c = 5`,最后`c = f(a, b)+b = 5 + 2 = 7`。 19. 答案:D - 会多次用到的功能块适合设计成函数,提高代码复用性。 20. 答案:A - 使用位置实参调用函数时,传入的实参个数比形参个数多会出错。部分形参赋以默认值、重新给赋予了默认值的形参传入新值、部分实参以关键字赋值的方式调用函数都是合法的。 21. 答案:D - 函数定义中,如果有默认值的参数,必须放在没有默认值的参数后面。 22. 答案:A - 调用函数的时候,所使用的参数是实参。位置参数、关键字参数和不定长参数都是实参的不同形式。 23. 答案:D - 调用函数时实参和形参要对应,`myfunc(3,2,c=1)`正确地传入了三个参数。 24. 答案:B - `*args`代表可变数量的位置参数,以元组形式存储;`**kwargs`代表可变数量的关键字参数,以字典形式存储。可以在调用函数时传入多个实参。 25. 答案:B - 如果为某形参设定了默认值,在调用函数时还可以为该形参传入新值。 二、判断题 26. 答案:对 - 分治算法是把一个大问题分解为若干个规模较小、性质相同的子问题,最后子问题可以简单地直接求解,将所有子问题的解合并起来就是原问题的解。 27. 答案:错 - `pip`联网直接下载安装第三方库时,可以永久更改默认的下载源。 28. 答案:错 - 外层循环`n`次,内层循环`n`次,时间复杂度为`O(n²)`,但内层循环每次`k`增加2,不是简单的嵌套循环,时间复杂度不是`O(n²)`。 29. 答案:对 - 对于递归而言,递推与回归二者缺一不可。 30. 答案:对 - 递归算法必须确保问题可以转化为子问题求解,且每次递归调用时问题规模缩小。 31. 答案:错 - 当函数运行结束后,局部变量会被销毁,下次函数调用不能继续使用。 32. 答案:错 - 内置函数不需要使用关键字`import`导入就可以使用,自定义函数必须先定义后调用。 33. 答案:错 - 把能够重复利用的代码封装起来设计成函数,提高代码的可读性和可维护性。 34. 答案:错 - 将实现特定功能的代码块设计成函数,有助于提高代码的可读性、可维护性和可重用性,但通常并不能直接提高整个程序的运行速度。 35. 答案:对 - 如果允许形参设置默认值,函数定义时要先列出没有默认值的形参,再列出有默认值的形参。 三、编程题 36.参考代码: cj = [654, 643, 621, 612, 609, 606,...] # 学生成绩存列表 cj 并已经降序排序 def dfsearch(key): i = 0 j = len(cj) - 1 while i <= j: m = (i + j) // 2 if cj[m] > key: i = m + 1 else: j = m - 1 return i key = int(input('输入待查找的成绩')) pos = dfsearch(key) print('高于', key, '分的人数有', pos) 在对分查找过程中,如果中间值`cj[m]`大于要查找的`key`,说明要找的位置在右侧,所以`i = m + 1`;如果小于等于`key`,说明要找的位置在左侧,所以`j = m - 1`。当循环结束时,`i`的值就是比`key`大的第一个元素的位置,也就是比`key`大的元素个数。所以返回`i`,最后调用函数并将结果赋值给`pos`输出。 参考答案: ① i += 1 ② i ③ dfsearch(key) ①处应填写i = m + 1。 当cj[m] > key时,说明要找的成绩位置在右侧,需要更新左边界i为m + 1,以便继续在右侧区间查找。 ②处应填写i。 循环结束后,i的值就是比key大的第一个元素的位置,也就是比key大的元素个数,所以返回i。 ③处应填写dfsearch(key)。 调用dfsearch函数来查找输入成绩在已排序成绩列表中的位置,从而确定比输入成绩高的人数。 37. 参考代码: def age(n): if n == 1: c = 10 else: c = age(n - 1) + 2 return c print(age(5)) 参考答案: ① n == 1 ② age(n - 1) + 2 ③ 5 解析: ①处应填写`n == 1`,因为当询问第一个人的年龄时,直接给出答案是 10 岁,这是递归的边界条件。 ②处应填写`age(n - 1) + 2`,表示第`n`个人的年龄是第`n - 1`个人的年龄加 2,通过递归调用得到第`n - 1`个人的年龄,再加上 2 就是第`n`个人的年龄。 ③处应填写`5`,因为问题是求第五个人的年龄,所以调用函数时传入参数 5。 38. 参考代码: step = 1 midlist = [] def subwork(n): global step if n == 1: return step elif n % 2 == 0: n = n // 2 midlist.append(n) step += 1 return subwork(n) elif n % 2!= 0: n = n * 3 + 1 midlist.append(n) step += 1 return subwork(n) cur_num = int(input("请输入一个数字:")) subwork(cur_num) print(midlist) print(step) 参考答案与解析: 对于偶数情况: ①处应填写`n // 2`,将偶数除以 2。 ②处应填写`n`,继续对新的`n`值进行递归调用。 对于奇数情况: ③处应填写`n * 3 + 1`,将奇数乘以 3 加上 1。 ④处应填写`append(n)`,将新的奇数值添加到列表中。 ⑤处应填写`n`,继续对新的`n`值进行递归调用。 学科网(北京)股份有限公司 $$

资源预览图

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