2021年6月电子学会Python等级考试试卷(四级)考题解析

2021年6月电子学会Python等级考试试卷(四级)考题解析,第1张

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

分数:100.00            题数:38

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

1. 对自然数1至n求和,如果将递推式f(n)=f(n-1)+n(n>1)转化成递归函数,则递归出口是?( )

A、f(1)=1

B、f(1)=0

C、f(0)=1

D、f(0)=0

答案:A

试题解析:

2. 对比两个求等差数列1+2+…+n的和的程序,其算法效率?( )

程序1:

n=int(input())

s=(1+n)*n/2

print(s)

程序2:

n=int(input())

s=0

for i in range(n+1):

    s=s+i

print(s)

A、程序1比程序2高

B、程序2比程序1高

C、一样高

D、不能判断

答案:A

试题解析:理解算法性能、算法效率概念

3. 若以下程序段的运行结果为“*#*#*”,则空格   (1)      (2)   处填写结果不可能为?( )

def f(n):

    s=""

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

        if i % 2==1:

            s=s+"*"

        else:

            s=s+"#"

    return s

print(f(     (2)     ))

A、3,8

B、3,7

C、9,14

D、1,6

答案:B

试题解析:当变量i为奇数时,s累计符号“*”,所以range函数的初始值为奇数,又因为总共输出了5个符号,所以range函数的终值为初始值+5。

4. 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子。假如兔子都不死,要求输出一年内兔子的数量是多少。如果采用递归算法来编程,则核心的递归逻辑应该是?( )

A、f(n) =n*f(n-1)

B、f(n) = f(n-1)+n

C、f(n) = f(n-1)+f(n-2)

D、f(n) = f(n-1)+ (n-1)f(n-2)

答案:C

试题解析:只有C是符合题意的递推式。

5. 下列程序使用了哪种算法?( )

def fact(n):

    if n==0:

        return 1

    else:

        return n*fact(n-1)

A、递推

B、递归

C、排序

D、分治

答案:B

试题解析:

6. 以下几项关于函数的说法,错误的是?(    )

A、函数是一段具有特定功能的语句组

B、调用函数时,参数传入的顺序必须与定义时保持一致

C、在一个程序中,函数的定义可以放在函数调用代码之后

D、使用函数可以增加代码重复利用率,还可以降低维护难度

答案:C

试题解析:函数是一段具有特定功能的语句组,使用函数能够提高代码的重复利用率,降低维护难度;调用函数时,参数传入的数量、顺序必须与定义时一致;函数必须定义在前,才可以调用。

7. 下面关于递归的描述不正确的是?( )

A、递归思想是将大型复杂的问题转化为一个与原问题相似的规模较小的问题来求解

B、递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,它不是分治策略的具体体现

C、递归必须有终止递归的条件

D、递归是在过程或函数里调用自身

答案:B

试题解析:递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,它是分治策略的具体体现

8. 下列哪项不是分治算法所具有的特征?( )

A、该问题的规模缩小到一定的程度就可以容易地解决

B、该问题可以分解为若干个规模较小的不同问题

C、利用该问题分解出的子问题的解可以合并为该问题的解

D、该问题所分解出的各个子问题是相互独立的

答案:B

试题解析:

9. 以下能正确计算出“1!+3!+5!”值(n!=1x2x3…xn)的自定义函数是?( )

A、def f():

    s=0

    t=1

    for i in range(1,6,2):

        t=t*i

        s=s+t

    return s

B、def f():

    s=0

    t=0

    for i in range(1,6,2):

        t=t*i

        s=s+t

    return s

C、def f():

    s=0

    t=1

    for i in range(1,6,2):

        t=t*i

        if i%2==1:

            s=s+t

    return s

D、def f():

    s=0

    t=1

    for i in range(1,6):

        t=t*i

        if i%2==1:

           s=s+t

    return s

答案:D

