中国电子学会2023年05月份青少年软件编程Python等级考试试卷四级真题(含答案)

2023-05 Python四级真题

分数:100

题数:38

测试时长:60min

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

1.  下列程序段的运行结果是?(A)(2分)

def s(n):
    if n==0:
        return 1
    else:
        return n +s(n-1)
print(s(7))

A.  29

B.  27

C.  1

D.  0

2.  当n为6时,运行下列Python程序后的结果是?(B)(2分)

def f(n):
    if n<=2:
        return 1
    else:
        return f(n-1)+f(n-2)
n=int(input("请输入一个正整数:"))
print(f(n))

A.  5

B.  8

C.  11

D.  13

3.  有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。问第n年的时候,共有多少头母牛?由递推法可推测,当年数小于等于4的时候,第几年就是有几头牛,即a[1]=1;a[2]=2;a[3]=3;a[4]=4。当n大于4的时候,这时候第一年出生的那个小母牛就也可以生出小母牛了,也就是该考虑小母牛是否可以生了,所以n>4的时候,a[n]=?(A )(2分)

A.  a[n-1]+a[n-3]

B.  a[n-1]+a[n-4]

C.  a[1]+a[3]

D.  a[-1]+a[-3]

答案解析:前四年共有四只,从第五年开始,第二年出生的小母牛也会生一只母牛(而且以后每年初都会生一只母牛),加上第一年那只母牛生的小母牛,共有六只母牛;第六年的时候得加上第三年那只母牛生的母牛,共九只母牛;依次类推。

4.  二分查找又称折半查找,下列数列中适合二分查找算法的是?( D)(2分)

A.  11 99 4 25 3 39

B.  43 71 78 81 6 55

C.  67 62 68 4 1 17

D.  85 78 59 53 19 18

答案解析:根据二分查找的实现原理,首先数列元素必须是有序的。

5.  在32枚崭新的金币中,有一枚外表与真金币完全相同的假币(质量小一点),现在只有一台天平,则应用二分法的思想最多称几次就可以发现这枚假币?( B)(2分)

A.  4

B.  5

C.  6

D.  7

答案解析:二分查找法,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。

6.  已知在某程序中,有一个全局变量名为a。在程序中的某个函数中,再次定义了一个变量a,且该变量非组合类型变量。

下面哪个说法是对的?(B)(2分)

A.  如果在该函数中将a声明为global,则对a的操作与全局变量a无关。

B.  如果在该函数中未将a声明为global,则对a的操作与全局变量a无关。

C.  如果在该函数中未将a声明为global,则对a的操作即为对全局变量a的操作。

D.  不管在该函数中是否将a声明为global,对a的操作都是对全局变量a的操作。

答案解析:未声明为global,就是局部变量,因此与全局变量a无关。

7.  对于程序中的列表来说,哪个选项中的参数填写在range()中的横线上,算法执行效率最高?( C)(2分)

a=[1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1]
for i in range _____:
    if a[i]==1:
        print(i)

A.  (0,16,1)

B.  (0,16,2)

C.  (0,16,3)

D.  (0,16,4)

8.  下列函数中,不可以直接调用的是?(B )(2分)

A.  print( )

B.  sqrt( )

C.  str( )

D.  dict( )

答案解析:sqrt()函数是math模块里的函数,不能直接调用,应该先导入math模块。

9.  关于return语句,下列说法正确的是?(A )(2分)

A.  return语句中返回值的数据类型可以是列表

B.  return语句中不能有表达式

C.  一个函数至少有一个return语句

D.  return只能返回一个值

答案解析:return语句里可以包含表达式,也可以返回多个值。一个函数可以有返回值,也可以没有返回值。

10. 关于函数的描述,不正确的是?( C)(2分)

A.  函数中通过return语句返回结果

B.  函数可以提高代码的重复利用率

C.  在函数内部不能使用全局变量

D.  函数的定义必须在主程序函数调用语句之前

11. 小方编写计算长方形面积的匿名函数,下列哪一个语句是正确的?(A )(2分)

A.  rst = lambda a,b : a * b

B.  lambda a,b:a*b

C.  lambda a,b,a*b

D.  rst = lambda a,b,a*b

答案解析:关键字lambda表示匿名函数,冒号之前表示的是这个函数的参数,冒号之后表示的是返回值,在定义匿名函数时,需要将它赋值给一个变量。

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

s = 1
def sums(n):
    global s
    s = 0
    s = s + n
    print(s)
sums(5)
print(s)

A.  5 5

B.  5 1

C.  1 1

D.  1 5

答案解析:若想在函数内部对函数外的变量进行操作,需要在函数内部声明其为global,本题中在函数内部声明s为global,因此函数内改变后,影响函数外,因此输出结果都是5。

