真题与解析 202112四级 青少年软件编程(Python)考级

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

202112真题与解析

分数:100  题数:38  测试时长:60分钟

一、单选题(共25题,每题2分,共50分)

1.Python 中函数不包括?( )

A. 标准函数         

B. 第三库函数         

C. 内建函数         

D. 参数函数

         

2.以下关于函数参数和返回值的描述,正确的是?( )

A. 关键字传递是根据每个参数的名字传递参数,实参的顺序需要和形参的顺序一致。         

B. 可选参数传递指的是没有传入对应参数值的时候,就不使用该参数。         

C. 函数能同时返回多个值,需要形成一个列表来返回。         

D. 给参数赋予默认值,如果该参数最终没有被传递值,将使用该默认值。

         

3.关于 import 引用,以下选项中描述错误的是?( )

A. 使用 import turtle 引入turtle 库。         

B. 可以使用 from turtle import setup 引入 turtle 库。         

C. 使用 import turtle as t 引入 turtle 库,取别名为 t。         

D. import 保留字用于导入模块或者模块中的对象。

                  

4.关于算法的描述,以下选项中错误的是?( )

A. 算法是指解题方案的准确而完整的描述。         

B. 算法的复杂度主要包括时间复杂度和数据复杂度。         

C. 算法具有可行性、确定性、有穷性的基本特征。         

D. 算法的基本要素包括数据对象的运算和操作及算法的控制结构。

                  

5.变量的作用域是指程序代码所能够访问到该变量的区域,以下表述中哪一个是错误的?( )

A. 在函数内部定义的变量是局部变量         

B. 在函数外部定义的变量是全局变量         

C. 在函数外部可以使用函数内部定义的变量         

D. 在函数内部可以使用函数外部定义的变量

                  

6.有以下程序,运行程序输出的结果是?( )

x=1

def demo(): 

    x=2 

    print(x) 

demo() 

print(x)

A. 1 1         

B. 2 1         

C. 1 2         

D. 2 2

                  

7.匿名函数是指没有名字的函数,Python中需要使用哪一个表达式来创建匿名函数?( )

A. function         

B. filter         

C. lambda         

D. global         

         

8.函数调用可以分为将实际参数的值传递给形式参数,以及将实际参数引用传递给形式参数,如果实际参数是可变对象,以下关于函数形式参数和实际参数的表述正确的是?( )

A. 值传递可以改变实际参数的值,但是形式参数的值不能改变         

B. 值传递可以改变形式参数的值,但是实际参数的值不能改变         

C. 值传递可以同时改变形式参数和实际参数的值         

D. 值传递既不能改变实际参数的值,也不能改变形式参数的值         

         

9.关于函数,以下选项中描述错误的是?( )

A. 函数是一段具有特定功能的、可重复用的语句组         

B. 函数能完成特定的功能,对函数的使用不需要了解函数内部实现原理,只要了解函数的输入输出方式即可         

C. 使用函数的主要目的是降低编程难度和代码重用         

D. Python使用del保留字定义一个函数

10.在Python中,以下关于函数的描述错误的一项是?( )

A. 默认参数的值可以修改         

B. 引入了函数式编程的思想,函数本身亦为对象         

C. 关键字参数在使用时不允许改变参数列表中的参数顺序         

D. 函数的return语句可以以元组的方式返回多个值

11.关于Python的自定义函数的说法,下列哪个表述是错误的?( )

A. 函数名的命名规则与变量名的命名规则相同         

B. 如果有多个参数,各参数之间使用“;”隔开         

C. 即使函数没有参数,也必须在函数名后面保留一对空的“()”         

D. 函数体相对于自定义函数的关键字必须保持一定的缩进

         

12.执行以下程序,以下表述中错误的一个是?( )

def demo(a,b): 

    c=a**2+b 

    b=a 

    return c 

a=10 

b=100 

c=demo(a,b)+a

A.该函数名称为demo         

B.执行该函数后,变量a的值为10         

C.执行该函数后,变量b的值为100         

D.执行该函数后,变量c的值为200

         

13.调用函数时,使用位置参数接收实际参数,以下表述正确的是?( )

A. 指定的实际参数必须与形式参数的数量一致,位置一致         

