中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

高中信息技術(shù)浙教版(2019)選修1 驗(yàn)收卷(五) 綜合練習(xí)(A)(課件 練習(xí)含答案,2份打包)

資源下載
  1. 二一教育資源

高中信息技術(shù)浙教版(2019)選修1 驗(yàn)收卷(五) 綜合練習(xí)(A)(課件 練習(xí)含答案,2份打包)

資源簡介

驗(yàn)收卷(五) 綜合練習(xí)(A)
(考試時(shí)間40分鐘 滿分50分)
一、選擇題(本題共12小題,每小題2分,共24分)
1.下列關(guān)于數(shù)據(jù)結(jié)構(gòu)與算法效率的描述,不正確的是(  )
A.隊(duì)列和棧都是一種線性表,但兩者有不相同的特性
B.采用相同公式求解n!,使用迭代算法比遞歸算法的算法效率高
C.使用數(shù)組結(jié)構(gòu)在進(jìn)行數(shù)據(jù)插入和刪除操作時(shí),一定會(huì)引起數(shù)據(jù)移動(dòng)
D.某單向鏈表(節(jié)點(diǎn)數(shù)>2)設(shè)有頭尾指針,在刪除該鏈表尾節(jié)點(diǎn)時(shí)需要遍歷多個(gè)節(jié)點(diǎn)
2.約定:T操作是指在隊(duì)列中1個(gè)元素出隊(duì)后再入隊(duì),E操作是指將1個(gè)元素入隊(duì),P操作是指隊(duì)列中1個(gè)元素出隊(duì),隊(duì)首指針head和隊(duì)尾指針tail初始值均為0。則經(jīng)過EETPETEP系列操作后,隊(duì)首指針head和隊(duì)尾指針tail的值分別為(  )
A.3 4 B.3 5 C.4 5 D.4 6
3.如果一個(gè)棧初始時(shí)為空,且當(dāng)前棧中的元素從棧底到棧頂依次為“d,e,f,g”,已知元素p已經(jīng)出棧,則入棧順序不可能是(  )
A.d,e,f,g,p B.p,d,e,f,g
C.d,e,p,f,g D.d,e,g,p,f
4.已知一棵完全二叉樹的節(jié)點(diǎn)總數(shù)為 12,則有關(guān)該二叉樹的說法正確的是(  )
A.樹的度為12 B.樹的層數(shù)為3
C.葉子節(jié)點(diǎn)數(shù)為5 D.最后一層有5個(gè)節(jié)點(diǎn)
5.某二叉樹的樹形結(jié)構(gòu)如圖所示,其中序遍歷結(jié)果為FDGBAEC。若補(bǔ)全為完全二叉樹后,按從上到下、自左往右的順序用一維數(shù)組a存儲(chǔ),其中根節(jié)點(diǎn)存儲(chǔ)于元素a[0]中,則元素a[6]的值為(  )
A.D B.F C.G D.C
6.有如下Python 程序段:
import random
q=[0]*5
head,tail=0,0
for i in range(5):
 if random.randint(0,i)%2==0:
  q[tail]=random.randint(1,9) #隨機(jī)生成1到9之間的整數(shù)
 elif head q[tail]=q[head]
 head+=1
 tail+=1
print(q)
執(zhí)行該程序段后,列表q 的值不可能是(  )
A.[1,0,1,0,9] B.[5,4,3,2,1]
C.[5,8,3,0,0] D.[5,5,6,0,6]
7.有如下 Python程序段:
a=[21,5,10,9,18,10,5,18,12,11]
n=len(a)
st=[0]*n; top=-1
for i in range(n):
 if top==-1:
   top+=1
   st[top]=a[i]
 else:
 if a[i]%2==0:
    while top>-1 and a[i]>st[top]:
     top-=1
   top+=1
   st[top]=a[i]
while top>-1:
   print(st[top],end=″ ″)
   top-=1
執(zhí)行該程序段后,輸出結(jié)果為(  )
A.12 18 18 21 B.18 18 12
C.21 18 18 12 D.11 12 18 18 21
8.定義如下函數(shù):
def chg(k):
 if k==-1:
 return ″″
 else:
  c=chr(ord(″a″)+k)
 if k%2==1:
   return c+chg(k-1)
 else:
   return chg(k-1)+c
執(zhí)行語句m=chg(4)后,m的值為(  )
A.″e(cuò)cabd″ B.″dbace″ C.″abcde″ D.″e(cuò)dcba″
9.下面Python 程序運(yùn)行后,輸出結(jié)果不可能的是(  )
from random import randint
a=[3,4,5,6,7,8]
def f(x):
 if x<2:
 return a[x]+f(2*x+randint(1,3))
 else:
 return a[x]
A.8 B.9 C.10 D.13
10.列表a中存儲(chǔ)了8個(gè)元素,即a[0],a[1],…,a[7],有如下Python程序段:
n=8
for i in range(n-1):
 for j in range(n-1,i,-1):
  if a[j]   a[j-1],a[j]=a[j],a[j-1]
該程序段實(shí)現(xiàn)的是(  )
A.a[0]到a[7]升序排序
B.a[4]到a[7]升序排序
C.a[0]到a[7]的數(shù)據(jù)對(duì)4取余之后升序排序
D.a[0]到a[3]、a[4]到a[7]分別升序排序
11.如下 Python 程序段:
import random
a=[1,3,5,7,9,11,13,15]
key=random.randint(1,8)*2
i,j=0,len(a)-1
s=0
while i<=j(luò):
 m=(i+j+1)∥2
  if a[m]==key:
 break
 if a[m]>key:
 j=m-1;s-=1
 else:
 i=m+1;s+=1