13. 小明帮老师统计年龄是10岁的学生数,老师手头有全年级每位学生的身份证号码等信息。他编写程序如下。

#列表stud存储每位学生的身份证号码,如
stud = ['110726201205261117','120718201209011101']
def cj(xs):
    c = 0
    for s in xs:
        age = int(   ①   )
        if 2023 - age == 10:
            c += 1
    return c
print(cj(stud) )

下列代码中,为实现统计功能划线处①的代码不能选的是?(D)(2分)

A.  s[6:10]

B.  s[6:-8]

C.  s[-12:-8]

D.  s[-12:11]

答案解析:从身份证号码中切片取出出生年份的代码,A,B,C三个选项代码均正确。

14. 下列有关递归的描述中,正确的是?(C )(2分)

A.  递归函数中肯定有循环结构

B.  递归没有体现“大事化小”的思想

C.  递归有明确的结束递归的边界条件

D.  递归执行效率较高

答案解析:递归有明确的结束递归的边界条件以及结束时的边界值,递归体现了“大事化小”的思想。

15. 小方的妈妈分苹果方法如下,第一天分掉其中一半加一个苹果,第二天分掉剩下的一半加一个苹果,以后每天都分掉剩下的一半加一个苹果。到第8天的时候妈妈发现只剩一个苹果了。请问小方妈妈一开始有多少个苹果? 这个问题我们可以用以下什么算法解决?(B )(2分)

A.  查找

B.  递推

C.  枚举

D.  排序

答案解析:从第8天往前计算第7天剩余的苹果数,然后再计算第6天的,依次递推解决问题。这是递推问题

16. 自然界的规律:花瓣的个数

大多数花瓣的个数有1、1、2、3、5、8、13、21、......,仔细观察这些数的顺序,会发现这些数的排列是有规律的,即斐波那契数列。小李同学编写程序求该数列的第n项的值。

方框中的代码由以下三部分组成:① a=b  ② b=c  ③ c=a+b,下列选项中代码顺序正确的是?(D)(2分)

A.  ①②③

B.  ①③②

C.  ③②①

D.  ③①②

17. 某同学用对分查找和顺序查找在数字序列“1,3,5,8,15,21,35,65”中查找数字15,两种方法都能访问到的下列数字是?(C )(2分)

A.  3

B.  5

C.  8

D.  34

答案解析:顺序查找数字15,访问的数字是1,3,5,8,15;使用二分查找数字15,访问到的数字依次是8,21,15;数字8是两种方法都访问到。因此选C。

18. 小李查看电脑上安装的Python库,下列命令可行的是?(B )(2分)

A.  pip install

B.  pip list

C.  pip show

D.  pip help

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

a = [0] * 10
def tj(n):
    while n>0:
        a[n%10] += 1
        n //= 10        
    return sum(a)
print(tj(20230113))

A.  8

B.  12

C.  4

D.  6

答案解析:函数tj功能统计整数n中每位数字出现的次数,当n=20230113时,0出现2次,1出现2次,2出现2次,3出现2次,因此答案选A。

20. 通常,定义一个函数,最多包含多少个参数?( D)(2分)

A.  3

B.  4

C.  5

D.  任意多

21. 调用下列哪个函数可查看说明文档?(A )(2分)

A.  help()

B.  range()

C.  len()

D.  print()

答案解析:help()函数可查看说明文档。

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

def sum(a):
    a+=1
a=6
sum(a)
print(a)

A.  8

B.  7

C.  6

D.  2

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

def py(a,b=2):
  a=a%b
  return(a)
print(py(7))

A.  1,2

B.  1

C.  3,2

D.  3

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

def py(b):
    b+=3
    return(b)
print(py(3))

A.  3

B.  6

C.  0

D.  9

25. 下列属于Python中文分词方向第三方库的是?(D )(2分)

A.  pandas

B.  beautifulsoup4

C.  python-docx

D.  jieba

答案解析:jieba属于python中文分词方向第三方库

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

26. 每次进入更深一层递归时,问题规模相比上次递归都应有所增大。( 错)

答案解析:每次进入更深一层递归时,问题规模相比上次递归都应有所减少。

27. 位置参数和关键字参数是函数调用时的概念,当二者共存时,关键字参数必须写在未知参数之前,否则会造成语法错误。(错 )

正确错误

答案解析:当二者共存时,关键字参数必须写在位置参数之后,否则会造成语法错误。

28. 一个函数可以没有参数,也可以有多个参数,但是参数的个数必须是确定的。(错 )

答案解析:函数的参数个数可以是不确定的。

29. 不了解函数内部实现细节就没有办法使用该函数。( 错)