试题解析:A选项和C选项求的是1*1+1*1*3+1*1*3*5的值;B选项由于t=0,乘以任何数都等于0,所以最终结果为0。

10. 下面关于递归算法的描述,错误的是?( )

A、任何递归程序都可以改写成非递归程序

B、定义简单,逻辑清晰

C、算法的执行效率较高

D、原问题与子问题在结构上必须相似

答案:C

试题解析:C

11. 下列关于函数的描述正确的是?( )

A、使用函数的唯一目的是减少代码的重用

B、不带return的函数返回值是None

C、带有默认值的参数可以放在位置参数之前

D、函数可以有多个参数,参数之间使用;隔开

答案:B

试题解析:自定义函数中,可以有返回值,return语句;也可以没有返回值,不带return语句的,返回值是None

12.

以下程序是用什么算法思维来显示数列 1,4,7,10,13,16 ?( )

a=1

for i in range(6):

    print(a)

    a+=3

A、递归

B、递推

C、分治

D、枚举

答案:B

试题解析:

13. 运行下列这段程序,正确的输出结果是?( )

def f(a,b):

    c=a**2+b

    b=a

    return c

a=5

b=100

c=f(a,b)+b

print(c)

A、210

B、225

C、130

D、115

答案:B

试题解析:函数的形参作用域为本函数,实参变量b的值没有改变,还是100。

14. 安装wheel,wheel用于离线安装已经下载到本地的whl文件,可以在命令窗口直接运行?( )

A、pip list

B、pip wheel

C、pip unistall wheel

D、pip install wheel

答案:D

试题解析:知道pip、 wheel、 exe 安装方法

15. 下列选项中,哪个选项调用如下函数会报错?( )

def show(numbers):

    for n in numbers:

        print(n)

A、show([4,5,6])

B、show('Chinese')

C、show(3,4)

D、show((4,5,6))

答案:C

试题解析:调用函数时参数传入,数量必须一致

16. 运行下列程序,输出结果正确的是?( )

def demo(lst, k):

    if k

        return lst[k:]+lst[:k]

lst=[1,2,3,4,5,6]

print(demo(lst,4))

A、[4,5,6,1,2,3]

B、[5,6,1,2,3,4]

C、[6,5,4,3,2,1]

D、[1,2,3,4,5,6]

答案:B

试题解析:运行结果是函数的返回值,返回值为两个列表的合并

17. 在解决问题过程中,常用的“二分法”是一种什么算法?( )

A、分治

B、递归

C、推理

D、递推

答案:A

试题解析:

18. 在Python Shell提示符下输入以下哪个选项,回车后,再输入pi,回车,能得到数值3.141592653589793?( )

A、import math

B、import math as pi

C、from math import PI

D、from math import *

答案:D

试题解析:掌握 import 和from 方式

19. 下列程序段中自定义函数do(n)的作用是?( )

def do(n):

    s=0

    f=1

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

        s=s+1/i*f

        f=-f

    return s

print(do(10))

A、求1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10的值

B、求1+1/3+1/5+1/7+1/9的值

C、求1-1/3+1/5-1/7+1/9-1/10的值

D、求1-1/3+1/5-1/7+1/9的值

答案:D

试题解析:当调用自定义函数do(10)时,range(1,11,2)表示生成的序列为1,3,5,7,9,而变量f的作用是在1和-1之间互相转换,所以运算符号“+”、“-”交替出现。

20. 下列几个选项中,不是Python定义函数规则的是?( )

A、def关键字开头,后接函数名加括号,以冒号结束

B、Python定义函数时,必须声明形参类型

C、返回值写在return后面

D、使用函数名( )的方式调用函数

答案:B

试题解析:Python定义函数的规则:以def开头,后接函数名和 ’():’,有参数写在()中,下一行缩进,如果有返回值则写在return后面。Python定义函数时,不需要声明函数参数的类型

21. 以下哪项不是使用分治法解决问题的步骤?( )

A、分解

