【免费】中国电子学会2024年03月份青少年软件编程Python等级考试试卷四级真题(含答案)

2024-03 Python

分数:100

数:38

测试时长:60min

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

1. 运行如下代码,若输入整数3,则最终输出的结果为?( C)(2分)

def f(x):

    if x==1:

        s=1

    else:

        s=f(x-1)*x

    return s

n=int(input("请输入一个大于1的整数:"))

print(f(n)+f(n-1))

A. 2

B. 4

C. 8

D. 16

答案解析:由于f(3)=f(2)*3,f(2)=f(1)*2,f(1)=1,所以f(3)+f(2)=6+2=8。

2. 运行下列程序,输出的结果是?(B )(2分)

def fun(x):

    if x > 3:

        return x * fun(x-1)

    else:

        return x

 print(fun(6))

A. 120

B. 360

C. 720

D. 60

答案解析:递归函数求解,根据递归函数6*5*4*3=360

3. 下列关于递归的描述不正确的是?(D )(2分)

A. 递归函数一定包含if语句

B. 递归函数体内一定包含调用自身的语句

C. 在调用自身函数时需要明确的边界终止条件与边界值

D. 递归算法一般代码简洁,执行效率高,空间复杂度低

答案解析:递归算法一般代码简洁,易于理解,但执行效率较低,空间复杂度高。

4. 运行下列程序,输出的结果是?(D )(2分)

def fun(a, n):

    s = 0

    for i in range(1, n+1):

        temp = str(a)*i

        s += int(temp)

    return s

print(fun(1, 3))

A. 3

B. 6

C. 12

D. 123

答案解析:递推函数求解,本题是求1+11+111之和。

5. 运行下列程序,输出的结果是?(A )(2分)

def fun(a, b):

    s = 0

    a = a[::-1]

    for i in range(len(a)):

        s += int(a[i])*b**i

    return s

print(fun('45', 16))

A. 69

B. 45

C. 64

D. 61

答案解析:递推函数求解,本题是根据一个字符串和进制,转换成对应的十进制。

6. 一个荷花池,第一天荷花开放得很少,第二天开放的数量是第一天的两倍,之后的每一天,荷花都会以前一天两倍的数量开放。如果到第30天,荷花就开满了整个池塘,设第一天开一朵,编程求第30天共开了多少朵荷花。下面空白处的代码填写正确的是?(B )(2分)

s = 0

t = 1

for i in range(1,        ①        ):   

    s += t

            ②       

print(s)

A. 30, t = t*2

B. 31, t = t*2

C. 31, t+=2

D. 30, t*=2

答案解析:递推函数求解,本题递推关系是t = t*2, 循环次数是30次。

7. 解决下列问题时,时间复杂度最大的是?(C )(2分)

A. 输入n个不同的包含两位小数的实数,计算这n个数的和

B. 在n个数据中,查找数据k

C. 将n个数据用冒泡排序实现排序

D. 计算算式1-2+3-4+...-n的结果,n为偶数

8. 以下关于分治算法的描述正确的是?(B )(2分)

A. 各个子问题既相互独立又相互联系

B. 问题可以分解成若干个规模较小的相同问题

C. 可以直接对问题进行求解

D. 子问题的解不能合并成原问题的解

答案解析:分治算法的特征,各个子问题相互独立,子问题的求解可以合并成原问题的解。

9. 下列选项中哪一项使用了分治算法?(A )(2分)

A. 二分搜索

B. 选择搜索

C. 插入搜索

D. 顺序搜索

答案解析:二分查找体现了分治算法。

10. 不超过20个元素的降序数列,使用对分查找能找到指定的元素,可能的查找次数不包括?(D )(2分)

A. 3

B. 4

C. 5

D. 6

答案解析:int(log220)+1=5。

11. 下面程序段的输出结果是?(C )(2分)

def add_Run(L=None):

     if L is None:

          L = ['Lying']

     else:

          L.append('Run')

     return L

add_Run()

print(add_Run())

print(add_Run(['Lying']))

A.

['Lying']

['Run']

B.

['Lying']

['Lying']

['Lying', 'Run']

C.

['Lying']

['Lying', 'Run']

D.

[]

['Lying', 'Run']

答案解析:if分支定义列表,else分支添加列表元素。

12. 下面关于计数器的程序,输出结果正确的是?( A)(2分)

count = 0

def increment():

         global count

         count += 1

         print("计数器的值:", count)

increment()

increment()

increment() 

A.

计数器的值: 1

计数器的值: 2

计数器的值: 3

B.

计数器的值:0

计数器的值:1

计数器的值:2

C.

计数器的值: 1

计数器的值: 1

计数器的值: 1

D.

计数器的值:3

答案解析:在函数内部可以通过关键字global来定义全局变量。

13. 下列程序段的输出结果是?( A)(2分)

L = []

x = 3

def  test(x):

       L.append(x)

       x = 5

test(x)

print('L = {}, x = {}'.format(L, x))

A. L = [3], x = 3

B. L = [5], x = 5

C. L = [3], x = 5

D. L = 3, x = 5