答案解析:调用函数时,只需要知道函数名及函数的输入、输出即可,不需要知道函数的实现细节。

30. 小明编写如下函数,

def jiafa(x,y=0): 
    return x+y 

他用语句 jiafa(10) 调用函数,程序将提示运行错误。(错 )

答案解析:函数调用时,可以不给函数参数中的默认参数传值,故调用函数时返回结果10,并不会提示运行错误。

31. 运行如下程序,输出的结果是4。(错 )

def fun(n):
    if n == 1:
        return 1
    else:
        fun(n-1) * 2
print(fun(3))

答案解析:递归函数需要有return语句返回,即return fun(n-1)*2。

32. 空间复杂度是指算法被编写成程序后,在计算机中运行时所需存储空间大小的度量,记作S(n),其中n为问题的规模或大小。( 对)

答案解析:空间复杂度是指算法被编写成程序后,在计算机中运行时所需存储空间大小的度量,记作S(n),其中n为问题的规模或大小。

33. 自定义函数可以没有参数。( 对)

34. 分治算法一定会用到递归。( 错)

答案解析:分治算法不一定会用到递归。例如,对分查找也属于分治,但没有用到递归。

35. 调用库时为方便后续代码编写,可给其取一个别名,比如将matplotlib命名为plt。( 对)

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

36. 已知某c的第n项计算步骤如下:

小明编写程序计算第n项的结果。首先从键盘输入n,然后利用上述递推关系计算结果,请完善划线处的代码。

def fc(n):
    if n ==1:
                 ①        
    else:
        a=6*n-1
        b=8*n+3
        return          ②        
m=int(input("请输入一个整数:"))
if not isinstance(m,int):     #判断输入的m是否为整数
    print('请输入一个整数')
else:
    print(        ③        )

参考程序:

def fc(n):
    if n ==1:
        return 1 
    else:
        a=6*n-1
        b=8*n+3
        return  a*fc(n-1)/b
m=int(input("请输入一个整数:"))
if not isinstance(m,int):     #判断输入的m是否为整数
    print('请输入一个整数')
else:
    print(fc(m))

说明:本题中已知c的第n项计算公式,第1项时c的值为1,第2项可以由第1项的基础上用公式计算,程序中编写了函数fc实现计算c的结果,在函数fc中,第1项时返回1,故①处代码是return 1 ;函数fc中②处代码是计算第n的数据,由递推公式可知该处代码是a*fc(n-1)/b ,③处代码是将输入的第m项调用函数fc计算结果,故该处的代码是fc(m)。

评分标准:

(1)return 1;(3分)

(2)a*fc(n-1)/b;(3分)

(3)fc(m)。(2分)

37. 请补全下列代码,编程实现用递归的方法输出九九乘法表。

  

def get_result(num):
    if num == 1: 
        print("        ①        ") 
     else: 
        get_result(        ②        ) 
        for i in range(1,        ③        ): 
            print("%d * %d = %d" % (i, num, i * num), end="  ") 
        print()
get_result(        ④        )

参考程序:

def get_result(num): 
    if num == 1:
        print("1 * 1 = 1") 
    else:
        get_result(num - 1)
        for i in range(1,num + 1): 
            print("%d * %d = %d" % (i, num, i * num), end="  ")
        print()
get_result(9)

评分标准:

(1)1*1=1;(3分)

(2)num-1;(3分)

(3)num+1;(2分)

(4)9。(2分)

   

38. 有一只蜗牛在井底,井深n米。蜗牛每天往上爬a米,又会往回滑b米。

请从键盘接收输入整数n,a,b,用空格隔开。

并完成下列程序,计算蜗牛爬出这口井需要几天。

n,a,b=input("请输入井深,蜗牛每天往上爬几米,蜗牛滑下几米:").        ①        
n,a,b=        ②        
pos=0
i=0
while        ③        :
             ④        
             ⑤        
print("第%d天,蜗牛距离井口%d米;"%(i,n-pos))
print("第%d天,蜗牛成功离开了深井!!"%(        ⑥        ))

参考程序:

n,a,b=input("请输入井深,蜗牛每天往上爬几米,蜗牛滑下几米:").split()
n,a,b=int(n),int(a),int(b)
pos=0
i=0
while pos+a<n:
    i+=1
    pos+=(a-b)
print("第%d天,蜗牛距离井口%d米;"%(i,n-pos))
print("第%d天,蜗牛成功离开了深井!!"%(i+1))

评分标准:

(1)split();(2分)

(2)int(n),int(a),int(b);(2分)

(3)pos+a<n;(2分)

(4)i+=1;(2分)

(5)pos+=(a-b);(2分)

(6)i+1。(2分)

   

猜你喜欢

转载自blog.csdn.net/m0_46227121/article/details/131207814