内容正文:
青少年软件编程(Python)等级考试试卷(四级)
202306真题与解析
分数:100 题数:38 测试时长:60分钟
一、单选题(共25题,每题2分,共50分)
1.下列程序段的运行结果是?( )
def s(n):
if n==0:
return 1
else:
return n +s(n-1)
print(s(7))
A. 29
B. 27
C. 1
D. 0
2.当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
3.有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。问第n年的时候,共有多少头母牛?
由递推法可推测,当年数小于等于4的时候,第几年就是有几头牛,即a[1]=1;a[2]=2;a[3]=3;a[4]=4。
当n大于4的时候,这时候第一年出生的那个小母牛就也可以生出小母牛了,
也就是该考虑小母牛是否可以生了,所以n>4的时候,a[n]=?( )
A. a[n-1]+a[n-3]
B. a[n-1]+a[n-4]
C. a[1]+a[3]
D. a[-1]+a[-3]
4.二分查找又称折半查找,下列数列中适合二分查找算法的是?( )
A. 11 99 4 25 3 39
B. 43 71 78 81 6 55
C. 67 62 68 4 1 17
D. 85 78 59 53 19 18
5.在32枚崭新的金币中,有一枚外表与真金币完全相同的假币(质量小一点),现在只有一台天平,应用二分法的思想最多称几次就可以发现这枚假币?( )
A. 4
B. 5
C. 6
D. 7
6.已知在某程序中,有一个全局变量名为a。在程序中的某个函数中,再次定义了一个变量a,且该变量非组合类型变量。
下面哪个说法是对的?( )
A. 如果在该函数中将a声明为global,则对a的操作与全局变量a无关。
B. 如果在该函数中未将a声明为global,则对a的操作与全局变量a无关。
C. 如果在该函数中未将a声明为global,则对a的操作即为对全局变量a的操作。
D. 不管在该函数中是否将a声明为global,对a的操作都是对全局变量a的操作。
7.对于程序中的列表来说,哪个选项中的参数填写在range()中的横线上,算法执行效率最高?( )
a=[1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1]
for i in range _____:
if a[i]==1:
print(i)
A. (0,16,1)
B. (0,16,2)
C. (0,16,3)
D. (0,16,4)
8.下列函数中,不可以直接调用的是?( )
A. print( )
B. sqrt( )
C. str( )
D. dict( )
9.关于return语句,下列说法正确的是?( )
A. return语句中返回值的数据类型可以是列表
B. return语句中不能有表达式
C. 一个函数至少有一个return语句
D. return只能返回一个值
10.关于函数的描述,不正确的是?( )
A. 函数中通过return语句返回结果
B. 函数可以提高代码的重复利用率
C. 在函数内部不能使用全局变量
D. 函数的定义必须在主程序函数调用语句之前
11.小方编写计算长方形面积的匿名函数,下列哪一个语句是正确的?( )
A. rst = lambda a,b : a * b
B. lambda a,b:a*b
C. lambda a,b,a*b
D. rst = lambda a,b,a*b
12.运行下列程序,输出的结果是?( )
s = 1
def sums(n):
global s
s = 0
s = s + n
print(s)
sums(5)
print(s)
A. 5 5
B. 5 1
C. 1 1
D. 1 5
13.小明帮老师统计年龄是10岁的学生数,老师手头有全年级每位学生的身份证号码等信息。他编写程序如下。
#列表stud存储每位学生的身份证号码,如
stud = ['110726201205261117','120718201209011101']
def cj(xs):
c = 0
for s in xs:
age = int( ① )
if 2023 - age == 10:
c += 1
return c
print(cj(stud) )
下列代码中,为实现统计功能划线处①的代码不能选的是?( )
A. s[6:10]
B. s[6:-8]
C. s[-12:-8]
D. s[-12:11]
14.下列有关递归的描述中,正确的是?( )
A. 递归函数中肯定有循环结构
B. 递归没有体现“大事化小”的思想
C. 递归有明确的结束递归的边界条件
D. 递归执行效率较高
15.小方的妈妈分苹果方法如下,第一天分掉其中一半加一个苹果,第二天分掉剩下的一半加一个苹果,以后每天都分掉剩下的一半加一个苹果。到第8天的时候妈妈发现只剩一个苹果了。请问小方妈妈一开始有多少个苹果? 这个问题我们可以用以下什么算法解决?( )
A. 查找
B. 递推
C. 枚举
D. 排序
16.自然界的规律:花瓣的个数
大多数花瓣的个数有1、1、2、3、5、8、13、21、......,仔细观察这些数的顺序,会发现这些数的排列是有规律的,即斐波那契数列。小李同学编写程序求该数列的第n项的值。
方框中的代码由以下三部分组成:① a=b ② b=c ③ c=a+b,下列选项中代码顺序正确的是?( )
A. ①②③
B. ①③②
C. ③②①
D. ③①②
17.某同学用对分查找和顺序查找在数字序列“1,3,5,8,15,21,35,65”中查找数字15,
两种方法都能访问到的下列数字是?( )
A. 3
B. 5
C. 8
D. 34
18.小李查看电脑上安装的Python库,下列命令可行的是?( )
A. pip install
B. pip list
C. pip show
D. pip help
19.运行下列程序,输出的结果是?( )
a = [0] * 10
def tj(n):
while n>0:
a[n%10] += 1
n //= 10
return sum(a)
print(tj(20230113))
A. 8
B. 12
C. 4
D. 6
20.通常,定义一个函数,最多包含多少个参数?( )
A. 3
B. 4
C. 5
D. 任意多
21.调用下列哪个函数可查看说明文档?( )
A. help()
B. range()
C. len()
D. print()
22.下列代码输出的结果是?( )
def sum(a):
a+=1
a=6
sum(a)
print(a)
A. 8
B. 7
C. 6
D. 2
23.下列代码输出的结果是?( )
def py(a,b=2):
a=a%b
return(a)
print(py(7))
A. 1,2
B. 1
C. 3,2
D. 3
24.下列代码输出的结果是?( )
def py(b):
b+=3
return(b)
print(py(3))
A. 3
B. 6
C. 0
D. 9
25.下列属于Python中文分词方向第三方库的是?( )
A. pandas
B. beautifulsoup4
C. python-docx
D. jieba
二、判断题(共10题,共20分)
26.每次进入更深一层递归时,问题规模相比上次递归都应有所增大。()
27.位置参数和关键字参数是函数调用时的概念,当二者共存时,关键字参数必须写在未知参数之前,否则会造成语法错误。( )
28. 一个函数可以没有参数,也可以有多个参数,但是参数的个数必须是确定的。( )
29.不了解函数内部实现细节就没有办法使用该函数。( )
30.小明编写如下函数,
def jiafa(x,y=0):
return x+y
他用语句 jiafa(10) 调用函数,程序将提示运行错误。( )
31.运行如下程序,输出的结果是4。( )
def fun(n):
if n == 1:
return 1
else:
fun(n-1) * 2
print(fun(3))
32. 空间复杂度是指算法被编写成程序后,在计算机中运行时所需存储空间大小的度量,记作S(n),其中n为问题的规模或大小。( )
33.自定义函数可以没有参数。( )
34.分治算法一定会用到递归。( )
35.调用库时为方便后续代码编写,可给其取一个别名,比如将matplotlib命名为plt。( )
三、编程题(共3题,共30分)
36.已知某c的第n项计算步骤如下:
小明编写程序计算第n项的结果。首先从键盘输入n,然后利用上述递推关系计算结果,请完善划线处的代码。
def fc(n):
if n ==1:
①
else:
a=6*n-1
b=8*n+3
return ②
m=int(input("请输入一个整数:"))
if not isinstance(m,int): #判断输入的m是否为整数
print('请输入一个整数')
else:
print( ③ )
37.请补全下列代码,编程实现用递归的方法输出九九乘法表。
def get_result(num):
if num == 1:
print(" ① ")
else:
get_result( ② )
for i in range(1, ③ ):
print("%d * %d = %d" % (i, num, i * num), end=" ")
print()
get_result( ④ )
38.有一只蜗牛在井底,井深n米。蜗牛每天往上爬a米,又会往回滑b米。
请从键盘接收输入整数n,a,b,用空格隔开。
并完成下列程序,计算蜗牛爬出这口井需要几天。
n,a,b=input("请输入井深,蜗牛每天往上爬几米,蜗牛滑下几米:"). ①
n,a,b= ②
pos=0
i=0
while ③ :
④
⑤
print("第%d天,蜗牛距离井口%d米;"%(i,n-pos))
print("第%d天,蜗牛成功离开了深井!!"%( ⑥ ))
参考答案及解析:
一、单选题
1. 答案:A
- 解析:函数`s`是递归函数,每次调用将当前的`n`与`s(n - 1)`的结果相加,`s(7)=7+s(6)=7+6+s(5)=...=7+6+5+4+3+2+s(1)=7+6+5+4+3+2+1=28`,但题目中选项A的值为29,可能存在错误。如果按照正确的计算结果,应该是28,没有选项与之对应。
2. 答案:B
- 解析:这是一个计算斐波那契数列的函数,输入6,依次计算可得结果为8。
3. 答案:A
- 解析:前四年共有四只,从第五年开始,第二年出生的小母牛也会生一只母牛(而且以后每年初都会生一只母牛),加上第一年那只母牛生的小母牛,共有六只母牛;第六年的时候得加上第三年那只母牛生的母牛,共九只母牛;依次类推。
4. 答案:D
- 解析:二分查找要求数列是有序的,选项D中的数列是有序的。
5. 答案:B
- 解析:每次将金币分成两份,最多称`log₂32`次,即5次可以发现假币。
6. 答案:B
- 解析:如果在函数中未将变量`a`声明为`global`,则对`a`的操作与全局变量`a`无关。
7. 答案:C
- 解析:数据变化的步长为3。
8. 答案:B
- 解析:`sqrt()`是`math`模块中的函数,不能直接调用,需要通过`import math`后使用`math.sqrt()`调用。
9. 答案:A
- 解析:`return`语句中返回值的数据类型可以是任何合法的 Python 数据类型,包括列表;可以有表达式;一个函数可以没有`return`语句;可以返回多个值,如返回一个元组。
10. 答案:C
- 解析:在函数内部可以使用全局变量,但需要注意作用域的问题。
11. 答案:A
- 解析:匿名函数可以赋值给一个变量,格式为`变量名 = lambda 参数列表: 表达式`。
12. 答案:A
- 解析:函数`sums`中使用`global`关键字修改了全局变量`s`的值,先输出5,然后在全局作用域中`s`的值也变为5。
13. 答案:D
- 解析:`s[-12:11]`的写法错误,切片索引不能这样组合。
14. 答案:C
- 解析:递归函数不一定有循环结构;递归体现了“大事化小”的思想;递归执行效率通常较低;递归有明确的结束递归的边界条件。
15. 答案:B
- 解析:这个问题可以用递推的方法解决,从最后一天的情况逐步推导出第一天的苹果数。
16. 答案:D
- 解析:递推法求斐波那契数列,选D。
17. 答案:C
- 对分查找会访问到中间值8,顺序查找也会访问到8。
18. 答案:B
- `pip list`可以查看已安装的 Python 库。
19. 答案:A
- 函数`tj`统计数字中各个数位出现的次数,20230113中不同的数字有8个。
20. 答案:D
- Python 函数可以有任意多个参数。
21. 答案:A
- `help()`函数可以查看函数的说明文档。
22. 答案:C
- 函数`sum`中的参数`a`是局部变量,不会影响全局变量`a`的值。
23. 答案:B
- 函数`py`计算`a`对`b`取余的结果并返回,`7%2=1`。
24. 答案:B
- 函数`py`将参数加3后返回,`3+3=6`。
25. 答案:D
- `jieba`是中文分词方向的第三方库。
二、判断题
26. 答案:错
- 每次进入更深一层递归时,问题规模相比上次递归应有所减小。
27. 答案:错
- 位置参数和关键字参数共存时,关键字参数可以写在位置参数之后,但必须以关键字的形式传递。
28. 答案:错
- 函数的参数个数可以是不确定的。
29. 答案:错
- 对函数的使用不需要了解函数内部实现原理,只要了解函数的输入输出方式即可。
30. 答案:错
- 函数可以使用默认参数,`jiafa(10)`会将`y`的值取默认值0,程序不会提示运行错误。
31. 答案:错
- 函数`fun`在递归调用时没有正确地返回结果,应该是`return fun(n - 1) * 2`,当`n = 3`时,结果应为4,但题目中的代码存在错误。
32. 答案:对
- 空间复杂度是对算法运行时所需存储空间大小的度量。
33. 答案:对
- 自定义函数可以没有参数。
34. 答案:错
- 分治算法不一定会用到递归,也可以用循环等方式实现。
35. 答案:对
- 为方便后续代码编写,可以给库取别名。
三、编程题
36. 参考答案:
参考程序:
def fc(n):
if n ==1:
return 1
else:
a=6*n-1
b=8*n+3
return a*fc(n-1)/b
m=int(input("请输入一个整数:"))
if not isinstance(m,int): #判断输入的m是否为整数
print('请输入一个整数')
else:
print(fc(m))
试题解析:本题中已知c的第n项计算公式,第1项时c的值为1,第2项可以由第1项的基础上用公式计算,程序中编写了函数fc实现计算c的结果,在函数fc中,第1项时返回1,故①处代码是return 1 ;函数fc中②处代码是计算第n的数据,由递推公式可知该处代码是a*fc(n-1)/b ,③处代码是将输入的第m项调用函数fc计算结果,故该处的代码是fc(m)。
评分标准:
(1)return 1;(3分)
(2)a*fc(n-1)/b;(3分)
(3)fc(m)。(2分)
37. 参考答案:
参考程序:
def get_result(num):
if num == 1:
print("1 * 1 = 1")
else:
get_result(num - 1)
for i in range(1,num + 1):
print("%d * %d = %d" % (i, num, i * num), end=" ")
print()
get_result(9)
试题解析:
评分标准:
(1)1*1=1;(3分)
(2)num-1;(3分)
(3)num+1;(2分)
(4)9。(2分)
解析:
以下是对每个填空的解释:
①处填1*1=1:
当`num == 1`时,代表输出九九乘法表的最后一行,即“1*1=1”。
②处填num - 1:
这是递归调用的关键部分。当`num > 1`时,先递归调用`get_result(num - 1)`,这样可以先输出前面的乘法表内容,逐步向上回溯,直到`num == 1`时开始输出第一行内容,然后再逐步向下输出其他行。
③处填num + 1:
在输出当前行的乘法表内容时,循环范围是从 1 到当前的`num`,即`range(1, num + 1)`,这样才能完整地输出当前`num`对应的乘法表内容,如当`num = 2`时,输出“1*2=2”和“2*2=4”。
④处填“9”:
最后调用`get_result(9)`,从最大的行数 9 开始,逐步递归输出整个九九乘法表。
38. 参考答案:
参考程序:
n,a,b=input("请输入井深,蜗牛每天往上爬几米,蜗牛滑下几米:").split()
n,a,b=int(n),int(a),int(b)
pos=0
i=0
while pos+a<n:
i+=1
pos+=(a-b)
print("第%d天,蜗牛距离井口%d米;"%(i,n-pos))
print("第%d天,蜗牛成功离开了深井!!"%(i+1))
评分标准:
(1)split();(2分)
(2)int(n),int(a),int(b);(2分)
(3)pos+a<n;(2分)
(4)i+=1;(2分)
(5)pos+=(a-b);(2分)
(6)i+1。(2分)
试题解析:
①处填split():
`input`函数获取用户输入的字符串后,使用`split()`方法可以按照空格将字符串分割成多个子字符串,这样就可以将输入的三个整数分别提取出来。
②处填int(n),int(a),int(b):
分割后的子字符串是字符串类型,需要将其转换为整数类型才能进行后续的计算。这里将`n`、`a`、`b`分别转换为整数。
③处填pos+a<n:
循环条件是蜗牛当前位置加上每天往上爬的距离后仍然小于井深,只有在这种情况下蜗牛才需要继续往上爬,否则就已经爬出井口了。
④处填i+=1:
每经过一天,天数变量`i`需要加 1。
⑤处填pos+=(a - b):
蜗牛每天先往上爬`a`米,然后又滑下`b`米,所以实际上每天前进的距离是`a - b`米。这里直接将蜗牛当天的位置更新为当前位置加上每天实际前进的距离。
⑥处填i+1:
当蜗牛成功爬出井时,循环结束,此时的天数`i`就是蜗牛爬出井所需的天数,输出时需要显示具体的天数,所以是`i+1`(题目中输出提示语是“第%d天,蜗牛成功离开了深井!!”,这里的天数应该是比循环结束时的`i`大 1)。
学科网(北京)股份有限公司
$$