P4試卷-2312
分?jǐn)?shù):100 題數(shù):38
您的姓名:
一、單選題(共25題,共50分) 1. 下列有關(guān)分治算法思想的描述不正確的是?(?) A. 將問題分解成的子問題具有相同的模式。 B. 將問題分解出的各個(gè)子問題相互之間有公共子問題。 C. 當(dāng)問題足夠小時(shí),可以直接求解。 D. 可以將子問題的求解結(jié)果合并成原問題的解。
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)
A. n == 2 B. n < 2 C. n == 3 D. n < 3
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 A. fun(n, m-n) B. fun(n, m%n) C. fun(m, m-n) D. fun(m, m%n)
4. 列出第三方庫的詳細(xì)信息的pip指令是?(?。?/legend>A. pip install <第三方庫名> B. pip download<第三方庫名> C. pip show<第三方庫名> D. pip list<第三方庫名>
5. 想要在Python中導(dǎo)入math模塊中的sqrt(x)函數(shù),下列程序段錯(cuò)誤的是?(?。?/legend>A. import math math.sqrt(x) B. from math import sqrt as t t(x) C. import math as m m.sqrt(x) D. import math sqrt(x)
6. 關(guān)于求解“找出所有滿足各位數(shù)字之和等于8的三位數(shù)”時(shí),在下列數(shù)值范圍內(nèi),算法執(zhí)行效率最高的是?(?。?/legend>A. 0—999 B. 0—1000 C. 100—800 D. 107—800
7. 已知,從1到n的連續(xù)自然數(shù)相乘的積叫做階乘,用符號(hào)n!表示,比如3!=1×2×3,規(guī)定0!=1。那么用遞歸算法求n的階乘,遞歸式正確的是?(?。?/legend>A. f(0)=1,n=n*(n-1) B. f(0)=1,f(n)=f(0)*f(n-1) C. f(0)=1,f(n)=f(n)*f(n-1) D. f(0)=1,f(n)=n*f(n-1)
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))
A. 5 B. 8 C. 11 D. 13
9. 下列程序中,當(dāng)n=4時(shí),返回結(jié)果為?(?)def x(n): if n==1: return 1 else: return n+x(n-1)
A. 12 B. 11 C. 10 D. 9
10. 下列選項(xiàng)中,不屬于遞歸特性的是?(?。?/legend>A. 遞歸函數(shù)一定包含條件控制語句 B. 遞歸算法體現(xiàn)了大事化小的思想 C. 遞歸效率不高,遞歸層次過多會(huì)導(dǎo)致棧溢出 D. 遞歸算法代碼簡(jiǎn)潔,效率較高
11. 對(duì)于下列遞歸式子,當(dāng)n=4時(shí),F(xiàn)的值是?(?。?div>F(n)=F(n-1)*2 F(1)=2 A. 2 B. 8 C. 16 D. 32
12. 下面函數(shù)實(shí)現(xiàn)的功能是?( )def mi(x, n): if n == 0: return 1 else: return x*mi(x, n-1)
A. 計(jì)算x的n次方 B. 計(jì)算n的x次方 C. 計(jì)算x!*n D. 計(jì)算x*n!
13. 對(duì)以上代碼解釋錯(cuò)誤的是?( )def afun(n): s=1 for i in range(1,n+1): s*=i return s
A. 程序正常運(yùn)行時(shí),afun(n)函數(shù)的作用是求n的階乘 B. 程序正常運(yùn)行時(shí),afun(n)函數(shù)的作用是求n+1的階乘 C. s是局部變量 D. range()函數(shù)是Python內(nèi)置函數(shù)
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') A. 參數(shù)a的數(shù)據(jù)類型必須是字符串 B. 參數(shù)b的數(shù)據(jù)類型必須是整型 C. 函數(shù)指定了返回值的數(shù)據(jù)類型是字符串 D. 程序正常運(yùn)行,輸出結(jié)果是:重要的事情說3遍:學(xué)習(xí)學(xué)習(xí)學(xué)習(xí)
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)
A. 5 3 5 3 B. 3 5 3 5 C. 5 3 3 5 D. 5 3 3 5
16. 下列代碼的運(yùn)行結(jié)果是?(?)def car_show(cars): for car in cars: print('good',car) car_show(['BYD','Haval','Wuling'])
A. good ['BYD','Haval','Wuling'] B. 'good','BYD' 'good','Haval' 'good','Wuling' C. good BYD Haval Wuling D. good BYD good Haval good 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( ? ) A. 0 B. 2 C. 1 D. 3
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
A. 該函數(shù)名稱為f B. 執(zhí)行該程序后,變量a的值為1 C. 執(zhí)行該程序后,變量b的值為2 D. 執(zhí)行該程序后,變量c的值為6
19. 以下哪種情況下的代碼塊適合設(shè)計(jì)成函數(shù)?(?。?div> A. 復(fù)雜的功能塊 B. 難以看懂的功能塊 C. 有性能要求的功能塊 D. 會(huì)多次用到的功能塊
20. 使用位置實(shí)參的方式調(diào)用函數(shù)時(shí),下列哪種情況下程序一定會(huì)出錯(cuò)?( ) A. 傳入的實(shí)參個(gè)數(shù)比形參個(gè)數(shù)多 B. 部分形參賦以默認(rèn)值 C. 函數(shù)調(diào)用時(shí),重新給賦予了默認(rèn)值的形參傳入新值 D. 部分實(shí)參以關(guān)鍵字賦值的方式去調(diào)用函數(shù)
21. 下列函數(shù)定義中,正確的是?(?。?/legend>A. def myfunc(a,b,c) print(myfunc(a,b)) B. def myfunc(a=1,b,c): print(myfunc(a,b,c)) C. def myfunc(a,b=1,c): print(myfunc(a,b,c)) D. def myfunc(a,b,c=1): print(myfunc(a,b,c))
22. 調(diào)用函數(shù)的時(shí)候,所使用的參數(shù)是?(?。?/legend>A. 實(shí)參 B. 位置參數(shù) C. 關(guān)鍵字參數(shù) D. 不定長參數(shù)
23. 對(duì)于如下自定義的函數(shù):def myfunc(a,b,c):
return a+b+c
A. myfunc(1,2) B. myfunc(a=3,2,1) C. myfunc(3,b=2,1) D. myfunc(3,2,c=1)
24. 使用*args和**kwargs形參來定義函數(shù)時(shí),正確的說法是?(?。?/legend>A. 使用*args代表列表,使用**kwargs代表元組 B. 可以在調(diào)用函數(shù)時(shí)傳入多個(gè)實(shí)參 C. 使用*args代表元組,使用**kwargs代表列表 D. 使用*args代表字典,使用**kwargs代表列表
25. 關(guān)于函數(shù)參數(shù)的默認(rèn)值設(shè)置,描述不正確的是?(?。?/legend>A. 定義函數(shù)時(shí),可以為某形參設(shè)定默認(rèn)值 B. 如果為某形參設(shè)定了默認(rèn)值,則在調(diào)用函數(shù)時(shí)就不能再為該形參傳入新值 C. 如果為某形參設(shè)定了默認(rèn)值,在調(diào)用函數(shù)時(shí)還可以為該形參再傳入新值 D. 關(guān)鍵字形參就是一種為參數(shù)設(shè)置默認(rèn)值的方式
二、判斷題(共10題,共20分) 26. 分治算法是把一個(gè)大問題分解為若干個(gè)規(guī)模較小、性質(zhì)相同的子問題。最后子問題可以簡(jiǎn)單地直接求解,將所有子問題的解合并起來就是原問題的解。(?。?/legend>正確 錯(cuò)誤
27. pip聯(lián)網(wǎng)直接下載安裝第三方庫時(shí),只能臨時(shí)更換下載源,不能更改默認(rèn)的下載源。(?。?/legend>正確 錯(cuò)誤
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)
正確 錯(cuò)誤
29. 對(duì)于遞歸而言,遞推與回歸,二者缺一不可。(?。?/legend>正確 錯(cuò)誤
30. 遞歸算法必須確保,需要解決的問題可以轉(zhuǎn)化為一個(gè)或多個(gè)子問題來求解,這些子問題的求解方法與原問題相同,只是在數(shù)量和規(guī)模上不同,而且每次遞歸調(diào)用時(shí),問題規(guī)模都能夠縮小。( ) 正確 錯(cuò)誤
31. 當(dāng)函數(shù)運(yùn)行結(jié)束后,局部變量的值依然存在,下次函數(shù)調(diào)用可以繼續(xù)使用。( ) 正確 錯(cuò)誤
32. 內(nèi)置函數(shù)不需要使用關(guān)鍵字import導(dǎo)入就可以使用,自定義函數(shù)可以先調(diào)用后定義。(?。?/legend>正確 錯(cuò)誤
33. 編程時(shí),需要把實(shí)現(xiàn)復(fù)雜功能的代碼封裝起來,設(shè)計(jì)成函數(shù)。(?。?/legend>正確 錯(cuò)誤
34. 將實(shí)現(xiàn)特定功能的代碼塊設(shè)計(jì)成函數(shù),有助于提高整個(gè)程序的運(yùn)行速度。(?。?/legend>正確 錯(cuò)誤
35. 如果允許形參設(shè)置默認(rèn)值,則函數(shù)定義時(shí)要先列出沒有默認(rèn)值的形參,再列出有默認(rèn)值的形參。( ) 正確 錯(cuò)誤
三、編程題(共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)