print(s)
上述程序執(zhí)行完以后,s 的值可能有(  )
A.4 種 B.5種 C.7種 D.8 種
12.將鏈表中的奇數(shù)節(jié)點(diǎn)和偶數(shù)節(jié)點(diǎn)分別排在一起,奇數(shù)節(jié)點(diǎn)和偶數(shù)節(jié)點(diǎn)的相對(duì)順序不變。如原始鏈表為,新鏈表為。部分程序如下:
#讀入鏈表,存儲(chǔ)在列表a中,head存儲(chǔ)鏈表的頭節(jié)點(diǎn)
odd=head
even=a[odd][1]
tmp=even
while a[odd][1]!=-1 and a[even][1]!=-1:
a[odd][1]=tmp
上述程序段中方框處可選的語句為
①odd=a[odd][1]
②even=a[even][1]
③a[odd][1]=a[even][1]
④a[even][1]=a[odd][1]
則方框處語句依次為(  )
A.①③②④ B.①②③④ C.③②④① D.③①④②
二、非選擇題(本題共3小題,共26分)
13.(6分)疫情防控期間,某工廠為了將流水線上已生產(chǎn)的口罩及時(shí)裝箱,并盡量分配給更多的疫情地區(qū),需要設(shè)計(jì)一個(gè)程序?qū)崿F(xiàn)自動(dòng)化裝箱。裝箱要求為:流水線上生產(chǎn)的每包口罩?jǐn)?shù)量有可能不同,裝入箱子的口罩必須為流水線上連續(xù)的若干包,每箱內(nèi)的口罩?jǐn)?shù)量必須相同,在已知每包口罩?jǐn)?shù)量和口罩總包數(shù)的前提下,裝盡可能多的箱子。
例l:某流水線上有8包口罩,每包口罩的數(shù)量如下表:
包序號(hào) 1 2 3 4 5 6 7 8 每箱 數(shù)量
每包數(shù)量 12 3 9 6 6 9 3 12
箱號(hào) (方案1) 1 2 2 3 3 4 4 5 12
箱號(hào) (方案2) 1 1 2 2 3 3 4 4 15
箱號(hào) (方案3) 1 1 1 1 2 2 2 2 30
在上述情況下,有3種分箱方案,方案1為最優(yōu)方案。
例2:某流水線上有8包口罩,每包口罩的數(shù)量如下表:
序號(hào) 1 2 3 4 5 6 7 8
數(shù)量 1 3 5 7 9 11 13 15
在上述情況下,沒有符合要求的裝箱方案。
按照上述要求,編寫一個(gè)Python程序,功能如下:讀取流水線上每包口罩的數(shù)量,輸出分箱結(jié)果,若存在裝箱方案,則輸出最多的裝箱數(shù),否則輸出“無方案”。程序界面如圖所示。
包編號(hào):1 2 3 4 5 6 7 8 包數(shù)量:12 3 9 6 6 9 3 12 方案1每箱12包,箱號(hào):1—1,2—3,4—5,6—7,8—8 方案2每箱15包,箱號(hào):1—2,3—4,5—6,7—8 方案3每箱30包,箱號(hào):1—4,5—8 總共方案數(shù)為3,第一種方案最佳。
(1)假如流水線上生產(chǎn)的每包口罩?jǐn)?shù)量依次為“16,5,3,8,7,9”,按照上述裝箱要求,則裝箱結(jié)果為________________。
(2)代碼如下,請(qǐng)?jiān)诔绦騽澗€處填入合適的代碼。
def F(x): #數(shù)字按固定長度輸出
  return (″   ″+str(x))[-5:]
def Sa(a,h,t): #將數(shù)組索引號(hào)h至t-1之間的數(shù)值相加。
  s=0
  for i in range(h,t):
  s+=a[i]
  return s
#讀取各包中口罩?jǐn)?shù)量到數(shù)組a,并輸出,代碼略
maxa=0;suma=0
for i in a: #統(tǒng)計(jì)口罩?jǐn)?shù)量最多的包編號(hào)和累加各包口罩?jǐn)?shù)量。
  if i>maxa:
 maxa=i
  ①____________
m=0
for i in range(maxa,suma):
  xh=[]
  head=0;tail=1
  while tail<=n:
  f=False
  t=Sa(a,head,tail)
if t    ②____________
  elif t==i:
     xh.append(tail-1)
    f=True
    head=tail
    ③____________
  else:
    break
  if f:
  m+=1
  s=″方案″+str(m)+″每箱″+str(i)+″包,箱號(hào):1-″
  for j in xh:
    s=s+str(j+1)+″,″+str(j+2)+″-″
  print(s[:-3])
14.(10分)某彈珠游戲,彈珠從起點(diǎn)到終點(diǎn)需要經(jīng)過若干節(jié)點(diǎn)(不存在繞圈現(xiàn)象,且保證可以到達(dá)),但方案可能不唯一。各節(jié)點(diǎn)關(guān)系如圖a所示,尋找線路的方法:第1輪節(jié)點(diǎn)A進(jìn)棧,作為當(dāng)前節(jié)點(diǎn),同時(shí)對(duì)A作起點(diǎn)標(biāo)志為真操作,發(fā)現(xiàn)有B、D可以連通,B和D分別進(jìn)棧,棧頂為D;第2輪以D為當(dāng)前節(jié)點(diǎn),對(duì)D作起點(diǎn)標(biāo)志為真操作,從該節(jié)點(diǎn)出發(fā),枚舉所有的路線,直到到達(dá)終點(diǎn)。找到終點(diǎn)后,枚舉棧中節(jié)點(diǎn),查找起點(diǎn)標(biāo)志為真的節(jié)點(diǎn),輸出可以從起點(diǎn)到終點(diǎn)達(dá)到的線路;接著對(duì)當(dāng)前節(jié)點(diǎn)作出棧處理,往前查找一個(gè)出棧標(biāo)志為假的節(jié)點(diǎn),繼續(xù)重復(fù)查找,直到棧中元素為空。
用數(shù)組存儲(chǔ)各節(jié)點(diǎn)信息,節(jié)點(diǎn)A、B、C、D、E、F、G、H分別編號(hào)為0~7。數(shù)值1表示表格中左側(cè)節(jié)點(diǎn)可達(dá)上方節(jié)點(diǎn),數(shù)值0表示無法抵達(dá)。程序運(yùn)行的結(jié)果如圖所示,請(qǐng)?jiān)趧澗€處填入合適的代碼。
路徑1:A,D,G,H 路徑2:A,D,E,F(xiàn),H 路徑3:A,D,E,C,F(xiàn),H 路徑4:A,B,C,F(xiàn),H
(1)起點(diǎn)為D,終點(diǎn)為F,經(jīng)過節(jié)點(diǎn)數(shù)最少的線路圖為________。
(2)實(shí)現(xiàn)上述功能的部分Python程序如下,請(qǐng)?jiān)趧澗€處填入合適的代碼。
n=8
#n為總的節(jié)點(diǎn)數(shù),讀取n*n個(gè)節(jié)點(diǎn)之間的信息,存儲(chǔ)在二維數(shù)組 a中,若a[i][j]值為1,表示i節(jié)點(diǎn)到j(luò)節(jié)點(diǎn)可達(dá)。代碼略。
st=[0]*n
st[0]=0;top=0 #構(gòu)建一個(gè)n個(gè)元素的棧
f=[False]*n #是否以該節(jié)點(diǎn)為起點(diǎn)向后查找過
tot=0 #記錄可行路徑的數(shù)量
while top!=-1:
①________
f[cur]=True  
for i in range(n):
    if a[cur][i]==1 :
  if i==n-1:
      tot+=1
      s=″″;j=0
      while j<=top:
        if ②________:
         s=s+str(chr(st[j]+65))+″,″
        j+=1
     print(″路徑″+str(tot)+″:″+s+chr(64+n))
      top-=1
     while top>=0 and f[st[top]]:
       top-=1        
    else:      
      top+=1
      ③________
