資源簡介 臺州市 2023屆高三第二次質量評估試題技術 2023.04考生須知:1.本卷滿分 100 分,考試時間 90 分鐘;2.答題前,在答題卷指定區域填寫班級、學號和姓名,考場號、座位號寫在指定位置;3.所有答案必須寫在答題紙上,寫在試卷上無效;4.考試結束后,只需上交答題紙。第一部分 信息技術(共 50分)一、選擇題(本大題共 12小題,每小題 2分,共 24分,每小題列出的四個備選項中只有一個是符合題目要求的,不選、錯選、多選均不得分)1.下列關于數據和信息的說法,正確的是A. 圖形符號不是數據 B. 模擬信號可以直接被計算機處理C. 信息一般會隨著時間的推移而變化 D. 人們對同一條信息的分析結果一定是相同的【答案】C【解析】本題考查數據與信息的相關知識。A選項圖形符號是數據的其中一種表現形式,故 A項錯誤;B選項模擬信號無法直接被計算機處理,需要進行模數轉換才能被計算機處理,故 B選項錯誤;D選項由于面對同一條信息,不同的人會有不同的理解,所謂“一千個讀者就有一千個哈姆雷特”所以分析的結果也可能不同,故 D選項錯誤;答案選 C。2.下列關于大數據的說法,不.正.確.的是A. 處理大數據時,一般采用分治思想 B. 社交網絡數據可采用圖計算進行處理C. 利用大數據,可以對天氣情況進行預測 D. 隨著時間的流逝,流數據價值一般會隨之提高【答案】D【解析】本題考查大數據和數據處理與應用的相關知識。流數據是指不間斷地、持續地到達的實時數據,隨著時間的流逝,流數據的價值也隨之降低。故 D選項錯誤。閱讀下列材料,回答第 3至 6題。學校建設了智能班牌信息系統,服務器配備 UPS不間斷電源,每個教室門口懸掛電子班牌,該班牌能展示班級文化、顯示課程表;能兼容一卡通系統,刷卡進行余額查詢、食堂訂餐;能進行無接觸測溫、人臉簽到;還可以進行家校聯系,家長可以在校外登錄該系統查看學生信息。電子班牌的部分參數如下表所示:存儲容量:2GB,可外接 SD 卡 USB 接口:內置 USB2.0 高速接口 2 個操作系統:Linux/安卓(Android) 網絡接口:10/100M 以太網,內置 wifi觸摸屏:16.5 英寸、分辨率 1360*768 識別:射頻卡識別<0.2 秒攝像頭:130 萬像素 音效:語音提示臺州市高三技術教學質量評估試題 第 1頁 共 14頁3.下列關于電子班牌的說法,不.正.確.的是A. 電子班牌屬于硬件設備 B. 該電子班牌不可外接存儲設備C. Linux和安卓都屬于系統軟件 D. 電子班牌使用了人工智能和 RFID 技術【答案】B【解析】本題考查硬件和軟件的相關知識。B選項表格中描述了“USB接口:內置 USB2.0高速接口 2個”說明該電子班牌是可以外接存儲設備的,很明顯錯誤故答案選 B。4.下列關于該信息系統的說法,正確的是A. 該系統由硬件、軟件、用戶和網絡組成B. 該系統的用戶就是全校所有學生C. 該信息系統不會感染計算機病毒D. 服務器配備 UPS 不間斷電源是因為信息系統對外部環境有依賴性【答案】D【解析】本題考查信息系統的相關知識。A選項信息系統組成包括硬件、軟件、用戶、通信網絡和數據,故 A選項錯誤;B選項該信息系統的用戶指的不僅僅是全校所有學生,還有該系統的管理員、數據庫管理員等一系列和該系統有關的人員,故 B選項錯誤;C選項任何信息系統在使用過程中都無法百分百的保證不感染計算機病毒,故 C選項錯誤。答案選 D。5.下列關于該信息系統數據的說法,正確的是A. 無接觸測溫功能利用傳感器采集溫度數據B. 電子班牌與外界只能通過 USB接口進行數據傳輸C. 電子班牌播出語音提示是模數轉換過程D. 定期備份服務器中的數據可以有效提升數據的保密性【答案】A【解析】本題考查信息系統的相關知識。B選項電子班牌還可以通過內置 wifi功能實現數據傳輸,故 B選項錯誤;C選項電子班牌播放語音的過程屬于數字信號到模擬信號轉換的過程,從而實現輸出信號。故 C選項錯誤;D選項中定期備份數據是為了保證數據的安全,保密性主要是通過對數據加密來實現,故 D選項錯誤;答案選 A。6.下列關于該信息系統中網絡的說法,不.正.確.的是A. 該系統不需要連接因特網B. 該系統可依靠網絡實現數據共享C. 電子班牌進行網絡通信需要遵循 TCP/IP協議D. 電子班牌可以通過有線或無線的方式連接到網絡【答案】A臺州市高三技術教學質量評估試題 第 2頁 共 14頁【解析】本題考查網絡相關的知識。A. 錯誤,該系統支持家長在校外登錄系統查看學生數據,說明該系統需要訪問英特網。B. 正確,同上C. 正確,網絡協議中最重要的協議是 TCP/IP 協議D. 正確,該班牌支持有線網和無線 wifi連接7.根據第 7題圖 a所示的凸透鏡成像規律,第 7題圖 b所示流程圖中①②③處應分別填入物距 u與焦成像結果距 f的關系u>2f 倒立 縮小u=2f 倒立 等大fu=f 不成像u第 7題圖 a第 7 題圖 bA.①stand="" B.①stand="倒立" C.①stand="" D.①stand="倒立"zoom="" zoom="放大" zoom="" zoom="放大"②stand="正立" ②stand="正立" ②zoom="放大" ②zoom="放大"③u>2f ③u<2f ③u>2f ③u<2f 【答案】B【解析】本題考查算法的表示流程圖相關知識。根據題意可知,③處 N的結果 zoom=‘縮小’,可以推出③處是 u<2f ,那么當 u<2f時,成像:倒立、放大,由此可以推出①處 stand=‘倒立’,zoom=‘放大’②處是 u<=f的情況,u=f不成像,那么②處就是 u知,②應該填寫 stand=‘正立’所選 B。8.如第 8題圖所示的二叉樹,根節點為 0,每個節點的左子節點為 0,右子節點為 1,每一條從根到葉子的路徑都組成一個二進制數。例如:從根到葉子 a 的路徑組成二進制數 011,轉換為十進制數是 3。若某完全二叉樹共有 13個節點,則它能表示的最大十進制數是A.3 B.4 C.5 D.6【答案】C【解析】第 8 題圖本題考查二叉樹相關知識。根據完全二叉樹的性質可知,該二叉樹共計 13 個節點。那么深度為 4,前三層有 7個節點,第 4 層有 6 個葉子節點,所以畫出二叉樹如下圖所示:臺州市高三技術教學質量評估試題 第 3頁 共 14頁最大十進制數是 0101B 5,所以選 C。9.下列關于單向鏈表的說法正確的是A. 必定有頭指針和尾指針B. 每個節點都有一個后繼節點C. 刪除一個節點,需要修改兩個指針D. 查找任一節點的算法時間復雜度為 O(n)【答案】D【解析】本題考查鏈表相關知識。A. 錯誤,單向鏈表必定有頭指針,尾指針不是必須的B. 錯誤,尾結點沒有后繼節點C. 錯誤,單項鏈表刪除一個節點,只需修改刪除節點的前驅節點的后繼指針即可D. 正確,鏈表的訪問比較低效,每次遍歷都需要從 head頭結點開始,故算法時間復雜度為 O(n)10.有如下 Python程序段:m = 2; lst = [7, 5, 4, 3, 1, 6, 3]for i in range(len(lst) - 1):for j in range(len(lst) - 1, i, -1):if lst[j] < lst[j - 1]:lst[j], lst[j - 1] = lst[j - 1], lst[j]if i >= m and lst[i] != lst[i - 1]:break執行該程序段,加框處語句被執行的次數是A.2 B.3 C.4 D.6【答案】C【解析一】本題考查冒泡排序算法知識。根據代碼可知,這是冒泡升序排序,方向是從后往前冒泡。但是由于加上了加框處的 if語句后,滿足條件 i >= m and lst[i] != lst[i - 1]后,排序過程將會終止。當 i=0 時,進行第一遍冒泡,結束后 lst=[1,7,5,4,3,3,6],然后執行了加框處代碼一次,但由于不滿足條件,因此繼續進行排序。第二輪排序,i=1,結束后,lst=[1,3,7,5,4,3,6],此時執行加框處代碼,不滿足條件,繼續下一輪排序。第三輪排序,i=2,結束后,lst=[1,3,3,7,5,4,6],執行加框處代碼后,由于 lst[2]==lst[1],因此繼續下一輪排序。第四輪排序后,i=3,lst=[1,3,3 ,4,7,5,6],第四次執行加框處代碼,此時條件滿足,執行 break后退出循環,排序結束。故本題選 C。【解析二】臺州市高三技術教學質量評估試題 第 4頁 共 14頁本題考查冒泡法排序。0 1 2 3 4 5 67 5 4 3 1 6 3i=0 1 7 5 4 3 3 6i=1 1 3 7 5 4 3 6i=2 1 3 3 7 5 4 6i=3 1 3 3 4 7 5 63 >=2 and lst[3]!=lst[2] = True ,執行 break 退出循環11.有如下 Python程序段:def fac(n):ans = 1for i in range(2, n + 1):ans *= ireturn ansdef Com(n, m):return fac(n) // fac(n - m) // fac(m)print(Com(5, 3))執行該程序段后,下列說法不.正.確.的是A.Com()函數運用了遞歸思想 B.fac()函數一共被調用了 3次C. 輸出結果是 10 D.將 Com(5,3)改為 Com(5,2),運行結果不變【答案】A【解析】本題考查遞歸算法及自定義函數知識。在使用遞歸算法解決問題時,應該滿足兩個條件:一是該問題能夠被遞歸公式描述;二是存在遞歸結束的邊界條件。觀察函數 Com()可知,該函數只是簡單調用另外一個函數 fac(),其本身并沒有結束的邊界條件,例如當 m==n時,能讓遞歸函數結束的語句,因此函數 Com()并不屬于遞歸思想。將其他條件代入模擬后可以發現,選項 BCD均正確,故選 A。12.列表 a和列表 b均有 5個從小到大排列的整數元素,且列表 a的最后一個元素大于列表 b的最后一個元素。有如下 Python程序段:i = 0; j = len(a) - 1; c = 0for key in b:while i <= j:m = (i + j) // 2; c += 1if key < a[m]:j = m - 1else:i = m + 1a = a[:i] + [key] + a[i:]i += 1; j = len(a) - 1執行該程序段后,c的值至少是A.5 B.6 C.10 D.20臺州市高三技術教學質量評估試題 第 5頁 共 14頁【答案】B【解析一】本題考查二分查找及插入算法的變形知識。本題屬于難題,由于列表 a、b都沒有具體的數據,因此無法直接模擬。分析代碼可知,外循環共進行 5輪,且列表 a的元素數量一直變大。而內循環中的二分查找,都是找到 key 值不退出的模式,必須直到 i>j為止才會結束。和普通的二分查找不同的是,本代碼中每次查找左邊界 i的值只能增加,不能減少。分析第一次二分查找,若想查找次數最少,則 key值應該介于列表 a的第三、四兩個數中間,這樣二分查找次數只需要 2次即可。然后將key插入 i的后面,然后更新 i和 j的值繼續下一次插入。根據分析,插入的 key 值繼續繼續保持在倒數第 3位,此時的查找次數只需要一次,后續也是如此。例如,a=[1,2,3,9,10],b=[4,5,6,7,8],這樣總共只需要 6次查找即可完成插入。故本題選 C。針對前面的列表 a和 b,模擬二分插入過程(以及變量 c的值變化)如下圖所示:總結:本程序段實現的功能是把列表 b中的元素逐個通過二分查找的方式實現有序插入到列表a的過程。【解析二】本題考查二分查找和數據的插入。變量 c表示查找次數列表 a從小到大插入列表 b分成三種情況(1)查找 2次,a[0]插入到 b[2]與 b[3]之間,那么插入 a[1]的查找范圍變成 b[3],b[4]a[1]插入到 b[3]之前,查找 1次, 那么插入 a[2]的查找范圍變成 b[3],b[4]a[2]插入到 b[3]之前,查找 1次, 那么插入 a[3]的查找范圍變成 b[3],b[4]a[3]插入到 b[3]之前,查找 1次, 那么插入 a[4]的查找范圍變成 b[3],b[4]a[4]插入到 b[3]之前,查找 1次,完成共查找了 6次(2)查找 2次,a[0]插入到 b[2]與 b[3]之間,那么插入 a[1]的查找范圍變成 b[3],b[4]a[1]插入到 b[4]之前,查找 2次, 那么插入 a[2]的查找范圍變成 b[4]a[2]插入到 b[4]之前,查找 1次, 那么插入 a[3]的查找范圍變成,b[4]a[3]插入到 b[4]之前,查找 1次, 那么插入 a[4]的查找范圍變成 b[4]a[4]插入到 b[4]之前,查找 1次,完成共查找了 7次(3)查找 3次,a[0]插入到 b[4]之前,那么插入 a[1]的查找范圍變成 b[4]a[1]插入到 b[4]之前,查找 1次, 那么插入 a[2]的查找范圍變成 b[4]a[2]插入到 b[4]之前,查找 1次, 那么插入 a[3]的查找范圍變成,b[4]a[3]插入到 b[4]之前,查找 1次, 那么插入 a[4]的查找范圍變成 b[4]a[4]插入到 b[4]之前,查找 1次,完成共查找了 7次臺州市高三技術教學質量評估試題 第 6頁 共 14頁二、非選擇題(本大題共 3 小題,其中第 13 小題 8 分,第 14 小題 9分,第 15 小題 9 分,共 26 分)13.學校搭建了井蓋安全實時監測系統,為井蓋安裝了智能終端、水平傳感器和 IoT物聯網模塊。各個井蓋的智能終端每隔 10秒鐘就會推送自身傾斜角度給服務器,管理人員可以在學校或家里通過瀏覽器查看監測信息。該系統結構示意圖如第 13題圖所示。第 13題圖請回答下列問題:(1)該系統網絡應用軟件的實現架構是 (單選,填字母:A.B/S架構 B.C/S 架構)。(2)Web服務器端程序采用 Flask Web框架開發,部分代碼如下。# 導入模塊,設置 IP地址和端口號,代碼略app = Flask(__name__)@app.route('/')def hello():# 從數據庫中查詢所有記錄到 data中,代碼略return render_template('view.html', data=data)@app.route("/input", methods=['GET'])def insert():sid = request.args.get('id') # 獲取傳感器編號svalue = float(request.args.get('angle')) # 獲取傳感器傾斜角度# 將傳感器編號、傾斜角度和當前時間存入數據庫,代碼略return redirect("/") # 跳轉到主頁if __name__ == '__main__':app.run(host=ip, port=port)該系統網站主頁被訪問時,執行的視圖函數名是 ;若傳感器的編號為 2,傾斜角度值為16.5,則提交數據到Web服務器的 URL為:http://192.168.1.106:8080/ (單選)。A. id=2&angle=16.5 B. input sid=2&svalue=16.5C. sid=2&svalue=16.5 D. input id=2&angle=16.5(3)學校警務室安裝了智能終端和警鈴,當有井蓋出現連續多次傾斜角度大于閾值,警務室的智能終端就會接收到打開警鈴報警的指令。則該指令最可能是由 (選填:服務器/客戶端/傳感器)發出。警鈴屬于第 13題圖中的 。(4)在系統正常運行一段時間后,發現不能查看其中一個井蓋的最新監測信息了。結合第 13 題圖,簡要說明系統中可能造成上述問題的原因____________(不考慮黑客或病毒的原因)。(注:回答 2項,1 項正確得 1分)【答案】(1) A (1 分)(2) hello 或 hello() (1 分)D (2 分)臺州市高三技術教學質量評估試題 第 7頁 共 14頁(3) 服務器 (1 分)執行器 (1 分)(4)該井蓋的智能終端、傳感器、IoT 模塊損壞或故障,或其他合理答案(注:回答 2 項,1 項正確得 1 分) (2 分)【解析】本題考察信息系統的相關知識。(1)從題目中的系統結構圖可知,該系統主要在Web服務器端架構系統。并且從第(2)題的題干中可以看到Web服務器使用了 Flask Web框架開發,因此可判斷該系統網絡應用軟件的實現架構是B/S架構。(2)①從@app.route("/")可以得知是主頁路由,該路由下的視圖函數即為主頁被訪問時的執行的視圖函數。另外可從程序段的倒數第三行中“return redirect("/") # 跳轉到主頁”可知主頁路由為@app.route("/")。因此主頁被訪問是,執行的視圖函數為 hello()。②傳感器獲取數據,將數據傳輸到相應路由中,根據題目中“@app.route("/input", methods=['GET'])”可知使用的是GET請求,通過URL傳輸數據。再根據該路由下 insert()視圖函數的“request.args.get('id')# 獲取傳感器編號”和“request.args.get('angle') # 獲取傳感器傾斜角度”可知 URL內的參數名稱為 id和 angle,因此選擇 D項。(3)該系統通過傳感器獲取井蓋傾斜角度的數據,發送至服務器,由服務器進行分析,若有異常情況,(服務器)就會發送相應的指令給執行器(警鈴)進行執行。由圖中可知此處兩空分別為“服務器”和“執行器”。(4)若無法從某.一.個.井.蓋.處監測到信息,則應該是該條“傳感器->智能終端->IoT模塊”線路出現問題,則可以填寫該井蓋的智能終端、傳感器、IoT模塊損壞或故障,或其他合理答案。14.高三年級的學生名單按班級順序存放在“student.csv”文件中,每班學生從 1開始連續編號,如第14題圖 a 所示。小明收集了某次直播講座的各班簽到文件(以班號為文件名,如第 14題圖 b所示是高三 1班的簽到文件“1.csv”中的內容,按簽到時間升序排列)。第 14題圖 a 第 14題圖 b 第 14題圖 c編寫 Python程序分析簽到數據,請回答下列問題:(1)編寫自定義函數 convert,功能為:轉換時間格式,如將“01:01:00”轉換為 3660。函數代碼如下,請在劃線處填入合適的代碼。def convert(s):t = int(s[:2]) * 3600 + +int(s[6:])return t臺州市高三技術教學質量評估試題 第 8頁 共 14頁(2)編寫自定義函數 cal,功能為:返回某班簽到學生編號列表和遲到人數,多次簽到的以最早時間為準。函數代碼如下,請在劃線處填入合適的代碼。def cal(i, late_time): # 參數 i為班號,late_time為直播開始時間df = pd.read_csv(str(i) + '.csv')arr = []late = 0for j in df.index:if df['id'][j] not in arr:arr.append(df['id'][j])if convert( ) > convert(late_time):late += 1return arr, late # 依次返回簽到學生編號列表和遲到人數(3)主程序。統計所有班級準時、遲到和缺席人數,輸出結果如第 14題圖 c所示。程序代碼如下。import pandas as pddf = pd.read_csv('student.csv')tot = df.groupby('班級').編號. max()late_time = input('請輸入直播開始時間:')d = [0] * 3 # 存儲準時人數、遲到人數和缺席人數for i in range(1, 9):arr, late = cal(i, late_time)d[0] +=d[1] += lated[2] += tot[i - 1] - len(arr)# 輸出該班級的遲到人數和缺席人數,代碼略劃線處應填入的代碼是 ① ;若將加框處代碼更改為 ② ,程序的運行結果不變。(②處選填:sum()/mean()/count()/min())(4)繪制餅圖展示全年級的簽到人數比例,如第 14題圖 d所示,程序代碼如下。import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']plt.pie(d, labels=['準時', '遲到', '缺席'])plt.title('簽到人數比例')plt.show()下列說法正確的是 (多選)。A. 缺席人數比遲到人數多B. 該圖能增強數據的解釋力和吸引力C. 生成該餅圖的數據來源于列表 labels 第 14 題圖 dD. 餅圖和環形圖都適合展現這類比例關系的數據【答案】(1) int(s[3:5])*60 (2 分)(2) df['time'][j] 或 df.at[j,'time'] (2 分)臺州市高三技術教學質量評估試題 第 9頁 共 14頁(3) ①len(arr)-late (2 分)②count() (1 分)(4) BD (2 分)【解析】本題考查 pandas模塊及數據處理相關知識。(1) 從 t = int(s[:2]) * 3600 + +int(s[6:])可以看出,劃線部分是取出分鐘對應的字符串,并計算。代碼:int(s[3:5])*60(2) 根據 late+=1,這里是統計遲到人數。要獲取每個學生的簽到時間,再根據 arr.append(df['id'][j]),這里對應代碼:df['time'][j],如果熟悉 pandas模塊,df.at[j,'time']也能達到相應要求。(3) ①根據上面的注釋,d[0]存儲準時人數,計算公式=參與人數-遲到人數。代碼:len(arr)-late;②max()獲取到的是最大學號,也就是班級人數。通過計數的方式也是可以的,對應的是:count()從圖上看,遲到的人數比缺席的人數多;圖能增強數據的解釋力和吸引力,正確;根據語句 plt.pie(d,labels=['準時', '遲到', '缺席']),labels只是標簽,數據來源于列表 d;餅圖和環形圖類似,都適合展現這類比例關系的數據,正確。正確選項 BD15.一批集裝箱陸續送達碼頭,要求疊放到指定的若干位置,每個位置最多可疊放 5個集裝箱,且輕的在上,重的在下。工作人員根據每個送達的集裝箱的重量,利用臨時位置經過最少的移動次數放到合適的位置,若移動次數相同,優先選擇編號小的位置(臨時位置不考慮集裝箱重量大小關系)。例如:共有 8個集裝箱,要求疊放到 2個位置。已依次送達 6號、2號、3號、5號,疊放情況如第 15題圖 a所示。第 15題圖 a新送達的集裝箱為 7號,重量為 28。 若疊放到位置 0,需要移動 3次:①2號 臨時位置 ②7號 位置 0 ③2號 位置 0 若疊放到位置 1,需要移動 5次:①5號 臨時位置 ②3號 臨時位置 ③7號 位置 1 ④3號 位置 1 ⑤5號 位置 1疊放到位置 0的移動次數 < 疊放到位置 1的移動次數,所以疊放到位置 0。編寫 Python程序實現上述功能,請回答下列問題:(1)函數 judge(x, st)的功能是:返回 x號集裝箱放入某位置時需移動的次數。列表 st存儲了該位置從下到上已疊放的集裝箱編號。請在劃線處填入合適的代碼。# goods存儲了已送達集裝箱的信息,如:{6:29,2:18,3:20,5:19}。def judge(x, st):if len(st) == 5:return -1cnt = 0i = len(st) - 1while i >= 0 and :cnt += 1臺州市高三技術教學質量評估試題 第 10頁 共 14頁i -= 1return cnt * 2 + 1(2)當某個集裝箱送達時,輸入其編號和重量,將該集裝箱放到移動次數最少的位置,并輸出移動過程。程序執行結果的部分截圖如第 15題圖 b所示。請在劃線處填入合適的代碼。goods = {}n = 8k = (n - 1) // 5 + 1p = [[] for i in range(k)]for i in range(n):# 輸出當前集裝箱疊放情況,代碼略x = int(input('請輸入到達的集裝箱編號:'))weight = int(input('請輸入到達的集裝箱重量:'))goods[x] = weight第 15 題圖 bmin_steps = 999for j in range(k):t = judge(x, p[j])if ① :minp = jmin_steps = tprint('移動過程為:')tmp = []for j in range( ② ):print(p[minp][-1], '-> 臨時位置')tmp.append(p[minp].pop()) # 刪除 p[minp]的最后一個元素,并追加到 tmpp[minp].append(x)print(x, '->', '位置' + str(minp))while ③ :print(tmp[-1], '->', '位置' + str(minp))p[minp].append(tmp.pop())# 輸出疊放結果,代碼略(3)若送達的集裝箱編號和重量依次為 4:20,2:18,1:23,3:20,7:28,6:29,0:17,5:19,根據要求疊放到位置 0和位置 1,則位置 1從下往上疊放的集裝箱編號依次為 。【答案】(1)goods[x]>goods[st[i]] (2 分)(2) ①t!=-1 and t②min_steps//2 或 judge(x,p[minp])//2 (2 分)③len(tmp)>0 或 tmp (2 分)(3)6,1,3,5 (1 分)【解析一】本題考察有序棧的維護,即要求插入元素后,維護棧底到棧頂的降序。臺州市高三技術教學質量評估試題 第 11頁 共 14頁第(1)小題設計 judge函數,計算將 goods[x]插入到棧 st中時,需要移動元素的操作次數。這要注意judge的參數 x是“集裝箱編號”,即字典 goods的鍵,因此在訪問棧頂元素時 goods[st[i]]與 goods[x]比較為非直接與 x比較。答案 goods[st[i]] < goods[x]。第(2)小題從 k個位置(有序棧)中選擇移動次數最少的棧插入元素。第①空中,變量獲取當前棧 p[j]插入編號為 x的元素所需的移動次數與全局最小次數 min_steps比較并更新 min_steps。此時要考慮特殊情況:棧 p[j]已滿,即 t == -1 時無法插入。此時雖然 t < min_steps,但不能執行更新操作。答案 t < min_steps and t != -1。第②空部分代碼的功能是輸出移動的過程,先將棧 p[minp]大于 goods[x]的元素暫存到臨時棧中,這里需出棧的元素個數恰為 min_steps // 2,因此第②空的答案為 min_steps// 2或其他等價答案。第③空部分代碼將臨時棧中的全部元素重新壓入棧 p[minp]中,因此 len(tmp) >0時均需要執行入棧。第(3)小題數據量不大,可以直接模擬,編號 4、2依次在位置 0入棧;3、7依次在位置 1入棧;隨后 7插入到位置 0的棧底、6插入到位置 1棧底;最后 0入棧位置 0,5入棧位置 1。答案位置 1中從下到上的編號依次為:6 1 3 5。【解析二】(1)函數 judge(x, st)的功能是:返回 x號集裝箱放入某位置時需移動的次數。列表 st存儲了該位置從下到上已疊放的集裝箱編號。請在劃線處填入合適的代碼。# goods存儲了已送達集裝箱的信息,如:{6:29,2:18,3:20,5:19}。def judge(x, st):if len(st) == 5:return -1cnt = 0i = len(st) - 1while i >= 0 and :cnt += 1i -= 1return cnt * 2 + 1答案:goods[x]>goods[st[i]]解析:# goods存儲了已送達集裝箱的信息,如:{6:29,2:18,3:20,5:19}。def judge(x, st):if len(st) == 5: #若形參 st 位置集裝箱數量已經等于 5 ,該位置已滿return -1 #因此返回-1cnt = 0 #cnt變量存儲在 x號集裝箱加入前,需要移開 st位置上的集裝箱的數量(也等于移動次數)i = len(st) - 1 #i作為索引定位在 st列表的最后一個位置,即最上面(st內重量最小)的集裝箱#自右向左遍歷 st列表(即從上到下遍歷 st位置)while i >= 0 and goods[x]>goods[st[i]] : #x號集裝箱重量從 goods 字典里獲取 goods[x]。st[i]獲取集裝箱編號,goods[st[i]]獲取對應的重量。若 i索引指向的 st內的集裝箱重量比 x號小,意味著需要移動 i索引指向的集裝箱至臨時位置。cnt += 1 #移動次數+1i -= 1 #向左實現遍歷臺州市高三技術教學質量評估試題 第 12頁 共 14頁return cnt * 2 + 1 #考慮到將 cnt個集裝箱移至臨時位置后有需要再移回 st位置,因此移動次數 cnt*2,且 x加入 st位置,因此需要將移動次數+1(2)當某個集裝箱送達時,輸入其編號和重量,將該集裝箱放到移動次數最少的位置,并輸出移動過程。程序執行結果的部分截圖如第 15題圖 b所示。請在劃線處填入合適的代碼。goods = {}n = 8k = (n - 1) // 5 + 1p = [[] for i in range(k)]for i in range(n):# 輸出當前集裝箱疊放情況,代碼略x = int(input('請輸入到達的集裝箱編號:'))weight = int(input('請輸入到達的集裝箱重量:'))goods[x] = weight第 15 題圖 bmin_steps = 999for j in range(k):t = judge(x, p[j])if ① :minp = jmin_steps = tprint('移動過程為:')tmp = []for j in range( ② ):print(p[minp][-1], '-> 臨時位置')tmp.append(p[minp].pop()) # 刪除 p[minp]的最后一個元素,并追加到 tmpp[minp].append(x)print(x, '->', '位置' + str(minp))while ③ :print(tmp[-1], '->', '位置' + str(minp))p[minp].append(tmp.pop())# 輸出疊放結果,代碼略goods = {} #goods字典存儲集裝箱編號和n = 8 #集裝箱總量k = (n - 1) // 5 + 1 #n個集裝箱,預留 k個位置p = [[] for i in range(k)] #p內存儲 k個位置集裝箱存儲情況,預設為空for i in range(n):# 輸出當前集裝箱疊放情況,代碼略x = int(input('請輸入到達的集裝箱編號:'))weight = int(input('請輸入到達的集裝箱重量:'))臺州市高三技術教學質量評估試題 第 13頁 共 14頁goods[x] = weightmin_steps = 999 #預設最少移動步數 min_stepsfor j in range(k): #j作為循環變量遍歷 k個位置t = judge(x, p[j]) #t存儲利用 judge函數判斷剛到達 x號集裝箱放入 p[j]位置需移動的步數if t!=-1 and tmin_steps 。p[j]位置位置未滿可以用 t!=-1 或 len(p[j])<5 來表示minp = j #minp 存儲放入集裝箱的 p[j]位置 ,循環結束后 p[minp]即加入的位置min_steps = tprint('移動過程為:')tmp = [] #存儲臨時位置的集裝箱數據for j in range( ②min_steps//2 或 judge(x,p[minp])//2 ): #根據循環結構以及循環結束的“ p[minp].append(x)”判斷得出,該循環實現的功能是將插入位置 p[minp]處比 x 號集裝箱重量小的集裝箱移至臨時位置,因此循環的次數因為移動步數的一半,一位另外一半是將移出的集裝箱放回去。該空填寫要注意 range 函數的終值取不到的特征,以及起始值。只要保證循環次數是移動步數的一半就行。print(p[minp][-1], '-> 臨時位置') #,從 p[minp]列表的最右邊一位開始移動(即最上面一個集裝箱)tmp.append(p[minp].pop()) # 刪除 p[minp]的最后一個元素,并追加到 tmpp[minp].append(x)#將集裝箱 x加入 p[minp]位置print(x, '->', '位置' + str(minp))while ③tmp 或 len(tmp)>0 :#該循環是要將移出至 tmp的集裝箱移回 p[minp]位置,根據“tmp.pop()”語句,tmp 變量隨著循環進行長度會減少,若變空即全部放回,則循環結束。print(tmp[-1], '->', '位置' + str(minp))p[minp].append(tmp.pop())# 輸出疊放結果,代碼略(3)若送達的集裝箱編號和重量依次為 4:20,2:18,1:23,3:20,7:28,6:29,0:17,5:19,根據要求疊放到位置 0和位置 1,則位置 1從下往上疊放的集裝箱編號依次為 。4:20 2:18 1:23 3:20 7:28 6:29 0:17 5:19位置0和1 都 位置 1 位置 1 位置 0 和 1 位置 0 移動 7 位置 0 和 1 位置 0和 1 都無需移動,取 無需移 無 需 都移動 5步, 步,位置 1移動 都無需移動, 無需移動,取位置小的 動 移動 取位置小的 5步 取位置小的 位置小的位置 0 4 2 4,2 7,4,2 7,4,2,0位置 1 1 1,3 6,1,3臺州市高三技術教學質量評估試題 第 14頁 共 14頁 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