B. 指定的实际参数必须与形式参数的数量一致,位置可以不一致         

C. 指定的实际参数必须与形式参数的位置一致,数量可以不一致         

D. 指定的实际参数与形式参数的数量以及位置不需要一致

         

14.设有以下函数,运行程序输出的结果是?( )

def demo(a,b): 

    a*=b 

    return a 

s=demo(5,2) 

print(s) 

A. 5         

B. 10         

C. 12         

D. 20

15.递归算法的执行过程,一般来说,可先后分成以下哪两个阶段?( )

A. 穷举和回归         

B. 递推和回归

         C. 穷举和回溯

D. 递推和回溯

                           

16.设某算法的计算时间表示为递推关系式T(n)=T(n-1)+n(n为正整数)及T(0)=1,该算法的时间复杂度为以下哪一项?( )

A. O(log2n)         

B. O(nlog2n)         

C. O(n)         

D. O(n2)

17.运行以下程序,正确的打印结果是?( )

def sum1( arg1, arg2 ):          
    total = arg1 + arg2          
    return total          
t= sum1( 10, 20 )          
print(t)

A. 10         

B. 20         

C. 30         

D. 40

                  

18.若要求出把a个元素分成b个子集,有多少种可能性,例:function(4,2)返回值为7,则返回值中函数的参数分别为?( )

def function(a,b):

    if (b == 1 or b == a):

        return 1

    else:

        return function(   )+b*function(a-1,b) 

A. (a-1,b-1)

B. (a+1,b-1)

C. (a-1,b+1)         

D. (a+1,b+1)

19.下列属于math库中的数学函数是?( )

A. time()         

B. round()         

C. sqrt()         

D. random()

         

20.运行下列代码,正确的输出结果是?( )

def yang(n):

    if n == 0:

        return [1]

    else:

        return[([0]+yang(n-1))[i]+(yang(n-1)+[0])[i]  for i in range(n+1) ]

print(yang(4)) 

A. [1,4,6,4,1]         

B. [1,5,10,10,5,1]         

C. [1,1,1]         

D. [1,3,3,1]

                  

21.下列程序段的运行结果为?( )           
def f(n):          
    if n<=0:          
         return 1          
    else:          
        return f(n-1)*3          
print(f(4))

  1.  9
  2. 27         

C. 81         

D. 243

         

22.以下函数要实现3的阶乘,则应补充选项为?( )

def func(m):

    if(___):

        return func(m+1)*m

    else:

        return 1

print(func(1))

A. m<3         

B. m<=3         

C. m<=4         

D. m<=2

23.对于数列1,2,8,11,15,17,19,25,30,45,采用“二分查找”法查找11,需要查找多少次?( )

A. 5

B. 4         

C. 3         

D. 2

         

         

24.下面哪种算法使用了分治的方法?( )

A. 冒泡排序         

B. 选择排序         

C. 插入排序         

D. 对分查找

25.关于递归函数出口的说明,以下选项中错误的是?( )

A. 递归函数的出口决定递归的深度。         

B. 每个递归函数都只能有一个递归出口。         

C. 递归函数必须有出口。         

D. 递归函数的出口不再进行递归。

二、判断题(共10题,共20分)

26.运行如下图的代码,将不会报错而打印出数字7。请判断对错.()

         

       

         27.如下图代码,最后运行结果将会打印出数值6,请问对吗?()

          

         

28.如果在printnum(number)函数内部想要使用全局变量value,那么就要在函数内部使用关键词global声明全局变量value。  ()       
   value = 10          
   def printnum(number):          
        global value          
        num = number + value          
        return num

                  

29.执行以下代码:()         
def fun():          
     x=15          
print(x)          
程序输出的结果为15。

                  

30.执行以下代码:  ()       
def funct():          
    print("I love")          
    def funct_1():          
        print("Python")          
funct()          
程序输出的结果为:I lovePython

31.执行以下代码: ()        
Func(2,3)          
def Func(a,b):          
    z=a*b          
    return z          
程序返回结果为:6

32.执行以下代码:     ()    
def add(sum,x):          
    if sum<10:          
        x +=2          
        sum=sum+x          
        add(sum,x)          
    return sum          