15.(10分)王老師組織同學(xué)參加答題游戲,由“A”,“B”,“C”,“D”4個(gè)小組參與游戲,每個(gè)小組由k名學(xué)生組成,由1人代表小組答題。抽簽確定開始的小組,每一輪按A→B→C→D→A順序輪流作答,每答對(duì)一題加10分,每個(gè)選手答錯(cuò)一題即遭淘汰,由同組下一個(gè)選手補(bǔ)上,若該組所有選手都已淘汰則該組即遭淘汰,其他小組繼續(xù)輪流作答,直到剩下最后一組,即為獲勝小組,若最后一輪沒有小組幸存,則分?jǐn)?shù)最高的小組獲勝。
(1)若每組有兩個(gè)選手,從A組開始,經(jīng)過3輪答題,答題結(jié)果為“TFTF”,“FFFT”,“FTF”(答對(duì)用T表示,答錯(cuò)用F表示),則獲勝的小組是______。
(2)王老師用鏈表數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)了答題游戲的算法,并用 Python 編寫程序模擬,實(shí)現(xiàn)了輸入每組人數(shù),隨機(jī)產(chǎn)生開始的小組,輸入每輪答題的情況,輸出最后獲勝的隊(duì)伍。
該程序的 Python 代碼如下,請(qǐng)?jiān)趧澗€處填入合適的代碼,完善程序。
def findmax(score):
 #findmax 函數(shù)功能是在 4 個(gè)小組查找分?jǐn)?shù)最高的小組并輸出,代碼略
def printlist(head): #輸出當(dāng)前剩余小組的得分情況
   print(dlist[head][0],″組得分是″,score[dlist[head][0]])
   cur=①________
   while cur!=head:
print(dlist[cur][0],″組得分是″,score[dlist[cur][0]])
cur=dlist[cur][1]
k=int(input(″輸入每個(gè)組的人數(shù):″))
code=″ABCD″
dlist=[[code[i],i+1] for i in range(4) ] #初始化鏈表 dlist
dlist[3][1]=②________
head=randint(0,3) #隨機(jī)產(chǎn)生開始的小組
print(″從″,code[head],″開始答題″)
number={} #存儲(chǔ)每組剩余替補(bǔ)人數(shù)
score={} #存儲(chǔ)每組得分?jǐn)?shù)據(jù)
for i in dlist:
 number[i[0]]=k-1
 score[i[0]]=0
cur=head
pre=(head-1)%4
left=4
while left>1:
 ans=input(″輸入本輪答題情況″)
  for j in ans:
  if j==″T″:
    score[dlist[cur][0]]+=10
    pre=dlist[pre][1]
    cur=dlist[cur][1]
   else:
    if number[dlist[cur][0]]!=0:
#該組還有替補(bǔ)選手,則繼續(xù)參賽
     number[dlist[cur][0]]-=1
     pre=dlist[pre][1]
     cur=dlist[cur][1]
   else:
      #在鏈表中刪除當(dāng)前節(jié)點(diǎn)
     if cur==head:
       head=dlist[cur][1]
     print(dlist[cur][0],″組被淘汰″)
     cur=dlist[cur][1]
     left-=1
   if left!=0:
print(″剩余小組得分情況″)
printlist(head)
if __④________:
 print(″最終獲勝的組是:″,dlist[head][0])
