青少年软件编程(python四级)等级考试试卷(2022年12月)

2023年06月01日

一、单选题

第 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
4

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. 81

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()

二、判断题

第 26 题 判断题

计算下面这段程序的时间复杂度为平方阶:O(n^2)。(?)

sum1=0
for i in range(101):
  sum1+=i

A. 正确

B. 错误

第 27 题 判断题

汉诺塔游戏是递归调用的经典案例。(?)

A. 正确

B. 错误

第 28 题 判断题

递推关系是递归的重要组成。(?)

A. 正确

B. 错误

第 29 题 判断题

以下命令:

pip get pandas

用于下载第三方库pandas,但不马上安装。(?)

A. 正确

B. 错误

第 30 题 判断题

使用Python语言编程,可以定义一个名叫pass的函数。(?)

A. 正确

B. 错误

第 31 题 判断题

函数中没有return语句或者return语句不带任何返回值,那么该函数的返回值为True。(?)

A. 正确

B. 错误

第 32 题 判断题

在Python中调用函数的时候,必须将每个实参都关联到函数定义中的每一个形参,最简单的关联方式就是基于实参的顺序。但也可以通过关键字实参的“关键字-值”方式关联形参,这时就不必考虑函数调用过程中实参的顺序。( )

A. 正确

B. 错误

第 33 题 判断题

在Python中,全局变量名和局部变量名一定不能重名。(?)

A. 正确

B. 错误

第 34 题 判断题

调用函数时,Python将形式参数传递给实际参数。(?)

A. 正确

B. 错误

第 35 题 判断题

分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。(?)

A. 正确

B. 错误

三、编程题

第 1 题 问答题

从键盘接收一组不重复整数,并将这组整数按从小到大的顺序排列。

以下程序采取快速排序法对这组整数进行排序。

快速排序法的原理是:

(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=" ")

第 2 题 问答题

鸡兔同笼是中国古代的数学名题之一。大约在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('能不能正常输入数据?')

第 3 题 问答题

有一个游戏:有两个人,第一个人先从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(     ③     ))