print (add(0,0))          
程序输出的结果为:2

33.执行以下代码:    ()     
def fun(m):          
    if len(m)==1:          
        return m[0]          
    mid=len(m)//2          
    l=fun(m[:mid])          
    r=fun(m[mid:])          
    return l+r          
m=[5,23,41,3,11]          
print(fun(m))程序输出的结果为:42

34.假设一个一维列表中有200个元素,列表中的元素都已经按降序排列,若采用二分搜索策略查找某一个元素,则最多需要8次比较就能确定是否存在所查找的元素。()

35.当你安装的第三方库有一个或者多个依赖时,我们可以选择自动安装,直接运行 pip install xxx (xxx为你要安装库的名字)。()

三、编程题(共3题,共30分)

36.要求:设计一个算法,求1~n(n为大于2的正整数)中有哪些素数,总共是多少个素数?根据上述计算规则,补全下列代码。

函数名:getPrime(n)          
参数表:n -- n为大于2的正整数。         
返回值:返回素数组成的数组。         
示例:当n=9时,返回:您输入的区间1-n中素数分别是:[2, 3, 5, 7],总共是4个素数!

primeList = []          
         
import math          
def getPrime(n):          
    for x in range(2,n+1):          
        x_sqrt =   ①              
        for prime in primeList:          
            if   ②              
                primeList.append(x)          
                break          
            if   ③              
                break          
        else:          
            primeList.append(x)          
    return primeList                  
m=int(input("请您输入一个整数n:"))          
print('您输入的区间1-n中素数分别是:'+  ④    )+',总共是'+str(len(primeList))+'个素数!')

         

37.编写上交作业的程序,老师要求把小组7位同学(编号为1,2,3,...,6,7)的作业收齐,小组编号1的同学跟编号2的同学说“收作业了”,之后每位同学依次向后面的一位同学说要“收作业了”,直到最后,编号7的同学将自己的作业,上交到编号6的同学手中,编号6的同学将编号7的作业及自己的作业一起上交到编号5的同学,按这样的流程;直到编号1将其他同学的作业及自己的作业上交到老师中。要求编号7同学的作业放在最前面,即老师看到的作业是编号7的作业,然后是编号6的作业,最后是编号1的作业。         
根据上述算法思想,编写自定义函数完成程序功能,完善空白处代码。         
"""          
函数名def getHomeWork(hw,n)          
参数表:hw存储每位同学的作业信息,n表示第n位同学的作业          
返回值:每位同学的作业,要求最后1位同学的作业显示在最前面,第1位同学作业显示在最后面          
"""          
def getHomeWork(hw,n):          
    if n ==  ①  :          
        return   ②            
    return   ③            
homew=["作业1","作业2","作业3","作业4","作业5","作业6","作业7"]          
zuoye = getHomeWork(homew,0)          
print(zuoye)          

38.要求:设计一个算法,枚举排列问题。输入1-n的第1个排列,如1 2 3,按照大小输出1~n的所有排列,并统计全部排列总数。         
根据上述算法思想,补全下列代码。         
描述:输入1-n的第1个排列,如1 2 3,按照大小输出1~n的所有排列。         
函数名:perm(n,begin,end)          
参数表:n -- 整数n,begin -- 指向排列的第一个元素,end-- 指向排列的最后一个元素。         
返回值:输出1-n的所有排列方式,每行一个排列,按从小到大。         
示例:当输入1 2 3时,返回:         
[1, 2, 3]          
[1, 3, 2]          
[2, 1, 3]

[2, 3, 1]

[3, 2, 1]

[3, 1, 2]

排列总数是:6个!         
         
COUNT=0          
def perm(n,begin,end):          
    global COUNT          
    if   ①              
        print (n)          
        COUNT +=1          
    else:          
        i=begin          
        for num in   ②    :          
            n[num],n[i]=n[i],n[num]          
              ③              
            n[num],n[i]=n[i],n[num]          
           
arr = input("1-n的第1个排列:")              
n = [int(n) for n in arr.split()]          
  ④    

print ("排列总数是:%d个!"% COUNT)

参考答案及解析:

一、单选题

1. 答案:D

   - 解析:Python中的函数包括标准函数、第三方库函数、内建函数等,没有参数函数这一分类。