else:
findmax(score)
驗(yàn)收卷(五) 綜合練習(xí)(A)
1.C [本題考查不同數(shù)據(jù)結(jié)構(gòu)的特性和算法描述。A選項(xiàng)隊(duì)列和棧都是一種線性表,隊(duì)列的特性是先進(jìn)先出,棧的特性是先進(jìn)后出。B選項(xiàng)遞歸求 n!要遞推和回歸兩個(gè)階段(分解問題,逐級(jí)返回),迭代求 n!循環(huán)代碼中參與運(yùn)算的變量作為下一次循環(huán)計(jì)算的初始值。當(dāng) n 越大,迭代算法的效率明顯高于遞歸算法。C選項(xiàng)使用數(shù)組這種數(shù)組結(jié)構(gòu)在數(shù)組尾部進(jìn)行數(shù)據(jù)插入和刪除操作時(shí),不會(huì)引起數(shù)據(jù)移動(dòng);D選項(xiàng)鏈表的操作需要從頭指針開始,遍歷到需要操作的節(jié)點(diǎn),因?yàn)槟硢蜗蜴湵?節(jié)點(diǎn)數(shù)>2),所以在對(duì)該鏈表進(jìn)行刪除尾節(jié)點(diǎn)的操作時(shí)需要遍歷從頭指針開始到尾指針等多個(gè)節(jié)點(diǎn)。]
2.D [本題考查隊(duì)列的基本操作。T操作既有入隊(duì),又有出隊(duì),因此共有6次入隊(duì),4次出隊(duì),每次出隊(duì)和入隊(duì),指針分別加1。]
3.D [本題主要考查的是棧的入棧和出棧操作。已知當(dāng)前棧中的元素從棧底到棧頂依次為“d,e,f,g”,說明入棧順序?yàn)椤癲、e、f、g”,而元素f的進(jìn)棧順序則沒有要求,因?yàn)樵豥進(jìn)棧可直接出棧,因此,ABC選項(xiàng)都有可能,D選項(xiàng)不可能是入棧順序,因?yàn)樵豧應(yīng)在元素g之前入棧。]
4.D [本題考查二叉樹的基本性質(zhì)。符合完全二叉樹的兩個(gè)條件為:①只有最下二層中的節(jié)點(diǎn)度數(shù)小于2;②最下一層的葉子節(jié)點(diǎn)都依次排列在該層最左邊位置。A選項(xiàng)度指樹的最大節(jié)點(diǎn)數(shù)。B選項(xiàng)若為滿二叉樹,第3層及前面所有節(jié)點(diǎn)數(shù)和為7,因此至少4層。C選項(xiàng)最后一層上有5個(gè)節(jié)點(diǎn),即有葉子節(jié)點(diǎn)數(shù)為5,但第3層上還有一個(gè)葉子節(jié)點(diǎn)。]
5.D [元素a[6]位于二叉樹從上至下,從左到右第7個(gè)位置,即第3層最后一個(gè)。根據(jù)中序遍歷畫出圖示如圖所示。]
6.C [循環(huán)5次,每次循環(huán)有3種可能,一是當(dāng)i為偶數(shù)時(shí),入隊(duì)一個(gè)[1,9] 之間的整數(shù),二是當(dāng)i為奇數(shù)時(shí),且q[tail-1]7. A [本題考查棧的入棧和出棧。把握出入棧的條件,當(dāng)棧為空(top==-1)時(shí)入棧;當(dāng)a[i]是偶數(shù)時(shí),把棧頂中比該數(shù)小的數(shù)出棧,自身入棧。21入棧,10入棧,18先讓10出棧,再入棧,18入棧,12入棧。]
8.B [依次調(diào)用函數(shù)時(shí),k的值為4,3,2,1,0,因此對(duì)應(yīng)的字母c依次為edcba。chg(4)=chg(3)+″e(cuò)″;chg(3)=″d″+chg(2) ;chg(2)=chg(1)+″c″;chg(1)=″b″+chg(0) ;chg(0)=chg(-1)+″a″,依次進(jìn)行回歸,chg(1)=″ba″,chg(2)=″bac″,chg(3)=″dbac″,chg(4)=″dbace″。]
9.C [若第1次產(chǎn)生的隨機(jī)數(shù)為1,則返回a[0]+f(2*0+1),即3+f(1)。若x的值為1,函數(shù)返回a[1]+f(2*1+randint(1,3)),產(chǎn)生隨機(jī)數(shù)分別為1,2,3時(shí),返回值依次為4+6=10,4+7=11,4+8=12,則3+f(1)的值依次為13,14,15。若第1次產(chǎn)生的隨機(jī)數(shù)為2,則返回a[0]+f(2*0+2),其值為3+5=8。若第1次產(chǎn)生的隨機(jī)數(shù)為3,則返回a[0]+f(2*0+3),其值為3+6=9。]
10.D [a[7]和a[6]、a[6]和a[5]、a[5]和a[4]依次比較,實(shí)現(xiàn)a[4]到a[7]升序,j為4時(shí),并沒有和a[3]比較和交換,但a[3]和a[2]、a[2]和a[1]、a[1]和a[0]依次比較和交換,形成有序序列。]
11.A [本題考查對(duì)分查找。列表 a 中的元素為1-15 中的奇數(shù),查找的 key 為 2-16 中的偶數(shù),所以查找的結(jié)果不存在 a[m]==key 也就是找到的情況,break 不會(huì)被執(zhí)行。查找的過程如下:s 的值可能為-2,-1,1,3,共4種。]
12.D [本題考查鏈表的插入。先分別獲取奇數(shù)節(jié)點(diǎn)連接而成的鏈表和偶數(shù)節(jié)點(diǎn)連接而成的鏈表;再連接兩個(gè)鏈表得到新鏈表。]
13.(1)3 (2)①suma+=i ②tail+=1 ③tail=head+1
解析 本題考查隊(duì)列的基本操作。(1)以16包為一箱,因此箱號(hào)分別為1,2,2,2,3,3。共3箱。
(2)①統(tǒng)計(jì)口罩?jǐn)?shù)量最多的包編號(hào)和累加各包口罩?jǐn)?shù)量。 每箱口罩的數(shù)量肯定在maxa與suma-1之間,變量i枚舉區(qū)間中每個(gè)數(shù),當(dāng)累積的數(shù)量t14.(1)DEF (2)①cur=st[top]  ②f[st[j]] ③st[top]=i
解析 本題考查棧的基本操作。(1)略。(2)棧st用于存儲(chǔ)每次出現(xiàn)新的節(jié)點(diǎn)數(shù),當(dāng)有新的節(jié)點(diǎn)出現(xiàn),不斷地進(jìn)棧,若找到終點(diǎn),則開始出棧,并對(duì)每次訪問起點(diǎn)的棧作好標(biāo)記。①中將獲取當(dāng)前節(jié)點(diǎn)cur的值為st[top]。②變量j從0開始,不斷地枚舉棧,找到標(biāo)志為真的節(jié)點(diǎn),構(gòu)成查找的路徑。③發(fā)現(xiàn)一個(gè)新的節(jié)點(diǎn),把新的節(jié)點(diǎn)入棧。
15.(1)C (2)①dlist[head][1] ②0 ③dlist[pre][1]=dlist[cur][1]
④left==1
解析 (1) A組各輪次結(jié)果分別為TFF,B組為FF,C組為TFT,D組為FTF,因此獲勝的為C組。
(2)①鏈表 dlist數(shù)據(jù)區(qū)域值為組的名稱,指針為下一下組的索引,已經(jīng)輸出頭節(jié)點(diǎn)的信息,因此當(dāng)前節(jié)點(diǎn)cur的初值為頭節(jié)點(diǎn)的下一節(jié)點(diǎn)。②每一輪按A→B→C→D→A順序輪流作答,將要構(gòu)建一個(gè)循環(huán)鏈表,尾節(jié)點(diǎn)將指向第1個(gè)節(jié)點(diǎn)。③在鏈表中刪除當(dāng)前節(jié)點(diǎn)cur,將前驅(qū)指向當(dāng)前節(jié)點(diǎn)的后繼。④最后剩下一組,該組獲勝。(共44張PPT)
第六章 大數(shù)據(jù)時(shí)代數(shù)據(jù)的組織
驗(yàn)收卷(五) 綜合練習(xí)(A)
(考試時(shí)間40分鐘 滿分50分)
一、選擇題(本題共12小題,每小題2分,共24分)
C
解析 本題考查不同數(shù)據(jù)結(jié)構(gòu)的特性和算法描述。A選項(xiàng)隊(duì)列和棧都是一種線性表,隊(duì)列的特性是先進(jìn)先出,棧的特性是先進(jìn)后出。B選項(xiàng)遞歸求 n!要遞推和回歸兩個(gè)階段(分解問題,逐級(jí)返回),迭代求 n!循環(huán)代碼中參與運(yùn)算的變量作為下一次循環(huán)計(jì)算的初始值。當(dāng) n 越大,迭代算法的效率明顯高于遞歸算法。C選項(xiàng)使用數(shù)組這種數(shù)組結(jié)構(gòu)在數(shù)組尾部進(jìn)行數(shù)據(jù)插入和刪除操作時(shí),不會(huì)引起數(shù)據(jù)移動(dòng);D選項(xiàng)鏈表的操作需要從頭指針開始,遍歷到需要操作的節(jié)點(diǎn),因?yàn)槟硢蜗蜴湵?節(jié)點(diǎn)數(shù)>2),所以在對(duì)該鏈表進(jìn)行刪除尾節(jié)點(diǎn)的操作時(shí)需要遍歷從頭指針開始到尾指針等多個(gè)節(jié)點(diǎn)。
A.隊(duì)列和棧都是一種線性表,但兩者有不相同的特性
B.采用相同公式求解n!,使用迭代算法比遞歸算法的算法效率高
C.使用數(shù)組結(jié)構(gòu)在進(jìn)行數(shù)據(jù)插入和刪除操作時(shí),一定會(huì)引起數(shù)據(jù)移動(dòng)
D.某單向鏈表(節(jié)點(diǎn)數(shù)>2)設(shè)有頭尾指針,在刪除該鏈表尾節(jié)點(diǎn)時(shí)需要遍歷多個(gè)節(jié)點(diǎn)
D
2.約定:T操作是指在隊(duì)列中1個(gè)元素出隊(duì)后再入隊(duì),E操作是指將1個(gè)元素入隊(duì),P操作是指隊(duì)列中1個(gè)元素出隊(duì),隊(duì)首指針head和隊(duì)尾指針tail初始值均為0。則經(jīng)過EETPETEP系列操作后,隊(duì)首指針head和隊(duì)尾指針tail的值分別為(  )
A.3 4 B.3 5 C.4 5 D.4 6
解析 本題考查隊(duì)列的基本操作。T操作既有入隊(duì),又有出隊(duì),因此共有6次入隊(duì),4次出隊(duì),每次出隊(duì)和入隊(duì),指針分別加1。
D
解析 本題主要考查的是棧的入棧和出棧操作。已知當(dāng)前棧中的元素從棧底到棧頂依次為“d,e,f,g”,說明入棧順序?yàn)椤癲、e、f、g”,而元素f的進(jìn)棧順序則沒有要求,因?yàn)樵豥進(jìn)棧可直接出棧,因此,ABC選項(xiàng)都有可能,D選項(xiàng)不可能是入棧順序,因?yàn)樵豧應(yīng)在元素g之前入棧。
D
4.已知一棵完全二叉樹的節(jié)點(diǎn)總數(shù)為 12,則有關(guān)該二叉樹的說法正確的是(  )
A.樹的度為12 B.樹的層數(shù)為3
C.葉子節(jié)點(diǎn)數(shù)為5 D.最后一層有5個(gè)節(jié)點(diǎn)
解析 本題考查二叉樹的基本性質(zhì)。符合完全二叉樹的兩個(gè)條件為:①只有最下二層中的節(jié)點(diǎn)度數(shù)小于2;②最下一層的葉子節(jié)點(diǎn)都依次排列在該層最左邊位置。A選項(xiàng)度指樹的最大節(jié)點(diǎn)數(shù)。B選項(xiàng)若為滿二叉樹,第3層及前面所有節(jié)點(diǎn)數(shù)和為7,因此至少4層。C選項(xiàng)最后一層上有5個(gè)節(jié)點(diǎn),即有葉子節(jié)點(diǎn)數(shù)為5,但第3層上還有一個(gè)葉子節(jié)點(diǎn)。
D
5.某二叉樹的樹形結(jié)構(gòu)如圖所示,其中序遍歷結(jié)果為FDGBAEC。若補(bǔ)全為完全二叉樹后,按從上到下、自左往右的順序用一維數(shù)組a存儲(chǔ),其中根節(jié)點(diǎn)存儲(chǔ)于元素a[0]中,則元素a[6]的值為(  )
解析 元素a[6]位于二叉樹從上至下,從左到右第7個(gè)位置,即第3層最后一個(gè)。根據(jù)中序遍歷畫出圖示如圖所示。
A.D B.F C.G D.C
6.有如下Python 程序段:
import random
q=[0]*5
head,tail=0,0
for i in range(5):
 if random.randint(0,i)%2==0:
  q[tail]=random.randint(1,9) #隨機(jī)生成1到9之間的整數(shù)
 elif head q[tail]=q[head]
 head+=1
 tail+=1
