青少年软件编程(Python)等级考试试卷(四级)
分数:100.00 题数:38
一、单选题(共25题,每题2分,共50分)需要全套考试题目+我微信:15570666506
1. 不超过100个元素的有序数列,使用二分查找能找到指定的元素,可能的查找次数不包括?( )
A、1次
B、6次
C、7次
D、8次
试题编号:20210129-TR-028
题型:单选题
答案:D
难度:一般
试题解析:按照二分查找法的规律,100个元素的有序列表,不管是否找到,至多查找7次。
2. 运行以下代码,正确的打印结果是?( )需要全套考试题目+我微信:15570666506
def f():
c=0
for i in range(4,51,4):
if i%6==0:
c=c+1
return c
print(f())
A、1
B、2
C、4
D、8
试题编号:20210206-lfy-006
题型:单选题
答案:C
难度:一般
试题解析:函数f()的作用是求4-50间4和6的公倍数个数,即12的倍数个数。
3. 10个人站一列,分苹果,问第10个人分到多少个苹果,他说比前面一个人多分到2个,依次往前,都说比前面一个人多分到2个,最后问第一个人,他说分到10个苹果。用以下函数求第10个人分到的苹果数,则应补充选项为?( )
def apple(n):
if n == 1:
return 10
else:
return
print(apple(10))
A、apple(n)+2
B、n+2
C、apple(n-1)+2
D、apple(n+1)-2
试题编号:20210131-TR-023
题型:单选题
答案:C
难度:一般
试题解析:def apple(n):
if n == 1:
return 10
else:
return apple(n-1)+2
print(apple(10))
4. 观察程序段,以下说法错误的是?( )
def fib(n):
if n==1 or n==2:
s=1
else:
s=fib(n-1)+fib(n-2)
return s
m=int(input("请输入m的值(m>2):"))
print(fib(m))
A、如果输入m的值为8,打印的结果为20
B、该程序段用了递归来实现
C、如果缺少语句“return s”,程序会报错
D、语句“def fib(n):”中的n为形参
试题编号:20210129-lfy-019
题型:单选题
答案:A
难度:较难
试题解析:定义函数时的语法如下:
def 函数名(参数集合):
<函数体>
[return 函数值]
本题中的自定义函数fib(m)需要返回值,所以“return 函数值”语句不能少,定义时“函数名<参数集合>”中的参数为形参,调用时“函数名<参数集合>” 中的参数为实参。如果输入m的值为8,打印的结果为21。
5. 关于python函数参数的说法正确的是?( )
A、函数一定要有参数和返回值
B、在调用一个函数时,若函数中修改了形参变量的值,则对应的实参变量的值也被修改
C、参数的值是否会改变,与函数中对变量的操作有关,与参数类型无关
D、函数的形参在函数被调用时获得初始值
试题编号:20210129-TR-004
题型:单选题
答案:D
难度:一般
试题解析:函数的形参作用域为本函数,在函数被调用时获得初始值。
6. 关于递归与递推方法的比较,错误的观点是?( )
A、递归是将复杂问题降解成若干个子问题,依次降解,求出低阶规模的解,代入高阶问题中,直至求出原问题的解;
B、递推是构造低阶的问题,并求出解,依次推导出高阶的问题以及解,直至求出问题的解;
C、数学上的递推关系可以通过递归的方法来实现;
D、递归算法代码简洁,运行速度比递推快,因此应该尽量采用递归的方法;
试题编号:20210206-xm-024
题型:单选题
答案:D
难度:一般
试题解析:D.递归的运行开销大。
7. 运行以下代码,输出结果正确的是?( )
a=1
b=c=[]
def fun(a,c):
a=2
c.append(a)
fun(a,c)
print(a,b,c)
A、2 [2] [2]
B、1 [] [2]
C、1 [2] [2]
D、2 [] [2]
试题编号:20210129-TR-011
题型:单选题
答案:C
难度:较难
试题解析:函数体内变量a的值为2,添加到了列表c中,b和c指向同一个列表地址,因此列表b也随之改变
8. 关于Turtle库的表述中,错误的是?( )
A、Turtle库是Python语言中一个很流行的绘制图像的函数库。
B、画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。
C、turtle.circle( )是只能画一个指定半径为r的圆。
D、turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。
试题编号:20210128-ph-018
题型:单选题
答案:C
难度:一般
试题解析:turtle.circle( )是turtle中的常用命令,基本语法是circle(radius,e),即画一个指定半径为r,角度e的圆或弧
9. 有100枚金币,其中有1枚轻1克的假金币,现在要找出这枚假金币,但身边只有1个没有刻度的天秤。小明先是将金币分成50枚一堆,共两堆称重,在轻的那一堆中又分成两堆,接着在轻的25枚中分成12,12,1三堆称重,若两堆12枚的重量相同,则假币为单独剩下的那一枚,否则在轻的那一堆中继续按照之前的办法称下去,直到找到假金币。请问小明采用的办法与哪个算法有着相似之处?( )
A、递归
B、分治
C、枚举
D、贪心
试题编号:20210130-lfy-029
题型:单选题
答案:B
难度:容易
试题解析:分治算法就是对一个问题采取各个击破的方法,将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。只要求出子问题的解,就可得到原问题的解。
10. 运行以下代码,正确的打印结果是?( )
def f(s):
t=0
max=0
for i in s:
if i>="0" and i<="9":
t=t+1
else:
if t>max:
max=t
t=0
print(max)
list="123ab45cd6d"
f(list)
A、0
B、1
C、2
D、3
试题编号:20210206-lfy-007
题型:单选题
答案:D
难度:一般
试题解析:本段代码中,函数f()的作用是求最长的连续数字字符串的长度。
11. 下列关于函数的描述正确的是?( )
A、函数是可重复使用的,用来实现单一,或相关联功能的代码段
B、函数中必须return语句
C、函数好处是模块性,但不能提高代码的利用率
D、函数内容以冒号起始,可以不缩进
试题编号:20210203-fcl-02
题型:单选题
答案:A
难度:一般
试题解析:
12. 调用以下函数时,语句“s=s+i”被执行的次数是?( )
def f():
s=0
i=1
while i<10:
if i%3==0 or s%2==1:
s=s+i
i=i+1
print(s)
A、3
B、4
C、5
D、6
试题编号:20210206-lfy-015
题型:单选题
答案:C
难度:一般
试题解析:
13. 已知有n本按照书名拼音排序好的图书,使用对分查找法搜索其中任何一本书,最多查找次数为6次,则n的值可能为?( )
A、20
B、50
C、80
D、110
试题编号:20210129-lfy-027
题型:单选题
答案:B
难度:一般
试题解析:对规模为n的数据进行对分查找时,无论是否查找到,至多进行 |log2n|+1次(|log2n|表示小于等于log2n的最大整数),因此25≤n<26,即32≤n<64。
14. 某程序代码设计如下,若输入整数5,则最终输出的结果为?( )
def fact(x):
if x==1:
s=1
else:
s=fact(x-1)*x
return s
n=int(input("请输入一个大于1的整数:"))
print(fact(n)+fact(n-1))
A、120
B、24120
C、144
D、12024
试题编号:20210205-lfy-023
题型:单选题
答案:C
难度:容易
试题解析:由于fact(5)=fact(4)*5, fact(4)=fact(3)*4, fact(3)=fact(2)*3, fact(2)=fact(1)*2, fact(1)=1,所以fact(5)+fact(4)=120+24=144。
15. 用匿名函数方式求两个数中较大的数,下列定义语句格式正确的是?( )
A、result = lambda 'x,y': y if x> y else x
B、result= lambda x,y: y if x> y else x
C、result= lambda 'x,y': x if x> y else y
D、result= lambda x,y: x if x> y else y
试题编号:20210129-TR-007
题型:单选题
答案:D
难度:一般
试题解析:匿名函数的定义语法:lambda 参数:表达式语法。先写lambda关键字,然后依次写匿名函数的参数,多个参数中间用逗号连接,然后是一个冒号,冒号后面写返回的表达式。
16. 下列程序段的正确运行结果是?( )
def fun(m,n):
while m!=n:
if m>n:
m=m-n
else:
n=n-m
return m
print(fun(24,16))
A、4
B、8
C、-8
D、2
试题编号:20210129-lfy-011
题型:单选题
答案:B
难度:容易
试题解析:自定义函数fun(m,n)的作用是求m,n两个整数的最大公约数。
17. 运行下列程序,输出结果正确的是?( )
def fun(x,y=5):
return x*y
a=fun(10,10)
print(a)
A、100
B、50
C、10
D、运行出错
试题编号:20210129-TR-012
题型:单选题
答案:A
难度:一般
试题解析:参数的默认值被替换。
18. 如果需要在某函数内部调用上一层的局部变量,则可以使用( )关键字。
A、Local
B、nonlocal
C、global
D、nonglobal
试题编号:20210206-xm-012
题型:单选题
答案:B
难度:较难
试题解析:仅B可以调用上一层的局部变量
19. 在Python程序中,设已定义函数op,它有一个整型传值参数,一个字符串型传值参数。设x,y为整型变量,z为字符串型变量,则下列能调用该函数的正确语句是?( )
A、op
B、op(x,y,z)
C、op x,y
D、op(x+y,z)
试题编号:20210129-lfy-001
题型:单选题
答案:D
难度:一般
试题解析:在调用自定函数时需要用到“函数名<参数表>”的方法,且自定义函数op共有两个参数。
20. 下列哪个语句段的时间复杂度最低?( )
A、if n%2==0:
x=x*2
else:
x=x+2
B、n=1
while n<=100:
x=x+2
C、for i in range(100):
for j in range(10):
x=x+2
D、for i in range(100):
for j in range(i):
x=x+2
试题编号:20210129-TR-031
题型:单选题
答案:A
难度:较难
试题解析:时间复杂度按数量级递增顺序为:常数阶、对数阶、线性阶、线性对数阶、平方阶
21. 下列哪个不是Python中的内建函数?( )
A、asc(x)
B、ord(x)
C、chr(x)
D、abs(x)
试题编号:20210129-lfy-005
题型:单选题
答案:A
难度:容易
试题解析:Python中没有asc(x)这个内建函数,ord(x)函数的作用是返回x对应的ASCII值,chr(x)函数的作用是返回x对应的字符,abs(x)函数的作用是返回x的绝对值。
22. 关于函数的定义语句,以下几项中正确的是?( )
A、def f(c=2,a,b):
B、def f(a,b=2,c):
C、def f(*c,**d,a,b):
D、def f(a,b,*c,**d):
试题编号:20210129-TR-014
题型:单选题
答案:D
难度:一般
试题解析:顺序实参必须要放在关键字实参之前,位置参数*args必须要在关键字参数**kwargs前,否则会程序报错。
23. 下列关于递归的描述不正确的是?( )
A、递归函数一定包含条件控制语句
B、递归函数一定包含调用自身的语句
C、在调用自身函数时需要明确的边界终止条件
D、递归算法一般代码简洁,执行效率高,空间复杂度低
试题编号:20210129-TR-020
题型:单选题
答案:D
难度:一般
试题解析:递归算法一般代码简洁,易于理解,但执行效率较低,空间复杂度高。
24. 下列哪个不是Python第三方库的pip安装方法?( )
A、使用pip命令
B、使用wheel命令
C、集成安装方法
D、文件安装方法
试题编号:20210128-ph-020
题型:单选题
答案:B
难度:一般
试题解析:第三方库安装
25. 对于下列递归式子,当n=4时,F的值是?( )
F(n)=F(n-1)+3 F(1)=2
A、2
B、5
C、11
D、14
试题编号:20210129-TR-021
题型:单选题
答案:C
难度:容易
试题解析:用递归式子推导得出。
二、判断题(共10题,每题2分,共20分)
26. def add(a, b, c=0):
return a+b+c
print(add(1, 2, 4))
这段程序的运行结果为3。
试题编号:20210129-TR-008
题型:判断题
答案:错误
难度:一般
试题解析:在调用函数时给函数提供了实参时,Python将使用指定的实参值
27. 算法复杂度分析的目的是分析算法的效率,以求改进。
试题编号:20210131-TR-032
题型:判断题
答案:正确
难度:容易
试题解析:
28. sum=0
for i in range(5):
sum=sum+i
print(sum)
运行以上程序,输出结果是15。
试题编号:20210131-TR-025
题型:判断题
答案:错误
难度:较难
试题解析:
29. 已有函数def demo(*p):return sum(p),表达式 demo(1, 2, 3, 4) 的值为10。
试题编号:20210129-TR-018
题型:判断题
答案:正确
难度:一般
试题解析:
30. 使用python -m pip install --upgrade pip命令能够升级pip。
试题编号:20210128-ph-030
题型:判断题
答案:正确
难度:一般
试题解析:
31. 在python函数中,局部变量不能与全局变量重名。
试题编号:20210129-TR-009
题型:判断题
答案:错误
难度:容易
试题解析:当全局变量和局部变量同名时,首先会找程序内部有没有局部变量,如果有,则调用,如果没有,才会去调用全局变量。
32. 下列程序段返回的值为“Hello!Python”。
lst="Hello!Python"
def f():
global lst
lst="Hello!"
return lst
f()
print(lst)
试题编号:20210205-lfy-010
题型:判断题
答案:错误
难度:一般
试题解析:lst="Hello!Python" #定义全局变量
def f():
global lst #global关键字的作用是通过局部变量修改全局变量
lst="Hello!"
return lst
f()
print(lst) #打印全局变量中lst的值
33. 使用分治算法求解,子问题不能重复。
试题编号:20210129-TR-030
题型:判断题
答案:正确
难度:一般
试题解析:分治算法的子问题之间不可以包含公共的子问题。
34. 设计一个程序来求xn(x的几次方)的值,算法思想是:把xn转换为x*xn-1,而xn-1又可以转换为x*xn-2,如此重复下去,直到x*x0,而x0=1,从而求出了xn的值。这个程序可以用递归来实现。
试题编号:20210205-lfy-026
题型:判断题
答案:正确
难度:容易
试题解析:递归体现了“大事化小,小事化了”的思想,把大问题转换成小问题来解决,且有终止条件,即算法中的到x0=1为止。
35. 下列程序段能正确打印1。
def f(a,b):
a=a+b
b=a-b
a=a-b
return b
print(F(1,4))
试题编号:20210207-lfy-017
题型:判断题
答案:错误
难度:容易
试题解析:Python中字母区分大小写,所以自定义函数创建和调用时,函数名要一致,否则调用不成功。
三、编程题(共3题,共30分)
36.
利用分治思想,给定一个顺序表,编写一个求出其最大值的程序。
根据上述算法思想,补全下列代码。
输入输出示例:当顺序表是 [22,13,34,4,68,15,5,58,36],输出:68
def fun_max(num=list):
return max(num)
def fun(num):
n = ①
if n <= 2:
return ②
l_list, r_list = num[:n//2], num[n//2:]
l_max, r_max = ③
return fun_max( ④ )
if __name__ == "__main__":
alist = [22,13,34,4,68,15,5,58,36]
print(fun(alist))
试题编号:20210128-ph-037
题型:编程题
答案:
评分标准:
① len(num) 或等效答案; (2分)
② fun_max(num) 或等效答案; (2分)
③ fun(l_list), fun(r_list) 或等效答案; (2分)
④ [l_max, r_max] 或等效答案;(2分)
难度:一般
试题解析:
参考程序:
def fun_max(num=list):
return max(num)
def fun(num):
n = len(num)
if n <= 2:
return fun_max(num)
l_list, r_list = num[:n//2], num[n//2:]
l_max, r_max = fun(l_list), fun(r_list)
return fun_max([l_max, r_max])
if __name__ == "__main__":
alist = [22,13,34,4,68,15,5,58,36]
print(fun(alist))
37.
现有n个人依次围成一圈玩游戏,从第1个人开始报数,数到第m个人出局,然后从出局的下一个人开始报数,数到第m个人又出局,...,如此反复到只剩下最后一个是胜利者。设n个人的编号分别为1,2,...,n,打印出局的顺序。
根据上述算法思想,补全下列代码。
输入输出示例:当n=10,m=4,输出如下:
出局的人是: 4
出局的人是: 8
出局的人是: 2
出局的人是: 7
出局的人是: 3
出局的人是: 10
出局的人是: 9
出局的人是: 1
出局的人是: 6
最后胜利者是: 5
def fun(n,k):
L = list( ① )
if n == 1:
return
else:
x = 0
for i in ②
x = ③ - 1
print('出局的人是:',L[x])
del L[x]
if x < 0:
x = 0
print('最后胜利者是:', ④ )
fun(10,4)
试题编号:20210128-ph-036
题型:编程题
答案:
评分标准: ① range(1,n+1) 或等效答案;(3分)
② range(n-1): 或等效答案;(3分)
③ (x + k) % len(L) 或等效答案;(3分)
④ L[0] 或等效答案;(3分)
难度:较难
试题解析:
参考程序: def fun(n,k):
L = list(range(1,n+1))
if n == 1:
return
else:
x = 0
for i in range(n-1):
x = (x + k) % len(L) - 1
print('出局的人是:',L[x])
del L[x]
if x < 0:
x = 0
print('最后胜利者是:',L[0])
fun(10,4)
38.
设计一个算法,将一个正整数分解质因数。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,输出即可。
(2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
根据上述算法思想,补全下列代码。
输入输出示例:当n=105,输出:105= 3*5*7
当n=60,输出:60= 2*2*3*5
def fun(n):
print('%d='%n,end=' ')
for i in ① :
while n!=i:
if n>i and ② :
print(i,end='*')
③
else:
break
else:
④
break
if __name__ == "__main__":
while True:
num=input("输入一个正整数:")
if not num.isdigit():
break
fun(int(num))
试题编号:20210128-ph-038
题型:编程题
答案:
评分标准:
① range(2,n+1) 或等效答案;(3分)
② n%i==0 或等效答案;(3分)
③ n=n//i 或等效答案;(2分)
④ print(n) 或等效答案;(2分)
难度:一般
试题解析:
参考程序:
def fun(n):
print('%d='%n,end=' ')
for i in range(2,n+1):
while n!=i:
if n>i and n%i==0:
print(i,end='*')
n=n//i
else:
break
else:
print(n)
break
if __name__ == "__main__":
while True:
num=input("输入一个正整数:")
if not num.isdigit():
break
fun(int(num))