2. 答案:D

   - 解析:关键字传递是根据参数名传递参数,实参顺序不需要和形参顺序一致;可选参数传递指在没有传入对应参数值时,使用默认值;函数可以直接返回多个值,不一定需要形成列表。

3. 答案:B

   - 解析:from turtle import setup只能引入turtle库中的setup函数,不能引入整个turtle库。

4. 答案:B

   - 解析:算法的复杂度主要包括时间复杂度和空间复杂度,不是数据复杂度。

5. 答案:C

   - 解析:在函数外部不能直接使用函数内部定义的变量。

6. 答案:B

   - 解析:函数内部定义的变量x是局部变量,不影响外部的全局变量x。

7. 答案:C

   - 解析:Python中使用lambda表达式创建匿名函数。

8. 答案:C

   - 解析:函数调用可以分为将实际参数的值传递给形式参数,以及将实际参数引用传递给形式参数,如果实际参数是可变对象,值传递可以同时改变形式参数和实际参数的值。

9. 答案:D

   - 解析:Python使用def保留字定义一个函数,不是del。

10. 答案:C

   - 解析:关键字参数在使用时可以改变参数列表中的参数顺序。

11. 答案:B

   - 解析:函数的参数之间用逗号隔开,不是分号。

12. 答案:D

   - 解析:函数demo计算a的平方加上b的值,并将b赋值为a。调用demo(a,b)+a,即demo(10,100)+10=(10**2+100)+10=210,不是200。

13. 答案:A

   - 解析:使用位置参数接收实际参数时,指定的实际参数必须与形式参数的数量一致,位置一致。

14. 答案:B

   - 解析:函数demo将a乘以b的值返回,调用demo(5,2)返回5*2=10。

15. 答案:B

   - 解析:递归算法的执行过程分为递推和回归两个阶段。

16. 答案:D

   - 解析:根据递推关系式T(n)=T(n-1)+n及T(0)=1,可以推出T(n)=1+2+3+...+n=n(n+1)/2,时间复杂度为O(n²),但是这里题目中选项C的值为O(n),可能存在错误。如果按照正确的推导结果,时间复杂度应该是O(n²),选D。

17. 答案:C

   - 解析:函数sum1计算两个参数的和并返回,调用sum1(10,20)返回10+20=30。

18. 答案:A

   - 解析:递归函数中,当b不等于1且b不等于a时,返回function(a - 1, b - 1)+b*function(a - 1, b)。

19. 答案:C

   - 解析:time()是time库中的函数;round()是内置函数;sqrt()是math库中的函数;random()是random库中的函数。

20. 答案:A

   - 解析:函数yang实现了杨辉三角的生成,知识点:递归与递推。

21. 答案:C

   - 解析:函数f是递归函数,每次调用将结果乘以3,f(4)=f(3)*3=f(2)*3*3=f(1)*3*3*3=f(0)*3*3*3*3=1*3*3*3*3=81。

22. 答案:B

   - 解析:当m<=3时,递归调用func(m+1)*m实现3的阶乘。

23. 答案:B

   - 解析:按二分查找法的规律,每次先查找中间值,进行比较。

24. 答案:D

   - 对分查找使用了分治的方法。

25. 答案:B

   - 递归函数可以有多个递归出口。

二、判断题

26. 答案:

   - 这题考查学生对函数“关键字调用”的理解,有意多加了变量a,干扰学生思维

27. 答案:

   - 最基本的递推,循环3次,每次累加2,答案为6,正确

28. 答案:

   - 在函数内部通过global关键字,通过局部变量修改全局变量的值。

29. 答案:错

   - 函数fun中定义的局部变量x在函数外部无法访问,会报错。

30. 答案:错

   - funct函数内部定义的funct_1函数不会自动执行,输出结果只有“I love”。

31. 答案:错

   - 函数调用应该在函数定义之后,先执行Func(2,3)会报错。

32.答案:

   - 递归调用add函数的应用

33. 答案:错

   - 函数fun实现了将列表中的元素从中间分成两部分,分别递归求和后再合并,对于给定的列表[5,23,41,3,11],结果应该是83,不是42。