print(q)
解析 循環(huán)5次,每次循環(huán)有3種可能,一是當(dāng)i為偶數(shù)時(shí),入隊(duì)一個(gè)[1,9] 之間的整數(shù),二是當(dāng)i為奇數(shù)時(shí),且q[tail-1]C
7.有如下 Python程序段:
a=[21,5,10,9,18,10,5,18,12,11]
n=len(a)
st=[0]*n; top=-1
for i in range(n):
 if top==-1:
   top+=1
   st[top]=a[i]
 else:
 if a[i]%2==0:
    while top>-1 and a[i]>st[top]:
     top-=1
A
解析 本題考查棧的入棧和出棧。把握出入棧的條件,當(dāng)棧為空(top==-1)時(shí)入棧;當(dāng)a[i]是偶數(shù)時(shí),把棧頂中比該數(shù)小的數(shù)出棧,自身入棧。21入棧,10入棧,18先讓10出棧,再入棧,18入棧,12入棧。
   top+=1
   st[top]=a[i]
while top>-1:
   print(st[top],end=″ ″)
   top-=1
執(zhí)行該程序段后,輸出結(jié)果為(  )
A.12 18 18 21 B.18 18 12
C.21 18 18 12 D.11 12 18 18 21
B
8.定義如下函數(shù):
def chg(k):
 if k==-1:
 return ″″
 else:
  c=chr(ord(″a″)+k)
 if k%2==1:
   return c+chg(k-1)
 else:
   return chg(k-1)+c