B、求解

C、合并

D、判断

答案:D

试题解析:

22. 在Python中,调用下面函数的返回值为?( )

def fun():

    x=101

A、None

B、101

C、程序报错

D、x=101

答案:A

试题解析:没有return语句的函数,返回值是None

23. 下列哪个选项的返回值与其他三项不同?( )

A、round(3.176)

B、abs(-3)

C、ord('3')

D、len([1,2,3])

答案:C

试题解析:round(x[,n])对x进行四舍五入(如果给定n,就将数x转换为小数点后有n位的数),所以A选项返回值为3。abs(x)返回x的绝对值,所以B选项的返回值为3。ord(x)返回x对应的ASCII值,所以C选项的返回值为51。len(seq)返回序列的长度,所以D选项的返回值为3。

24. 下列哪个是正确的函数名?( )

A、Plan_2021

B、2021plan

C、return

D、10plan10

答案:A

试题解析:函数的命名规则与变量名一致,由字母、数字和下划线组成,不能以数字开头,字母区分大小写,不能使用Python中的关键字,如return。

25. 以下函数的返回值是?( )

def pic(a:int,b:str)->str:

    c=a*b

    print(c)

    return c

pic(5,’*#*’)

A、*#**#**#**#**#*

B、5

C、5*#*

D、程序出错

答案:A

试题解析:Python是动态语言,自定义函数时不需要声明与指定类型,但是在Python3.5之后,新增了对函数参数和返回值的类型指定和检查。即使参数输入类型与定义时不一致,实际上运行不会报错,Python的本质还是动态语言。

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

26. 递归方法的运用不仅会简化主程序的设计,也会大大减少程序的代码量。

答案:正确

试题解析:正确。递归能减少程序的代码量

27. 在Python中定义函数时不需要声明函数的返回值类型。

答案:正确

试题解析:

28. Python程序是模块化架构,以.py的文件可以作为一个模块被引用。一些Python爱好者和支持者开发和分享了大量扩展库(包),可以根据需要用包管理器来安装或自定义,体现了Python语言强大的扩展性。

答案:正确

试题解析:理解模块化架构和包的管理

29. 通常问题的规模越大算法执行的时间就越长,算法执行时间的增长率和问题规模的增长关系,称为空间复杂度。

答案:错误

试题解析:时间复杂度和空间复杂度的概念,本题是时间复杂度的描述,不是空间复杂度。

30. 将一个大问题分解为若干子问题,且子问题与大问题是相同的问题,就构成了递归。

答案:错误

试题解析:还需要满足一个条件:不能无限制地调用本身,须有个出口,化简为非递归状况处理。

31. 将一个复杂的问题分解成若干个规模较小的子问题后,能不能利用分解出的子问题的解合并得到原问题的解是最关键的特征,它决定了是否可以使用分治算法。

答案:正确

试题解析:如果一个问题能够分解成若干个相同的规模较小的子问题,但是合并子问题的解不能得到原问题的解,就决定是该问题不能够运用分治算法求解。但是可以深度贪心算法或者动态规划算法求解。

32. 已知大写字母“A”对应的ASCII码值为65,变量ch保存输入的大写英文字母,则语句chr((ord(ch)+1-ord("A")) % 26+ord("A"))能实现大写英文字母后移一位,如A→B, B→C, ……Y→Z, Z→A。

答案:正确

试题解析:ord(x)函数的作用是返回x对应的ASCII值,chr(x)函数的作用是返回x对应的字符,x%y表示x除以y取余数,已知大写英文字母26为一循环,所以语句“chr((ord(ch)+1-ord("A")) % 26+ord("A"))”能实现大写英文字母后移一位。

33. 下列程序段运行后,打印结果为9。

def f():

    s=0

    for i in range(3,1,-1):

        if i<=1:

            x=1

        if i<=2:

            x=2

        if i<=3:

            x=3

        s=s+x

    return s

print(f())

答案:错误

试题解析:循环结构中循环变量i的值只能取到3和2。当i=3时,x=3,s=3;当i=2时,x=3,s=6。

34. 可以统计字符串、列表、元组、字典等内某元素个数的Python内置函数是index()。

答案:错误

试题解析:可以统计字符串、列表、元组、字典等内某元素个数的Python内置函数是count()。

35.

判断下列代码的正确与错误。 def f(a,b,c):

    print(a+b,b,c-a)

f(8,b=2,6)

运行上述程序段,结果为10  2  -2。

答案:错误

试题解析:本题在调用函数的过程中,实参传递时既有顺序,又有关键字,在两种方式混用时,顺序实参必须放在关键字实参的前面,否则程序会报错。

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

36.

质数是一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。下面的程序设计中,先自定义一个函数,用来判断一个数是否为质数。然后,通过键盘输入一个数,调用所编写的函数,判断该输入的数是否为质数。请根据上述设计思想,完成程序段中划线处的填空。

def findprime(m):

    for i in range(2,m):

        if _______①:

            return False     

        else:

            return ________ ②

n = int(input('请输入一个数:'))

if  _______③:

    print("该数是质数.") 

else:

    print("该数不是质数.")

答案:

参考答案:

① m % i ==0      (3分) ② True               (3分)

③ findprime(n)    (4分)

试题解析:def findprime(m):

    for i in range(2,m):

        if m % i==0:

            return False     

    else:

        return True 

n = int(input('请输入一个数:'))

if  findprime(n):

    print("该数是质数.") 

else:

    print("该数不是质数.")

37. 随机生成的10个在[1,100)范围内整数存入列表;输入一个待查找的整数k,运用二分法在列表中查找k,根据查找状态输出对应的结果,请将程序补充完整。

from random import randint

def b(s,v):

    top=0

    last=len(s)

    while  ①_

        mid=(top+last)//2

        if v==s[mid]:

            return mid

        elif v>s[mid]:

             ②_

        elif v

            last=mid-1

    return None

s=[randint(1,100) for i in range(10)]

s.sort() 

print(s) 

k=int(input())

ans=b(s,k)

if  ③_

    print('找到,下标是:',ans)

else:

    print('没有找到这个数!')

运行结果1:

[13, 25, 27, 41, 52, 66, 67, 69, 72, 75]

72

找到,下标是: 8

运行结果2:

[9, 15, 16, 19, 27, 31, 43, 64, 84, 93]

20

没有找到这个数!

答案:

参考答案:

①top<=last:或等效答案;(2分) ②top=mid+1或等效答案;(3分)

③ans!=None: 或等效答案;(3分)

试题解析:

参考答案:

from random import randint

def b(s,v):

    top=0

    last=len(s)

    while top<=last:

        mid=(top+last)//2

        if v==s[mid]:

            return mid

        elif v>s[mid]:

            top=mid+1

        elif v

            last=mid-1

    return None

s=[randint(1,100) for i in range(10)]

s.sort() 

print(s) 

k=int(input())

ans=b(s,k)

if ans!=None:

    print('找到,下标是:',ans)

else:

    print('没有找到这个数!')

38. 有一群兔子,4个4个地数余1个,5个5个地数余2个,9个9个地数余7个,试问兔子有多少只?(请将程序补充完整)

def   ① 

    while  ② 

        if n%5==2:

            break

        n+=9

    while True:

        if  ③ 

            break

        n+=45

    print(n)

f(16)

答案:

参考答案:

① f(n):或等效答案;(4分) ② True:或等效答案;(4分)

③ n%4==1:或等效答案;(4分)

试题解析:

函数相关概念2分,自定义函数的创建与调用10分

参考答案:

def f(n):

    while True:

        if n%5==2:

            break

        n+=9

    while True:

        if n%4==1:

            break

        n+=45

    print(n)

f(16)

 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/786519.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-05
下一篇2022-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存