34. 答案:对

   - 对于200个元素的降序排列列表,采用二分搜索策略最多需要8次比较就能确定是否存在所查找的元素。

35. 答案:

   - 当安装的第三方库有依赖时,可以直接运行pip install xxx进行自动安装。

三、编程题

36.参考答案:

评分标准:

① math.sqrt(x) 或等效答案;(4分)

② prime > x_sqrt: 或等效答案;(3分)

③ x%prime==0: 或等效答案;(3分)

④ str(getPrime(m)) 或等效答案;(2分)

试题解析:

对于①处,x_sqrt = int(math.sqrt(x)),这里计算x的平方根并取整,用于后续判断。

对于②处,if prime > x_sqrt,如果当前遍历到的素数大于x的平方根,说明x是素数,因为如果x不是素数,那么在小于等于其平方根的数中必然能找到一个因子。

对于③处if x % prime == 0,如果x能被已找到的素数整除,说明x不是素数,直接跳出内层循环。

对于④处,这里应该输出找到的素数列表,即str(getPrime(m))。

参考程序:

primeList = []

import math

def getPrime(n):

    for x in range(2,n+1):

        x_sqrt = math.sqrt(x)

        for prime in primeList:

            if prime > x_sqrt:

                primeList.append(x)

                break

            if x%prime==0:

                break

        else:

            primeList.append(x)

    return primeList

m=eval(input("请您输入一个整数n:"))

print('您输入的区间1-n中素数分别是:'+str(getPrime(m))+',总共是'+str(len(primeList))+'个素数!')

37.标准答案:

①len(hw)-1 (3分)

②hw[len(hw)-1]  (3分)

③getHomeWork(hw,n+1)+hw[n]  (4分)

解析:

对于①处,判断条件应该是当n等于作业列表的长度时,说明已经遍历到最后一位同学,所以填len(hw)-1。

对于②处,当n等于作业列表长度时,应该返回最后一位同学的作业,即hw[n-1]。

对于③处,在递归调用中,先获取后面同学的作业,然后再加上当前同学的作业,所以是getHomeWork(hw,n+1)+hw[n]。

参考代码:

def getHomeWork(hw,n):

    if n == len(hw)-1:

        return hw[len(hw)-1]

    return getHomeWork(hw,n+1)+hw[n]

homew=["作业1","作业2","作业3","作业4","作业5","作业6","作业7"]

zuoye = getHomeWork(homew,0)

print(zuoye)

38.标准答案:

① begin>=end: 或等效答案;(2分)

② range(begin,end) 或等效答案;(2分)

③ perm(n,begin+1,end) 或等效答案;(2分)

④ perm(n,0,len(n)) 或等效答案;(2分)

解析:

①begin>=end: - 当`begin`大于等于`end`时,表示已经处理完了所有位置,生成了一个完整的排列。这是递归的终止条件,因为当遍历到最后一个位置时,就可以输出当前的排列了。

②range(begin,end) : - `range(begin, end)`会生成一个从`begin`开始到`end`(不包括`end`)的整数序列。在这个循环中,通过交换不同位置的元素来生成不同的排列。遍历这个范围可以确保对每个位置都进行了尝试。

③perm(n,begin+1,end) : - 这是递归调用,通过将`begin`增加 1,继续生成下一个位置的排列。每次递归调用都在逐渐构建完整的排列,直到满足终止条件。

④ perm(n,0,len(n)) - 这是在主程序中调用`perm`函数来启动排列的生成过程。传入参数`n`表示要生成排列的序列,`0`是起始位置,`len(n)`是结束位置(由于索引从 0 开始,所以这里传入序列的长度来表示最后一个位置)。这样可以从第一个位置开始生成所有可能的排列。

参考程序:

COUNT=0

def perm(n,begin,end):

    global COUNT

    if begin>=end:

        print (n)

        COUNT +=1

    else:

        i=begin

        for num in range(begin,end):

            n[num],n[i]=n[i],n[num]

            perm(n,begin+1,end)

            n[num],n[i]=n[i],n[num]

arr = input("1-n的第1个排列:")    

n = [int(n) for n in arr.split()]

perm(n,0,len(n))

print ("排列总数是:%d个!"% COUNT)         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴朗向上

你的鼓励是我最大的动力,感谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值