執(zhí)行語句m=chg(4)后,m的值為(  )
A.″e(cuò)cabd″ B.″dbace″ C.″abcde″ D.″e(cuò)dcba″
解析 依次調(diào)用函數(shù)時(shí),k的值為4,3,2,1,0,因此對(duì)應(yīng)的字母c依次為edcba。chg(4)=chg(3)+″e(cuò)″;chg(3)=″d″+chg(2) ;chg(2)=chg(1)+″c″;chg(1)=″b″+chg(0) ;chg(0)=chg(-1)+″a″,依次進(jìn)行回歸,chg(1)=″ba″,chg(2)=″bac″,chg(3)=″dbac″,chg(4)=″dbace″。
C
from random import randint
a=[3,4,5,6,7,8]
def f(x):
 if x<2:
 return a[x]+f(2*x+randint(1,3))
 else:
 return a[x]
A.8 B.9 C.10 D.13
解析 若第1次產(chǎn)生的隨機(jī)數(shù)為1,則返回a[0]+f(2*0+1),即3+f(1)。若x的值為1,函數(shù)返回a[1]+f(2*1+randint(1,3)),產(chǎn)生隨機(jī)數(shù)分別為1,2,3時(shí),返回值依次為4+6=10,4+7=11,4+8=12,則3+f(1)的值依次為13,14,15。若第1次產(chǎn)生的隨機(jī)數(shù)為2,則返回a[0]+f(2*0+2),其值為3+5=8。若第1次產(chǎn)生的隨機(jī)數(shù)為3,則返回a[0]+f(2*0+3),其值為3+6=9。
D
10.列表a中存儲(chǔ)了8個(gè)元素,即a[0],a[1],…,a[7],有如下Python程序段:
n=8
for i in range(n-1):
 for j in range(n-1,i,-1):
  if a[j]   a[j-1],a[j]=a[j],a[j-1]
該程序段實(shí)現(xiàn)的是(  )
A.a[0]到a[7]升序排序
B.a[4]到a[7]升序排序
C.a[0]到a[7]的數(shù)據(jù)對(duì)4取余之后升序排序
D.a[0]到a[3]、a[4]到a[7]分別升序排序
解析 a[7]和a[6]、a[6]和a[5]、a[5]和a[4]依次比較,實(shí)現(xiàn)a[4]到a[7]升序,j為4時(shí),并沒有和a[3]比較和交換,但a[3]和a[2]、a[2]和a[1]、a[1]和a[0]依次比較和交換,形成有序序列。
11.如下 Python 程序段:
import random
a=[1,3,5,7,9,11,13,15]
key=random.randint(1,8)*2
i,j=0,len(a)-1
s=0
while i<=j(luò):
 m=(i+j+1)∥2
  if a[m]==key:
 break
 if a[m]>key:
 j=m-1;s-=1
 else:
 i=m+1;s+=1
print(s)
上述程序執(zhí)行完以后,s 的值可能有(  )
A.4 種 B.5種 C.7種 D.8 種
A
解析 本題考查對(duì)分查找。列表 a 中的元素為1-15 中的奇數(shù),查找的 key 為 2-16 中的偶數(shù),所以查找的結(jié)果不存在 a[m]==key 也就是找到的情況,break 不會(huì)被執(zhí)行。查找的過程如下:s 的值可能為-2,-1,1,3,共4種。
12.將鏈表中的奇數(shù)節(jié)點(diǎn)和偶數(shù)節(jié)點(diǎn)分別排在一起,奇數(shù)節(jié)點(diǎn)和偶數(shù)節(jié)點(diǎn)的相對(duì)順序不變。如原始鏈表為 ,新鏈表為 。部分程序如下:
#讀入鏈表,存儲(chǔ)在列表a中,head存儲(chǔ)鏈表的頭節(jié)點(diǎn)
odd=head
even=a[odd][1]
tmp=even
while a[odd][1]!=-1 and a[even][1]!=-1:

解析 本題考查鏈表的插入。先分別獲取奇數(shù)節(jié)點(diǎn)連接而成的鏈表和偶數(shù)節(jié)點(diǎn)連接而成的鏈表;再連接兩個(gè)鏈表得到新鏈表。
a[odd][1]=tmp
上述程序段中方框處可選的語句為
①odd=a[odd][1]
②even=a[even][1]
③a[odd][1]=a[even][1]
④a[even][1]=a[odd][1]
則方框處語句依次為(  )
A.①③②④ B.①②③④ C.③②④① D.③①④②
D
二、非選擇題(本題共3小題,共26分)
13.(6分)疫情防控期間,某工廠為了將流水線上已生產(chǎn)的口罩及時(shí)裝箱,并盡量分配給更多的疫情地區(qū),需要設(shè)計(jì)一個(gè)程序?qū)崿F(xiàn)自動(dòng)化裝箱。裝箱要求為:流水線上生產(chǎn)的每包口罩?jǐn)?shù)量有可能不同,裝入箱子的口罩必須為流水線上連續(xù)的若干包,每箱內(nèi)的口罩?jǐn)?shù)量必須相同,在已知每包口罩?jǐn)?shù)量和口罩總包數(shù)的前提下,裝盡可能多的箱子。
例l:某流水線上有8包口罩,每包口罩的數(shù)量如下表:
包序號(hào) 1 2 3 4 5 6 7 8 每箱
數(shù)量
每包數(shù)量 12 3 9 6 6 9 3 12
箱號(hào) (方案1) 1 2 2 3 3 4 4 5 12
箱號(hào) (方案2) 1 1 2 2 3 3 4 4 15
箱號(hào) (方案3) 1 1 1 1 2 2 2 2 30
在上述情況下,有3種分箱方案,方案1為最優(yōu)方案。
例2:某流水線上有8包口罩,每包口罩的數(shù)量如下表:
序號(hào) 1 2 3 4 5 6 7 8
數(shù)量 1 3 5 7 9 11 13 15
在上述情況下,沒有符合要求的裝箱方案。
按照上述要求,編寫一個(gè)Python程序,功能如下:讀取流水線上每包口罩的數(shù)量,輸出分箱結(jié)果,若存在裝箱方案,則輸出最多的裝箱數(shù),否則輸出“無方案”。程序界面如圖所示。
(1)假如流水線上生產(chǎn)的每包口罩?jǐn)?shù)量依次為“16,5,3,8,7,9”,按照上述裝箱要求,則裝箱結(jié)果為________________。
包編號(hào):1 2 3 4 5 6 7 8
包數(shù)量:12 3 9 6 6 9 3 12
方案1每箱12包,箱號(hào):1—1,2—3,4—5,6—7,8—8
方案2每箱15包,箱號(hào):1—2,3—4,5—6,7—8
方案3每箱30包,箱號(hào):1—4,5—8
總共方案數(shù)為3,第一種方案最佳。
(2)代碼如下,請(qǐng)?jiān)诔绦騽澗€處填入合適的代碼。
def F(x): #數(shù)字按固定長度輸出
  return (″   ″+str(x))[-5:]
def Sa(a,h,t): #將數(shù)組索引號(hào)h至t-1之間的數(shù)值相加。
  s=0
  for i in range(h,t):
  s+=a[i]
  return s
#讀取各包中口罩?jǐn)?shù)量到數(shù)組a,并輸出,代碼略
maxa=0;suma=0
for i in a: #統(tǒng)計(jì)口罩?jǐn)?shù)量最多的包編號(hào)和累加各包口罩?jǐn)?shù)量。
  if i>maxa:
 maxa=i
if i>maxa:
 maxa=i
  ①____________
m=0
for i in range(maxa,suma):
  xh=[]
  head=0;tail=1
  while tail<=n:
  f=False
  t=Sa(a,head,tail)
if t    ②____________
  elif t==i:
     xh.append(tail-1)
    f=True
    head=tail
    ③____________
  else:
    break
  if f:
  m+=1
  s=″方案″+str(m)+″每箱″+str(i)+″包,箱號(hào):1-″
  for j in xh:
    s=s+str(j+1)+″,″+str(j+2)+″-″
  print(s[:-3])
解析 本題考查隊(duì)列的基本操作。(1)以16包為一箱,因此箱號(hào)分別為1,2,2,2,3,3。共3箱。
(2)①統(tǒng)計(jì)口罩?jǐn)?shù)量最多的包編號(hào)和累加各包口罩?jǐn)?shù)量。 每箱口罩的數(shù)量肯定在maxa與suma-1之間,變量i枚舉區(qū)間中每個(gè)數(shù),當(dāng)累積的數(shù)量t答案 (1)3 (2)①suma+=i ②tail+=1 ③tail=head+1
14.(10分)某彈珠游戲,彈珠從起點(diǎn)到終點(diǎn)需要經(jīng)過若干節(jié)點(diǎn)(不存在繞圈現(xiàn)象,且保證可以到達(dá)),但方案可能不唯一。各節(jié)點(diǎn)關(guān)系如圖a所示,尋找線路的方法:第1輪節(jié)點(diǎn)A進(jìn)棧,作為當(dāng)前節(jié)點(diǎn),同時(shí)對(duì)A作起點(diǎn)標(biāo)志為真操作,發(fā)現(xiàn)有B、D可以連通,B和D分別進(jìn)棧,棧頂為D;第2輪以D為當(dāng)前節(jié)點(diǎn),對(duì)D作起點(diǎn)標(biāo)志為真操作,從該節(jié)點(diǎn)出發(fā),枚舉所有的路線,直到到達(dá)終點(diǎn)。找到終點(diǎn)后,枚舉棧中節(jié)點(diǎn),查找起點(diǎn)標(biāo)志為真的節(jié)點(diǎn),輸出可以從起點(diǎn)到終點(diǎn)達(dá)到的線路;接著對(duì)當(dāng)前節(jié)點(diǎn)作出棧處理,往前查找一個(gè)出棧標(biāo)志為假的節(jié)點(diǎn),繼續(xù)重復(fù)查找,直到棧中元素為空。
用數(shù)組存儲(chǔ)各節(jié)點(diǎn)信息,節(jié)點(diǎn)A、B、C、D、E、F、G、H分別編號(hào)為0~7。數(shù)值1表示表格中左側(cè)節(jié)點(diǎn)可達(dá)上方節(jié)點(diǎn),數(shù)值0表示無法抵達(dá)。程序運(yùn)行的結(jié)果如圖所示,請(qǐng)?jiān)趧澗€處填入合適的代碼。
路徑1:A,D,G,H
路徑2:A,D,E,F(xiàn),H
路徑3:A,D,E,C,F(xiàn),H
路徑4:A,B,C,F(xiàn),H
(1)起點(diǎn)為D,終點(diǎn)為F,經(jīng)過節(jié)點(diǎn)數(shù)最少的線路圖為________。
(2)實(shí)現(xiàn)上述功能的部分Python程序如下,請(qǐng)?jiān)趧澗€處填入合適的代碼。
n=8
#n為總的節(jié)點(diǎn)數(shù),讀取n*n個(gè)節(jié)點(diǎn)之間的信息,存儲(chǔ)在二維數(shù)組 a中,若a[i][j]值為1,表示i節(jié)點(diǎn)到j(luò)節(jié)點(diǎn)可達(dá)。代碼略。
st=[0]*n
st[0]=0;top=0 #構(gòu)建一個(gè)n個(gè)元素的棧
f=[False]*n #是否以該節(jié)點(diǎn)為起點(diǎn)向后查找過
tot=0 #記錄可行路徑的數(shù)量
while top!=-1:
①________
f[cur]=True  
for i in range(n):
    if a[cur][i]==1 :
  if i==n-1:
      tot+=1
      s=″″;j=0
      while j<=top:
        if ②________:
         s=s+str(chr(st[j]+65))+″,″
        j+=1
     print(″路徑″+str(tot)+″:″+s+chr(64+n))
      top-=1
     while top>=0 and f[st[top]]:
       top-=1        
    else:      
      top+=1
      ③________
