2022年12月电子学会软件编程Python等级考试试卷(四级)
剩余时间 --:--:--
单选题 共 25 题
1.

一般来说,递归需要有边界条件、递归前进段和递归返回段。当不满足边界条件时,( );当满足边界条件时,( )。

2.

李宇同学利用Python语言编写了一段“根据出生年月判断生肖属相”的程序,调试运行时,程序没有报错且顺利运行,但未能正确输出对应属相,造成这个结果的原因可能是?( )

3.

下列问题使用分治算法思想的是?( )

4.

下列有关分治算法思想的描述不正确的是?( )

5.

n个按名称排序的商品,使用对分查找法搜索任何一商品,最多查找次数为5次,则n的值可能为?( )

6.

某自定义函数有两个参数,并且这两个参数都指定了默认值。我们在调用这个函数时,最少需要提供几个实参?( )

7.

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

8.

使用lambda定义匿名函数如下:f=lambda x:x+1,则f(f(1))代码运行结果是?( )

9.

不需要使用Python的pip工具安装的是?( )

10.

下载但不安装一个第三方库的命令格式是?( )

11.

阅读下列程序,运行结果正确的是?( )

def power(x,y):
    if y==0:
        return 1
    else:
        return x * power(x,y-1)
print(power(4,5))


12.

下列程序输出正确的是?( )

def ac(n):
    if n < 0:
        return
    else:
        ac(n-1)
        print(n)
ac(4)
13.

在有序列表[2,3,10,15,20,25,28,29,30,35,40]中,使用二分法查找20,需要查找多少次能找到?( )

14.

关于斐波那契数列,下列空白处的代码填写正确的是?( )

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)
15.

以下哪一项不是递归算法的特征?( )

16.

函数定义如下:
def func(a,b=0,c=0):
    pass
下列选项调用错误的是?( )

17.

下列选项中,不是函数的是?( )

18.

下列关于函数的说法正确的是?( )

19.

运行下列代码,输出结果为?( )

def func(a,b,*args):
    print(a)
    print(b)
    print(args)
func(1,2,3,4,5,6)


20.

下列选项中,函数定义错误的是?( )

21.

下列选项中不能作为自定义函数名的是?( )

22.

自定义函数的关键字是?( )

23.

下列关于函数调用的说法正确的是?( )

24.

Python中,函数通过可变参数*args传入的参数,在函数内以哪种数据类型存储?( )

25.

以下关于Python中使用函数的描述,错误的是?( )

判断题 共 10 题
1.

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

2.

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

3.

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

4.

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

5.

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

6.

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

7.

以下命令:

pip get pandas

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

8.

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

9.

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

10.

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

sum1=0
for i in range(101):    
sum1+=i
问答题 共 3 题
1.

有一个游戏:有两个人,第一个人先从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(           ③           ))
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)取这组数据中间那个数为锚定值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=" ")
C++ 编辑器
输入
输出