答案解析:函数内部定义变量x的值为5,只能作用于函数内部。

14. 以下程序,运行程序输出结果正确的是?( C)(2分)

def demo(x):

    return x*2

print(demo(demo(1)))

A. return  None

B. 2

C. 4

D. 8

答案解析:调用二次,1乘以二次2,因此结果为4。

15. Python使用下列哪个函数接收用户输入的数据?(B )(2分)

A. accept()

B. input()

C. print()

D. login()

答案解析:在Python中,用于获取用户输入的函数是input()。

16. 下面程序段的输出结果正确的是?(C )(2分)

def  power():

     x ='python'

     y = 'world'

     z = x + " " + y

     return z

print(power())

A. z

B. x + " " + y

C. python world

D. python" "world

答案解析:该函数作用为连接字符串。

17. 下列关于Python函数的描述中,不正确的是?(B )(2分)

A. 自定义函数时用到的关键字是def

B. 在python函数中,至少有一条return语句

C. 函数print()可以一次输出多个参数,如print('1',"2",3,[4])

D. 用函数eval()可以用于求字符串里表达式的值,如eval('3+5-1')

答案解析:函数可以有返回值,也可以没有返回值。需要返回值的函数,可以包含一条或者多条return语句;没有返回值的函数,不需要包含return语句。

18. 关于以下代码的描述中,正确的是?(A )(2分)

#求两个正方形的面积差

def MianJiCha(a,b):

    s=a**2-b**2

    return s

a=5

b=10

c=MianJiCha(b,a)+a

A. 代码运行后,变量c的值是80

B. 函数名是MianJiCha(a,b)

C. 可以用MianJiCha(100)的形式调用此函数

D. 代码运行时会报错

答案解析:s=10**2-5**2+5=100-25+5=80

19. 下列关于Python函数的说法中,错误的是?(D )(2分)

A. 利用函数可以降低编程复杂度,增加代码可读性

B. 函数可以重复调用

C. 函数可以降低修改代码的工作量

D. 调用函数时,每次都必须输入相同的参数值

答案解析:有些函数需要输入参数才能调用,有些不需要。需要输入参数的函数在多次调用时,允许输入合法的不同参数。这也正是函数可复用的实现形式。

20. 下列选项中,调用下列代码定义的函数时,程序会报错的是?(D )(2分)

def ShuChu(a,b,c):

    print(c,b,a)

A. ShuChu('1','2','3')

B. ShuChu('1','2','3,4')

C. ShuChu(1,2,3)

D. ShuChu(1,2,3,4)

答案解析:在使用位置实参的方式传值时,传入的实参个数必须与形参相同,否则运行程序会报错。

21. 下列选项中,调用以下代码定义的函数时,程序会报错的是?(A )(2分)

def kp(a,b,c):

    print(a,b,c)

A. kp(1,b=2,3)

B. kp(a=3,b=1,c=2)

C. kp(1,2,3)

D. kp(1,b=2,c=3)

答案解析:在函数调用时,采用位置实参与关键字实参混合传入参数时,位置实参必须放在关键字实参之前。

22. 下列代码的输出结果是?( C)(2分)

>>>s=lambda m,n:m*n

>>>s(6,6)

A. 6

B. 6,6

C. 36

D. 12

答案解析:匿名函数中,冒号前面是参数列表,冒号后面是函数的返回值。m=6,n=6,s=m*n=6*6=36

23. 以下函数定义错误的选项是?(C )(2分)

A.

def aFunc(m,n):

    print(m,n)

B.

def aFunc(m,n=2):

    print(m,n)

C.

def aFunc(*m,n):

    print(m,n)

D.

def aFunc(m,*n):

    print(m,n)

答案解析:*m表示是可变参数,可传入值的个数不确定。可变参数只能放在不可变参数的后面,不然解释器将不能识别哪些值传给可变参数,哪些值传给不可变参数。

24. 用于安装Python第三方库的工具是?(B )(2分)

A. install

B. pip

C. Wheel

D. setup

答案解析:pip是Python自带的第三方库的安装工具。

25. 编程时,如果只需要导入某第三方库中的某个成员,需要使用到的关键字是?(A )(2分)

A. from

B. as

C. into

D. inport

答案解析:导入外部模块的某个成员,使用from关键字。

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

26. 若某个问题既能用递归算法求解,又能用递推算法求解,则使用递归方法求解更容易,效率也高得多。( 错)

答案解析:递归求解效率要低。

27. 如下代码因为递归的边界条件设置错误,产生了无限递归程序报错。(对 )

def fun(n):

    if n > 10:

        return 0

    else:

        return n + fun(n-1)

print(fun(10))

答案解析:递归的边界条件设置错误,产生了无限递归程序报错。

28. 算法的时间复杂度与空间复杂度没有必然关系。(对 )

答案解析:算法的时间复杂度与空间复杂度没有必然关系。

29. 已知有n本按照书名拼音排序好的图书,使用对分查找法搜索其中任何一本书,最多查找次数为4次,则n的值有可能为10。( 对)

