P4試卷-2312

分?jǐn)?shù):100 題數(shù):38
您的姓名:
一、單選題(共25題,共50分)
1. 下列有關(guān)分治算法思想的描述不正確的是?(?)
2. 斐波那契數(shù)列前n項(xiàng)是1,1,2,3,5,8,13......補(bǔ)全下面程序代碼,求第n項(xiàng)斐波那契數(shù)列的值。

def fib(n):

    if ______:

        return 1

    else:

        return fib(n-1) + fib(n-2)
3. 用分治法求兩個(gè)數(shù)的最大公約數(shù),代碼和運(yùn)行結(jié)果如下,請(qǐng)選擇合適的代碼完成程序?(?。?div>def fun(m, n):
    if m % n == 0:
        return n
    else:
        return __________
print(fun(98, 56))
程序運(yùn)行結(jié)果如下:
14
4. 列出第三方庫的詳細(xì)信息的pip指令是?(?。?/legend>
5. 想要在Python中導(dǎo)入math模塊中的sqrt(x)函數(shù),下列程序段錯(cuò)誤的是?(?。?/legend>
6. 關(guān)于求解“找出所有滿足各位數(shù)字之和等于8的三位數(shù)”時(shí),在下列數(shù)值范圍內(nèi),算法執(zhí)行效率最高的是?(?。?/legend>
7. 已知,從1到n的連續(xù)自然數(shù)相乘的積叫做階乘,用符號(hào)n!表示,比如3!=1×2×3,規(guī)定0!=1。那么用遞歸算法求n的階乘,遞歸式正確的是?(?。?/legend>
8. 當(dāng)n為6時(shí),運(yùn)行下列Python程序后的結(jié)果是?( )
def f(n):
     if n<=2:
          return 1
     else:
          return f(n-1)+f(n-2)
n=int(input("請(qǐng)輸入一個(gè)正整數(shù):"))
print(f(n))
9. 下列程序中,當(dāng)n=4時(shí),返回結(jié)果為?(?)
def x(n):
       if  n==1:
              return 1
       else:
              return n+x(n-1)
10. 下列選項(xiàng)中,不屬于遞歸特性的是?(?。?/legend>
11. 對(duì)于下列遞歸式子,當(dāng)n=4時(shí),F(xiàn)的值是?(?。?div>F(n)=F(n-1)*2
F(1)=2
12. 下面函數(shù)實(shí)現(xiàn)的功能是?( )
def   mi(x, n):
    if   n == 0:
          return  1
    else:
          return  x*mi(x, n-1)
13. 對(duì)以上代碼解釋錯(cuò)誤的是?( )
def afun(n):
    s=1
    for i in range(1,n+1):
        s*=i
    return s
14. 關(guān)于下列代碼解釋錯(cuò)誤的一項(xiàng)是?(?。?div>def ZhongYao(a:str,b:int)->str:
    word=a*b
    print('重要的事情說{}遍:{}'.format(b,word))
    return ZhongYao
ZhongYao('學(xué)習(xí)','3')
15. 下列代碼的運(yùn)行結(jié)果是?(?)
def exchange(a,b):
    a,b=b,a
    print(a,b)
a,b=3,5
exchange(a,b)
print(a,b)
16. 下列代碼的運(yùn)行結(jié)果是?(?)
def car_show(cars):
    for car in cars:
        print('good',car)
car_show(['BYD','Haval','Wuling'])
17. 函數(shù)中定義了4個(gè)參數(shù),其中2個(gè)參數(shù)都指定了默認(rèn)值,見下面代碼,那么在調(diào)用函數(shù)時(shí)參數(shù)個(gè)數(shù)最少是?(?。?div>def SiBianXing(a,b,c=5,d=8):
    ZhouChang=a+b+c+d
    return ZhouChang
SiBianXing( ? )
18. 執(zhí)行如下程序,以下選項(xiàng)中哪一項(xiàng)是錯(cuò)誤的?(?)

def f(a,b): 

    c=a+b*2

    b=a

    return c 

a=1 

b=2

c=f(a,b)+b
19. 以下哪種情況下的代碼塊適合設(shè)計(jì)成函數(shù)?(?。?div>
20. 使用位置實(shí)參的方式調(diào)用函數(shù)時(shí),下列哪種情況下程序一定會(huì)出錯(cuò)?( )
21. 下列函數(shù)定義中,正確的是?(?。?/legend>
22. 調(diào)用函數(shù)的時(shí)候,所使用的參數(shù)是?(?。?/legend>
23. 對(duì)于如下自定義的函數(shù):

def myfunc(a,b,c):

     return a+b+c 

24. 使用*args和**kwargs形參來定義函數(shù)時(shí),正確的說法是?(?。?/legend>
25. 關(guān)于函數(shù)參數(shù)的默認(rèn)值設(shè)置,描述不正確的是?(?。?/legend>
二、判斷題(共10題,共20分)
26. 分治算法是把一個(gè)大問題分解為若干個(gè)規(guī)模較小、性質(zhì)相同的子問題。最后子問題可以簡(jiǎn)單地直接求解,將所有子問題的解合并起來就是原問題的解。(?。?/legend>
27. pip聯(lián)網(wǎng)直接下載安裝第三方庫時(shí),只能臨時(shí)更換下載源,不能更改默認(rèn)的下載源。(?。?/legend>
28. 運(yùn)行以下代碼的時(shí)間復(fù)雜度為O(n2)。(?)

k=0

n=11

for i in range(n):

    k=k+1
for j in range(n):
    k=k+2
print(k)

29. 對(duì)于遞歸而言,遞推與回歸,二者缺一不可。(?。?/legend>
30. 遞歸算法必須確保,需要解決的問題可以轉(zhuǎn)化為一個(gè)或多個(gè)子問題來求解,這些子問題的求解方法與原問題相同,只是在數(shù)量和規(guī)模上不同,而且每次遞歸調(diào)用時(shí),問題規(guī)模都能夠縮小。( )
31. 當(dāng)函數(shù)運(yùn)行結(jié)束后,局部變量的值依然存在,下次函數(shù)調(diào)用可以繼續(xù)使用。( )
32. 內(nèi)置函數(shù)不需要使用關(guān)鍵字import導(dǎo)入就可以使用,自定義函數(shù)可以先調(diào)用后定義。(?。?/legend>
33. 編程時(shí),需要把實(shí)現(xiàn)復(fù)雜功能的代碼封裝起來,設(shè)計(jì)成函數(shù)。(?。?/legend>
34. 將實(shí)現(xiàn)特定功能的代碼塊設(shè)計(jì)成函數(shù),有助于提高整個(gè)程序的運(yùn)行速度。(?。?/legend>
35. 如果允許形參設(shè)置默認(rèn)值,則函數(shù)定義時(shí)要先列出沒有默認(rèn)值的形參,再列出有默認(rèn)值的形參。( )
三、編程題(共3題,共30分)

36. 統(tǒng)計(jì)高分問題

小張?jiān)趯W(xué)習(xí)對(duì)分查找后,想利用該思路來實(shí)踐一下,加深對(duì)該算法的理解。于是他按老師的要求,統(tǒng)計(jì)期末考試成績(jī),總分比他高的同學(xué)有多少個(gè)?

他的思路是,首先將全區(qū)所有學(xué)生的成績(jī)降序排序,然后利用對(duì)分查找思想解決。他編寫的代碼如下,請(qǐng)完善劃線處的代碼。

cj =[654,643,621,612,609,606,...]#學(xué)生成績(jī)存列表cj并已經(jīng)降序排序

def dfsearch(key):
       i =0; j=len(cj)-1
      while i<=j:
             m =(i+j)//2
             if cj[m]>key:
                                
              else:
                    j-= 1
      return                   
key = int(input('輸入待查找的成績(jī)'))
pos =                
print('高于',key,'分的人數(shù)有',pos)

37. 比歲數(shù)問題

有5個(gè)人坐在一起,問第五個(gè)人多少歲?他說比第4個(gè)人大2歲。問第4個(gè)人歲數(shù),他說比第3個(gè)人大2歲。問第三個(gè)人,又說比第2人大兩歲。問第2個(gè)人,說比第一個(gè)人大兩歲。

最后問第一個(gè)人,他說是10歲。請(qǐng)問第五個(gè)人多大?請(qǐng)運(yùn)用遞歸算法完成以下代碼。
def age(n):
    if                 :
        c = 10
    else:
        c =                
    return c
print(age(                ))

38. 數(shù)學(xué)證明問題

上世紀(jì)中期,校園里流行一種數(shù)學(xué)游戲,其規(guī)則十分簡(jiǎn)單:任意取一個(gè)自然數(shù),若它是奇數(shù),則把它乘以3加上1,若它是偶數(shù),則除以2。按此規(guī)則進(jìn)行下去,經(jīng)過若干步的計(jì)算就能得到自然數(shù)1。這個(gè)數(shù)學(xué)現(xiàn)象至今都沒有得到完全的證明,但是可以編程來驗(yàn)證它的正確性。

實(shí)現(xiàn)上述功能的部分程序代碼如下,請(qǐng)補(bǔ)充完成空白處的內(nèi)容。

step = 1

midlist = []

def subwork(n):

    global step

    if n == 1:

        return step

    elif n % 2 == 0:                                                                                               

        n =                   

        midlist. append(n)    

        step +=  1

        subwork(                

        return step

    elif n % 2 != 0:

        n =                       

        midlist.                 

        step +=  1

        subwork(                )  

        return step

cur_num = int(input("請(qǐng)輸入一個(gè)數(shù)字:"))

subwork(cur_num)

print(midlist)

print(step)
更多問卷 復(fù)制此問卷