解析 本題考查棧的基本操作。(1)略。(2)棧st用于存儲(chǔ)每次出現(xiàn)新的節(jié)點(diǎn)數(shù),當(dāng)有新的節(jié)點(diǎn)出現(xiàn),不斷地進(jìn)棧,若找到終點(diǎn),則開始出棧,并對(duì)每次訪問起點(diǎn)的棧作好標(biāo)記。①中將獲取當(dāng)前節(jié)點(diǎn)cur的值為st[top]。②變量j從0開始,不斷地枚舉棧,找到標(biāo)志為真的節(jié)點(diǎn),構(gòu)成查找的路徑。③發(fā)現(xiàn)一個(gè)新的節(jié)點(diǎn),把新的節(jié)點(diǎn)入棧。
答案 (1)DEF (2)①cur=st[top]  ②f[st[j]] ③st[top]=i
15.(10分)王老師組織同學(xué)參加答題游戲,由“A”,“B”,“C”,“D”4個(gè)小組參與游戲,每個(gè)小組由k名學(xué)生組成,由1人代表小組答題。抽簽確定開始的小組,每一輪按A→B→C→D→A順序輪流作答,每答對(duì)一題加10分,每個(gè)選手答錯(cuò)一題即遭淘汰,由同組下一個(gè)選手補(bǔ)上,若該組所有選手都已淘汰則該組即遭淘汰,其他小組繼續(xù)輪流作答,直到剩下最后一組,即為獲勝小組,若最后一輪沒有小組幸存,則分?jǐn)?shù)最高的小組獲勝。
(1)若每組有兩個(gè)選手,從A組開始,經(jīng)過3輪答題,答題結(jié)果為“TFTF”,“FFFT”,“FTF”(答對(duì)用T表示,答錯(cuò)用F表示),則獲勝的小組是______。
(2)王老師用鏈表數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)了答題游戲的算法,并用 Python 編寫程序模擬,實(shí)現(xiàn)了輸入每組人數(shù),隨機(jī)產(chǎn)生開始的小組,輸入每輪答題的情況,輸出最后獲勝的隊(duì)伍。
該程序的 Python 代碼如下,請(qǐng)?jiān)趧澗€處填入合適的代碼,完善程序。
def findmax(score):
 #findmax 函數(shù)功能是在 4 個(gè)小組查找分?jǐn)?shù)最高的小組并輸出,代碼略
def printlist(head): #輸出當(dāng)前剩余小組的得分情況
   print(dlist[head][0],″組得分是″,score[dlist[head][0]])
   cur=①________
   while cur!=head:
print(dlist[cur][0],″組得分是″,score[dlist[cur][0]])
cur=dlist[cur][1]
k=int(input(″輸入每個(gè)組的人數(shù):″))
code=″ABCD″
dlist=[[code[i],i+1] for i in range(4) ] #初始化鏈表 dlist
dlist[3][1]=②________
head=randint(0,3) #隨機(jī)產(chǎn)生開始的小組
print(″從″,code[head],″開始答題″)
number={} #存儲(chǔ)每組剩余替補(bǔ)人數(shù)
score={} #存儲(chǔ)每組得分?jǐn)?shù)據(jù)
for i in dlist:
 number[i[0]]=k-1
 score[i[0]]=0
cur=head
pre=(head-1)%4
left=4
while left>1:
 ans=input(″輸入本輪答題情況″)
  for j in ans:
  if j==″T″:
    score[dlist[cur][0]]+=10
    pre=dlist[pre][1]
    cur=dlist[cur][1]
   else:
    if number[dlist[cur][0]]!=0:
#該組還有替補(bǔ)選手,則繼續(xù)參賽
     cur=dlist[cur][1]
     left-=1
   if left!=0:
print(″剩余小組得分情況″)
printlist(head)
if __④________:
 print(″最終獲勝的組是:″,dlist[head][0])
else:
  findmax(score)
答案 (1)C (2)①dlist[head][1] ②0
③dlist[pre][1]=dlist[cur][1] ④left==1
解析 (1) A組各輪次結(jié)果分別為TFF,B組為FF,C組為TFT,D組為FTF,因此獲勝的為C組。
(2)①鏈表 dlist數(shù)據(jù)區(qū)域值為組的名稱,指針為下一下組的索引,已經(jīng)輸出頭節(jié)點(diǎn)的信息,因此當(dāng)前節(jié)點(diǎn)cur的初值為頭節(jié)點(diǎn)的下一節(jié)點(diǎn)。②每一輪按A→B→C→D→A順序輪流作答,將要構(gòu)建一個(gè)循環(huán)鏈表,尾節(jié)點(diǎn)將指向第1個(gè)節(jié)點(diǎn)。③在鏈表中刪除當(dāng)前節(jié)點(diǎn)cur,將前驅(qū)指向當(dāng)前節(jié)點(diǎn)的后繼。④最后剩下一組,該組獲勝。

展開更多......

收起↑

資源列表

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 唐山市| 建平县| 台中市| 剑阁县| 凤山市| 壶关县| 远安县| 丘北县| 古浪县| 同心县| 乐都县| 南部县| 儋州市| 莱芜市| 泰兴市| 同德县| 丰都县| 西青区| 新安县| 宁南县| 宁晋县| 奉化市| 廉江市| 邯郸市| 延津县| 盐源县| 定日县| 合阳县| 新竹市| 新竹县| 忻城县| 河南省| 东明县| 濮阳市| 缙云县| 霍城县| 德钦县| 北京市| 灯塔市| 华安县| 宁乡县|