答案解析:根据二分查找最坏查找次数可得。

30. 函数定义语句def  f(c=1,d=2,a,b):是正确的,因为默认值形参要放在前面。( 错)

答案解析:函数定义,默认值形参要放在后面。

31. return语句可以返回任何数据类型的值,包括整数、浮点数、字符串、列表、元组、字典等。( 对)

答案解析:return语句可以用于在函数执行结束后返回一个值。这个值可以是任何类型,例如整数、浮点数、字符串、列表等等。

32. def ZiDian(**kwargs):

    print(kwargs)

ZiDian(a=1)

运行上面的代码后,输出结果为{'a':1}。(对 )

答案解析:当不确定需要传入的值是多少时,在定义形参时,可以使用*args(列表)、**kwargs(字典)来表示。在元素前加上**后,传入的值以字典的形式显示出来。

33. 以下代码可以正常运行,输出8。( 错)

def qh(a,b=3):

    print(a+b)

qh(b=2,6)

答案解析:在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参。不然,程序会报错。

34. 代码>>>lambda:x=2,y=3:x+y 的运行结果是5。(错 )

答案解析:匿名函数中冒号前面的部分表示参数列表,不能有赋值语句,不然会报“can't assign to lambda”错误。

35. 使用pip install --upgrade numpy命令能够升级numpy科学计算库。( 对)

答案解析:pip的install --upgrade numpy指令用来升级外部模块。

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

36. 数的分解

给出一个正整数a,要求分解成若干个正整数的乘积,即a=a1×a2×a3×...×an,并且1<a1≤a2≤a3≤...≤an,问这样分解的种类有多少。注意到a=a也是一种分解。

例如,8可以分解成8=2*2*2,8=2*4,8=8总共3种。

代码如下,完善划线处的代码:

def fun(x, y=2):

    if x == 1:

        global ans

               ①       

    for i in range(y, x+1):

        if         ②        :

            fun(x//i,i)

lst = [2, 8, 9, 20] #测试数据

for i in lst:

    ans = 0

            ③       

    print(ans)

程序运行结果如下:

1

3

2

4

参考程序:

def fun(x, y=2):

    if x == 1:

        global ans

        ans += 1

    for i in range(y, x+1):

        if x % i == 0:

            fun(x//i, i)

lst = [2, 8, 9, 20] #测试数据

for i in lst:

    ans = 0

    fun(i)

    print(ans)

评分标准:

(1)ans += 1 或等效答案;(2分)

(2)x % i == 0 或等效答案;(3分)

(3)fun(i) 或等效答案。(3分)

37. 购物组合

小明单位发了100元的购物卡,小明到超市买三类洗化用品:洗发水(15元)、香皂(2元)、牙刷(5元)。要把100元正好花掉,可有哪些购买组合?

def  gouwu(money):

        for i in range(0,money//15+1):

             for j in range(0,money//2+1):

                   for  k  in  range(0,        ①        ):

                          if           ②        :

                               print('可选择的购买组合:\t购买洗发水 {} 瓶,香皂 {} 块,牙刷 {}个。'.format(        ③        ))

gouwu(100)

标准答案:

参考程序:

def  gouwu(money):

      for i in range(0,money//15+1):

           for j in range(0,money//2+1):

               for  k  in  range(0,money//5+1):

                    if i*15+j*2+k*5==money:

                       print('可选择的购买组合:\t购买洗发水 {} 瓶,香皂 {} 块,牙刷 {}个。'.format(i,j,k))

gouwu(100)

答案解析:

评分标准:

(1)money//5+1 或等效答案;(3分)

(2) i*15+j*2+k*5==money 或等效答案;(4分)

(3) i,j,k 或等效答案。(3分)

38. 回文素数

回文素数是指一个不小于11的自然数n从左向右和从右向左读,其结果值相同且是素数,即称n为回文素数。一种求解的方法是先判断一个自然数是否为回文数,再判断它是否为素数。如果两个判断都成立,则该自然数是回文素数。请补全代码,找出自然数1000以内的所有回文素数。

#判断是否为素数

def         ①        (n):            

    for i in range(2,n):

        if         ②        :

            break

    else:

        return True

#判断是否为回文数

def HuiWenShu(n):

    n=str(n)

    if n==        ③        :

        return True

    else:

        return False

for i in range(11,1001):

    if ZhiShu(i)==True         ④        :

        print('{}是回文素数!'.format(i))

参考程序:

#判断是否为素数

def ZhiShu(n):            

    for i in range(2,n):

        if n%i==0:

            break

    else:

        return True

#判断是否为回文数

def HuiWenShu(n):

    n=str(n)

    if n==n[::-1]:

        return True

    else:

        return False

for i in range(11,1001):

    if ZhiShu(i)==True and HuiWenShu(i)==True:

        print('{}是回文素数!'.format(i))

评分标准:

(1)ZhiShu 或等效答案;(2分)

(2)n%i==0 或等效答案;(2分)

(3)n[::-1] 或等效答案;(4分)

(4)and HuiWenShu(i)==True 或等效答案。(4分)

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值