資源簡介 2023屆高三信息技術一輪復習《選修一》專題測試全卷共 8頁,滿分 50分,考試時間 45分鐘。一、選擇題(均為單選,每題 2分,共 24分)1.有一組含有 9個元素的有序鏈表:1->3->5->6->8->11->15->18->20,現為該鏈表增設關鍵節點,建立索引,下列說法不正確的是A.一級索引中的關鍵節點為 1,5,8,15,20B.二級索引中的關鍵節點為 1,8,20C.若要在建立的一級索引的基礎上插入元素 7,則需比較 3次即可找到 7插入的位置D.若要在建立的二級索引的基礎上查找元素 18,則需比較 4次即可找到元素 182.關于棧,下列說法錯誤的是A.棧是先進后出表。它的數據元素只能在同一端(稱為棧頂)進行操作,添加(進棧),刪除(出棧)B.pop(0)方法可以刪除列表的尾元素(相當于棧的“出棧”操作)C.pop()方法可以刪除列表的尾元素(相當于棧的“出棧”操作)D.append方法可以在列表尾部添加一個數據元素(相當于棧的“入棧”操作)3.樹結構是一種具有層次關系的非線性結構。樹是由 n(n≥0)個節點組成的有限集合,如圖所示,下列說法錯誤的是A.任何一個非空樹均僅有一個稱為根的節點,如圖中 A,n=0時為空樹B.當 n>0時,其余節點可分為 m (m≥0)個互不相交的有限集合,其中每個集合又是一棵樹,并稱為根的子樹C.節點 A為根節點,B、C、D為 A的子樹的根節點,同理,E、F、G是 B的子樹的根節點,B是 E、F、G的父節點D.在樹結構中,數據元素之間是一對一的關系4.一棵二叉樹的前序遍歷結果為 JFDECBHAIG,中序遍歷結果為 DFEJAHBICG,則該二叉樹的深度為A.6 B.5C.4 D.35.分別用選擇和冒泡排序算法對數據序列“2,3,4,5,1,0”作升序排序,則需要交換的次數分別為A.5次和 9次 B.4次和 12次C.5次和 15次 D.4次和 18次信息技術 第 1頁(共 8頁)6.以下程序代碼采用的算法是def gcd(m,n):while m%n != 0:m,n=n,m%nreturn na=int(input("請輸入 a的值:"))b=int(input("請輸入 b的值:"))print(gcd(a,b))A.枚舉法 B.二分法 C.遞歸法 D.迭代法7.老師編寫了一個函數,它的功能為使用遞歸的方法快速計算 Xn,劃線處代碼為def fun(x,n):if n==1:return xt=fun( )if n%2==1:return x*t*telse:return t*tA.n//2,x B.n/2,x C.x,n//2 D.x,n/28.有如下程序段:a=[92,22,11,98,96,71]n=len(a)for i in range(n):for j in range( ):if a[j]>a[j+1]:a[j],a[j+1]=a[j+1],a[j]print(a)為實現 n個數的升序排序,則劃線處應填A.range(i-1) B.range(n-2,i-1,-1)C.range(i,n) D.range(n-1,n-i-2,-1)9.有如下程序段:a=[[2,2,1],[8,0,4],[3,3,0],[6,-1,2],[8,1,-1]]ans=head=3p=a[head][2]while p!=-1:if a[ans][0] < a[p][0] :ans=pp=a[p][2]print(ans,a[ans][0],sep=",")則程序運行后,下列說法正確的是A.鏈表數據值依次為 2->8->3->6->8B.程序輸出結果為 4,8C.a[0][2]的值為 1,雙向鏈表 a的頭節點數據值為 2D.a[1][1]的值為 0,雙向鏈表 a的尾節點數據值為 8信息技術 第 2頁(共 8頁)10.有某算法的程序段如下:i = 0; j = 6; s = “”key = int( random( ) * 100 )while i <= j:m = ( i + j ) // 2if key == p[ m ]:s +=” M ”breakelif key < p[ m ]:j = m - 1s += “ L ”else:i = m+1s += ” R ”print( s )列表 p中的元素依次為“24, 35, 38, 41, 45, 69, 78”。執行該程序段后顯示的內容可能為A.RL B.LMRC.RLR D.LRLM11.有如下程序:wz=[0,1,2,3,4,5,6]start=0qu=[0]*len(wz)wm="abcdefg"h=0;t=0while len(wz)>0:for i in range(2):start=(start+1)%len(wz)qu[t]=wz[start]t=t+1wz.pop(start)mm=""while hmm=mm+wm[qu[h]]h=h+1print(mm)程序運行后,顯示的結果為( )A.bdfaecg B.bdfacegC.cfbgead D.cfbeadg12.單車道胡同路邊停車,先進去的車只能從另一出口出來,閱讀程序代碼:listque=[] #定義列表 listque存儲停車狀況max=8 #停車位最大容量while(True):print('\n1.停車') #\n表示換行打印信息技術 第 3頁(共 8頁)print('2. 開車離開')print('3. 查看停車庫')print('其他. 退出')x=input("輸入你的選擇:") #輸入選擇項if x=='1':if len(listque)print("還有"+str(max-len(listque))+"個停車位。")listque.append(input("請輸入停車車牌:"))else:print("對不起,停車位已滿。")elif x=='2':if len(listque)==0:print("停車庫為空。")else:print(listque.pop(0)+"開出。")elif x=='3':print(listque)else:break下列說法錯誤的是A.listque.append( )語句的作用是輸入停車車牌B.listque.pop(0)表示開車離開,刪除停車車牌C.此程序的數據結構方式是先進后出的棧D.while(True)語句表示永遠執行循環二、非選擇題(共 26分)13.(6分)某招聘考試的筆試成績達到面試資格線可以入圍參加面試。入圍面試的資格線根據計劃錄取人數的 1:3劃定,即如果考試計劃錄取 m 人,則排名第 3*m 名選手的筆試分數為面試資格分數線,該分若有同分者可一同參加面試。考生考號和筆試成績存儲在“筆試成績.csv”文檔。編寫一個 Python 程序,實現上述功能。程序運行時,將所有考生考號和筆試成績的數據信息存儲列表 a中,結構如圖 1 所示,共 n名考生。輸入計劃錄取人數m(3*m圖 1 圖 2信息技術 第 4頁(共 8頁)(1)實現上述功能的 Python 程序如下,請在劃線處填入合適代碼。# 從 csv文檔讀取學生數據存儲到列表 a中,代碼略n = len(a) - 1 #n表示考生總數m = int(input("請輸入計劃錄取人數:"))mm = m * 3_______while i < n:for j in range(n, i, -1):if _______:a[j], a[j - 1] = a[j - 1], a[j]if :breaki += 1zs = i – 1 #最終人數print("進入面試考生")for i in range(0, __________):print(a[i])print("最終人數:", zs)print("分數線:", a[zs][1])(2)程序加框處的代碼有誤,請改正______。14.(6分)有個火車站的鐵軌調度方法如下:火車從一方 1,2,3,4…依次進入,由于每個火車皮要去的目標車站不一樣,想讓車皮到站后能以最少的時間從火車上脫離,就讓最近到的車皮放在整列火車的最后。因此需要轉換站來達成這樣的目標,轉換站只能在同一個地方進與出。例如有四個車皮 1,2,3,4進入,2,4,3,1到站,即 2號車皮目的地最遠,4號車皮倒數第二遠,3號車皮倒數第三遠,1號車皮最近。為了能快速指揮車輛進出站轉換,小王編寫例如下程序:a=[1,2,3,4,5,6] #待車皮進站b=[3,2,1,6,5,4] #出站順序stack=[0]*len(a); top=0stack[top]=a[0]s=str(a[0])+"進"ha=1;hb=0while :while top>-1 and _______ :s=s+str(stack[top])+"出"top-=1____if hatop+=1stack[top]=a[ha]s=s+str(a[ha])+"進"ha+=1信息技術 第 5頁(共 8頁)elif ha==len(a) and top>-1 and _______ :print("無法調度")breakif top==-1:print(s)代碼顯示結果:1進 2進 3進 3出 2出 1出 4進 5進 6進 6出 5出 4出(1)修改加框處代碼________(2)將劃線處代碼補充完整,使功能完善。15.(7分)乒乓球比賽規則原先采用 21分制,后來改成 11分制。改制后發現一些慢熱型選手不適應 11分制,只能選擇退役。小明編寫了如下程序。對于同樣的比賽記錄(由字母 w與 f組成,其中 w 表示小明獲得一分,f 表示對手獲得一分),發現 11分制對于慢熱型選手不利。例如有如下比分記錄:"fffffffffffffwwwffffffffwwwfwfwfwffwwwfffwwffwwffffwwwwffwwwwffwwwfffwwwwwffwwwwffww"。采用 11分制,各局比分為: 0:11,6:11,10:12,11:5,11:7。采用 21分制,各局比分為: 3:21,21:16,14:9。(1)如果記錄是 wwwffffffffffwfwwfwwfwfwfffffffwwwwwfffwf,請問 11 分制比賽的第二局小明與對手的比分是 _______________(注:當任一方得分大于等于 11 分,且領先對方 2分及以上,領先一方贏一局)。(2)在程序劃線處填入合適代碼。def check(a,b,fz):flag=Falseif _____________:flag=Truereturn flags=input("輸入比賽記錄:")a=[0]*1000b=[0]*100c=[0]*100j=0;k=0;x=-1f1=0;f2=0;h1=0;h2=0for i in range(len(s)):if s[i]=="w":a[i]=1n=len(s)for i in range(n):if a[i]==1:f1=f1+1else:f2=f2+1h1=h1+a[i]________________if check(f1,f2,11):b[j]=f1;b[j+1]=f2j=j+2f1=0;f2=0信息技術 第 6頁(共 8頁)if check(h1,h2,21):c[k]=h1;c[k+1]=h2k=k+2________x=i#輸出二種分制下各局比分,代碼略16.(7分)某會務組根據參會者提交的入住賓館和到達指定上車點時間的信息,安排車輛接送 參會者去賓館。不同賓館的參會者分開接送,同一賓館的參會者可同乘一輛車,每輛車最多接送 v人,每個參會者的等待時間都不超過 w分鐘。參會者入住的賓館和到達上車點的時間用長度為 7的字符串表示,例如“A-09:15”表示參會者當天入住 A 賓館,9點 15分到達上車點,如果 w為 10,那么該參會者最晚 9點 25分出發去賓館。編寫 Python 程序,統計接送 n個參會者所需的最少車輛數。運行程序,屏幕上按入住賓館分組輸出所有參會者提交的信息,同一賓館的按時間先后排列。最后在屏幕末行顯示所需的最少車輛數。(1)如圖所示為存儲時間信息的文本文件,如果每輛車最多接送 4 人,每個參會者的等待時間不超過 10 分鐘,接送所有到 A 賓館的參會者最少需要____________輛車;a=[0]n,v,w=0,5,10for line in open("time.txt","r"):a.append(line)n+=1a[0]=nfor i in range(n+1):print(a[i])print("讀取文件結束,共",n,"條數據")def getDif(ts1,ts2): # 返回 ts1到 ts2的時長(單位:分)t=(int(ts2[:2])-int(ts1[:2])-1)*60+(60-int(ts1[-2:])+int(ts2[-2:]))return tdef getCnt(first,last): # 返回從 first 到 last 所需車輛數量p,k=first,1s1=a[first][2:]信息技術 第 7頁(共 8頁)for i in range(first+1,last+1):s2=a[i][2:]t=getDif(s1,s2)if _______ :k+=1p=i_____return kj,sum=1,0a.append("\n") # 虛設一條空記錄,使首字母不同for i in range(1,n+2):if a[i][0]!=a[j][0]:______j=iprint("\n需要的車輛數量為",sum)(2)為實現以上功能,在劃線處填上合適代碼。信息技術 第 8頁(共 8頁)2023屆高三信息技術一輪復習《選修一》專題測試答案(選擇題速查 CBDBA DCBDC CC)1.C【詳解】本題主要考查鏈表數據結構。有序鏈表:1->3->5->6->8->11->15->18->20,則一級索引中的關鍵節點為 1,5,8,15,20(取奇數位);二級索引中的關鍵節點為 1,8,20(取首尾以及中間元素);若要在建立的一級索引的基礎上插入元素 7,則需要比較 4次即可找到 7插入的位置,首先分別與 1、5、8比較,其次與 6比較共 4次;若要在建立的二級索引的基礎上查找元素 18,則需要比較 4次就可以找到元素 18,分別與 8、20比較,再與 19、18比較,共 4次,故本題選 C選項。2.B【詳解】本題主要考查棧數據結構。棧是先進后出(FILO)表。它的數據元素只能在同一端(稱為棧頂)進行操作,添加(進棧),刪除(出棧);pop()方法可以刪除列表的尾元素(相當于棧的“出棧”操作);append方法可以在列表尾部添加一個數據元素(相當于棧的“入棧”操作),故本題選 B選項。3.D【詳解】本題主要考查數據結構。任何一個非空樹均僅有一個稱為根的節點,如圖中 A,n=0時為空樹;當 n>0時,其余節點可分為 m ( m≥0)個互不相交的有限集合,其中每個集合又是一棵樹,并稱為根的子樹;節點 A為根節點,B、C、D為 A的子樹的根節點,同理,E、F、G是B的子樹的根節點,B是 E、F、G的父節點;在樹結構中,數據元素之間是一對多的關系,故本題選 D選項。4.B【詳解】本題主要考查二叉樹的遍歷。前序遍歷是“根左右”,中序遍歷是“左根右”,一棵二叉樹的前序遍歷結果為 JFDECBHAIG,中序遍歷結果為 DFEJAHBICG,則該二叉樹如下:由圖可知,該二叉樹的深度為 5,故本題選 B選項。5.A【詳解】本題主要考查冒泡和選擇排序算法。冒泡排序(Bubble Sort)將一個列表中的兩個元素進行比較,并將最小的元素交換到頂部。兩個元素中較小的會冒到頂部,而較大的會沉到底部,該過程將被重復執行,直到所有元素都被排序。選擇排序(Select Sort) 是直觀的排序,通過確定一個 Key 最大或最小值,再從待排序的的數中找出最大或最小的交換到對應位置,再選擇次之。選擇排序需要交換 5次,第一次是 5和 0交換,變為 2、3、4、0、1、5;第二次是 4和 1交換,變為 2、3、1、0、4、5;第三次是 3和 0交換,變為 2、0、1、3、4、5;第四次是 2和 1交換,變為 1、0、2、3、4、5;第五次是 1和 0交換,變為 0、1、2、3、4、5。冒泡排序需要 9次交換,第一次是 5分別和 1、0交換,共 2次,變為 2、3、4、9/41、0、5;第二、三、四次是 2、3、4分別和 1、0交換,共 6次,變為 1、0、2、3、4、5;第五次是 1和 0交換,變為 0、1、2、3、4、5,一共 2+6+1=9次,故本題選 A選項。6.D本題主要考查迭代算法。迭代法是用計算機解決問題的一種基本方法,它讓計算機對一組指令或一定步驟進行重復執行,在每次執行這組指令或這些步驟是都從變量的原值推出他的一個新值,用迭代法解決問題,要考慮迭代的初值、迭代的過程、迭代的結束或迭代的次數。簡單地說就是運算過程中的變量的不斷交替,分析程序可知,輾轉相除法求最大公約數采用的算法是迭代法,故本題選 D選項。7.C【詳解】本題主要考查遞歸算法及 Python程序實現。由下文 if條件分支代碼可知,此處先遞歸計算 x^n/2,即 t=fun(x,n//2),如果 n是偶數,則返回 x*t*t,如果 n是奇數,則直接返回 t*t,故本題選 C選項。8.B【詳解】本題主要考查冒泡排序算法。分析程序,外層循環變量 i的范圍是 0~n-1,該程序實現升序排序,比較的是索引 j與 j+1,內層循環可以從左往右比較每次將一個最大值放到最右邊,代碼為 range(n-i-1);也可以從右往左比較交換,每次將一個最小值放到最左邊從而實現升序排序,代碼為 range(n-2,i-1,-1),故本題選 B選項。9.D【詳解】本題主要考查鏈表及 Python程序。分析程序可知,a是雙向鏈表,ans=head=3,故鏈表數據值依次為 6->3->2->8->8;程序運行結束后,ans=1,a[ans][0]=8;a[0][2]的值為1,head=3,雙向鏈表 a的頭節點數據值為 6;a[1][1]的值為 0,雙向鏈表 a的尾節點數據值為 8,故本題選 D選項。10.C【詳解】本題主要考查二分查找及 Python程序實現。分析程序可知,當不滿足 key==p[m]時,循環執行次數大于 2,故選項 A不可能,同理當滿足 if判斷條件,執行 s +="M"后退出循環,故選項 B也不可能。驗證選項 C,當 45// 2=5,p[5]=69,j=m-1=4,s=s+"L"="RL",m= (4+4) // 2=4,a(4)=45,i=m+1=5,s=s+"R"="RLR",退出循環條件,故選項 C可能。同理選項 D不可能,故本題選 C選項。11.C【詳解】本題主要考查 Python程序的執行。第一次循環后 start=2,qu[0]=wz[start]=2;第二至第七次循環后,qu[1]=5,qu[2]=1,qu[3]=6,qu[4]=4,qu[5]=0,qu[6]=3。h初值為 0,執行完最后一個 while循環,即根據列表 qu的值從 wm中取對應的元素拼接到 mm中,mm=mm+wm[qu[h]],程序運行后,顯示的結果為 mm="cfbgead",故本題選 C選項。12.C【詳解】本題主要考查隊列數據結構及 Python程序實現。分析程序可知,listque.append( )語句的作用是輸入停車車牌;listque.pop(0)表示開車離開,刪除停車車牌;此程序的數據結構方式是先進先出的隊列;while(True)語句表示永遠執行循環,故本題選 C選項。13. i = 1 a[j][1] > a[j-1][1] zs + 1i > mm and a[i][1] != a[i-1][1] 或 i > mm and a[i][1] < a[i-1][1]【詳解】(分值 1+1+2+2)本題主要考查 Python程序的綜合應用。①使用嵌套循環進行排序,變量 i每次遞增 1,可知變量 i的初值為 1,故填 i = 1。②進行降序排序,此處比較索引為 j與 j-1的成績,當a[j][1] > a[j-1][1]時,交換以完成降序,故填 a[j][1] > a[j-1][1]。③此處通過循環輸出最終的進面人信息,總人數為 zs。range(start, stop, [step]),start: 計數10/4從 start 開始。默認是從 0 開始。例如 range(5)等價于 range(0, 5);stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有 5;step:步長,默認為 1。例如:range(0, 5) 等價于 range(0, 5, 1)。故此處填 zs +1。④該分若有同分者可一同參加面試,故加框處還要判斷最后一名是否有同分,故應改為 i >mm and a[i][1] != a[i-1][1] 或 i > mm and a[i][1] < a[i-1][1]。14. top>-1 and hb<=len(b)stack[top]==b[hb] hb+=1 stack[top]!=b[hb]【詳解】(分值 2+1+1+2)本題主要考查 Python程序及棧數據結構。①由最后一個 elif判斷條件“ha==len(a)”以及最后一個 if分支結構(當 top=-1時輸出 s),可知加框處應改為 top>-1 and hb<=len(b)。②此處是通過 while循環輸出所有符合條件的棧元素,條件是棧頂元素等于列表 b中索引為hb的值,故此處填 stack[top]==b[hb]。③當棧頂元素出棧后,則需要更新 top=top-1,hb=hb+1,繼續判斷下一個棧元素是否需要出棧,故此處填 hb+=1。④如果 ha==len(a) andtop>-1說明 a中所有元素均已入棧且此時棧中還有元素,由代碼“print("無法調度")”可知此時棧頂元素與 b(hb)不相等,無法調度,故此處填 stack[top]!=b[hb]。15. 11:13 (a>=fz or b>=fz) and abs(a-b)>=2 h2=i-x-h1 h1=0【詳解】(分值 1+2+2+2)本題主要考查 Python程序的綜合應用。①如果記錄是wwwffffffffffwfwwfwwfwfwfffffffwwwwwfffwf,11 分制比賽的第一局小明與對手的比分是 4:11,第二局小明與對手的比分是 11:13。②當任一方得分大于等于對應的分制,且領先對方 2分及以上,領先一方贏一局,abs是求絕對值函數,故此處 if判斷條件是(a>=fzor b>=fz) and abs(a-b)>=2。③變量 h1記錄小明的得分,h2記錄對手的得分,因為當小明得分為 1時則對手得分為 0,否則反之,x記錄上一輪勝負局的終點,i是本輪當前位置,故 h2=i-x-h1。④如果 check(h1,h2,21)為真,表示本輪已分出勝負,則更新 h1為 0繼續下一輪計算判斷,故填 h1=0。16. 3 i- p+1>v or t>w或 i- p=v or t>w s1=s2或 s1 =a[i][2:]sum= sum+getCnt(j, i-1)【詳解】(分值 1+2+2+2)本題主要考查 Python程序的綜合應用。①去 A賓館的第 1個參會者到達指定上車地點的時間是 08: 03,第 2個參會者達到設計為 08: 38,兩者時間超出 10分鐘,故第 1個人單獨乘坐一輛車,第 3, 4, 5個參會者到達時間和第 2個參會者到達時間之差小于 10,故第 2-5人合乘一輛車,第 6個人單獨乘一輛車,故最少需 3輛車。②p指向去某賓館的第一個參會者,提取該參會者到達指定上車地點的時間存 s1,從下一個參會者開始逐個往后遍歷,提取當前參會者到達指定上車地點的時間存 s2,調用自定義函數 getDif (s1.s2)就算這兩人達到上車的時間差為 t,若大于 w,即去該賓館的第一個上車人的等待時間大于 w,則需開新的一輛車子,或該車已滿,即從 p到第 i個參會者的人數大于 v,也需開新的一輛車子,故此處填寫 i- p+1>v or t>w或 i- p=v or t>w。③車子數量 k加 1,p調整為 i,指向新車輛的第一個上車的人,s1調整為 s2,記錄該車第一個人的上車時間,故此處填寫為s1=s2或 s1 =a[i][2:]。④遍歷參會者的信息,即數組 a,若當前提交信息中的賓館和前一相鄰信息中的賓館不同,則表示同一賓館的記錄已經遍歷完畢,j指向該賓館第一個參會者,i-1指向該賓館最后一個參會者,調用自定義函數 getCnt計算從第 j到 i-1個參會者所需的車輛數,累加到 sum中,再調整為 i,即指向下一賓館的第一個參會者,故此處填sum= sum+getCnt(j, i-1) 。11/4 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