2023年2月浙南名校联盟第二次联考高三信息技术卷解析

文档属性

名称 2023年2月浙南名校联盟第二次联考高三信息技术卷解析
格式 zip
文件大小 616.1KB
资源类型 教案
版本资源 浙教版(2019)
科目 信息技术(信息科技)
更新时间 2023-02-27 14:28:16

图片预览

文档简介

绝密★考试结束前
2022学年第二学期浙南名校联盟第二次联考
高三技术学科
考生须知:
1.本试题卷分选择题和非选择题两部分,共 6页,满分 50分,考试时间 90分钟。
2.答题前,在答题卷指定区域填写班级、姓名、考场号、座位号及准考证号。
3.所有答案必须写在答题卷上,写在试卷上无效。
4.考试结束后,只需上交答题卷。
第一部分 信息技术
一、选择题(本大题共 12 小题,每小题 2 分,共 24 分,每小题列出的四个备选项中只有一个是符
合题目要求的,不选、错选、多选均不得分)
1.下列关于数据和信息的说法,正确的是( )
A.数字就是数据,是数据唯一的表现形式 B.信息会因为被别人获取而发生损耗
C.计算机中数据一般以文件的形式存储 D.大数据给生活带来便利的同时不会带来社会问题
【答案】C
【解析】
本题考查数据和信息。
A错误,数字是数据的一种形式,数据的表现形式还有图像、音视频等
B错误,信息具有共享性,在任何阶段都不会发生损耗
C正确。计算中数据以文件的形式存储
D错误,大数据具有双面性,带来收益的同时也带来一些社会问题,比如失业
2.下列关于人工智能的说法,不.正.确.的是( )
A.人工智能是指以机器为载体,模仿、延伸和扩展人类智能
B.行为主义通过模仿人类大脑中神经元之间的复杂交互来进行认知推理
C.AlphaGo 从围棋人工智能跨界到电力控制领域属于跨领域人工智能
D.人工智能技术在推动人类社会进步的同时,也可能威胁人类安全
【答案】B
【解析】
本题考查人工智能。
联结主义通过模仿人类大脑中神经元之间的复杂交互来进行认知推理,故 B错误。
阅读下列材料,回答第 3至 4题
校园一卡通以智能卡为信息载体,在一张小小的智能卡上实现生活消费、学籍管理、身份认证、网上交费等多
种功能。校园一卡通系统使全校所有师生员工每人仅需一张校园卡,便可在学校各处出入、办事、活动和消费;此
外还可以通过银行转账等方式进行自助充值,实现了“一卡在手,走遍校园”。
3.关于此信息系统说法正确的是( )
A.校园卡一卡通系统的用户只是学校的师生
B.学生使用校园一卡通在学校超市消费的记录存储在卡内
C.该信息系统是由硬件、用户、通信网络、数据构成的人机交互系统
D.家长可通过手机银行为学生卡内充值,说明信息系统具有数据传输功能
【答案】D
高三技术学科 试题 第 1 页 共 12 页
【解析】
本题考查信息系统基础。
A错误,该系统的用户不仅包括学校师生,还包括开发人员和维护人员;B错误,消费的记录也属于数据,保存在服
务器的数据库上;C错误,该信息系统是由硬件、软件、用户、通信网络和数据构成的人机交互系统;D正确。
4.校园一卡通系统的核心技术是 RFID。以下说法不.正.确.的是( )
A.RFID 属于通信技术,也属于传感器技术 B.RFID 两大基本元素,其中读写器是发射端
C.校园卡按能量供给方式分类,为无源电子标签 D.RFID应用领域日益扩大,成为信息社会建设的一项基础技术
【答案】B
【解析】
本题考查传感与控制
读写器是接收端,电子标签是发射端,故 B错误。
5、以下行为符合信息安全要求的是( )
A. 扫描二维码填写信息领取优惠券 B. 在云盘谨慎存储个人重要资料或隐私信息
C. 经常在公共场所“蹭网” D. 安装杀毒软件后不需要再更新
【答案】B
【解析】
本题考查信息安全。
A错误,要提高安全意识,不随意扫描二维码,防止信息泄露和保护信息安全
B正确,信息具有共享性,在任何阶段都不会发生损耗
C错误,公网本身也存在安全隐患,‘蹭网’有可能造成信息泄露
D错误,杀毒软件带有滞后性,需要经常更新和杀毒
6、下列有关网络相关内容的说法,不.正.确.的是( )
A.计算机网络、移动通信网络、广播电视网络现已成为覆盖面广、影响力大的三大网络
B.网络互联设备,主要包括调制解调器、路由器和交换机等等
C.网络中的资源就是指网络中的所有数据资源
D.计算机网络按照网络的覆盖和范围,校园网一般可以称之为局域网
【答案】C
【解析】
本题考查计算机网络的相关知识。
网络中的资源是指网络中所有的软件、硬件和数据资源,所以 C错误。
7、某算法的部分流程图如图所示,执行这部分流程,若输入 n的值
为 20,则输出 a、b的值分别是( )
A. 12,10 B. 10,9
C. 9,15 D. 9,10
【答案】D
【解析】
第 7题图
本题考查流程图的阅读理解。
初始值 第一次 第二次 第三次 第四次 第五次
高三技术学科 试题 第 2 页 共 12 页
a 0 3 6 9
b 0 5 10
n 20 17 12 9 4 1
8、有二叉树的前序遍历序列为 A-B-C-E-F-G-D,中序遍历序列为 A-E-C-F-G-B-D,则关于该二叉树的说法正确的
是( )
A. 该二叉树根节点的度为 1 B. 该二叉树的高度为 4
C. 该二叉树中节点 G是节点 C的左孩子 D. 该二叉树中叶子节点的个数为 4
【答案】D
【解析】
本题考查二叉树的相关知识。
根据二叉树的前序遍历和中序遍历画出二叉树
该二叉树的根节点 A的度为 1,所以 A选项正确;该二叉树的高度为 5,B选项错误;该二叉树
的节点 G是节点 F的右孩子,C选项错误;该二叉树的叶子节点是 E、G、D,所以 D选项错误。
9.假设队列的空间足够,队首指针 head 和队尾指针 tail 经过“出队、入队、出队、出队、入队、入队、出队”这
一系列操作后,head=7,tail=9。则操作前的 head和 tail的值分别为( )
A.11 12 B.2 5 C.3 6 D.3 5
【答案】C
【解析】
本题考查队列的相关知识。
根据题意经过 3次入队后队尾指针 tail=9,因此在 3次入队前 tail应为 6,在经过 4次出队后队首指针 head=7,因此在 4
次出队前 head应为 3,正确选项是 C。
10.一个手机上的趣味小游戏,有 3 个杯子里装了一些有颜色的液体(如图所示),现在希望通过相互倒水实现将杯
子 stC 装满红色液体,现编写代码如下:
stA,stB,stC=['灰','红','蓝'],['红','灰',''],['红','','']
tops=[2,1,0]
第 10题图
①tops[2]+=1 ②tops[0]+=1 ③tops[1]+=1
stC[tops[2]]=stB[tops[1]] stA[tops[0]]=stB[tops[1]] stB[tops[1]]=stA[tops[0]]
tops[1]-=1 tops[1]-=1 tops[0]-=1
④stA[tops[0]]=stB[tops[1]] ⑤tops[2]+=1
tops[1]-=1 stC[tops[2]]=stA[tops[0]]
在空白处填入哪一种方案,可以将 stC 杯子中装满红色液体( )
A. ③⑤①②④ B.③⑤④②① C. ③⑤④①② D.③②①⑤④
【答案】B
【解析】
考查队列的相关操作。
分析三个杯子里的液体分布情况,要将 stC装满红色液体,操作的步骤如下:
1.将 stA蓝色液体倒入 stB 2.将 stA红色液体倒入 stC 3.将 stB蓝色液体倒入 stA
4.将 stB灰色液体倒入 stA 5.将 stB红色液体倒入 stC
高三技术学科 试题 第 3 页 共 12 页
对应的操作顺序是:④⑤①②③ 选 B
具体做题时,4个选项前面相同的较多,但最后一个均不相同。而操作的最后一步是将 B栈的液体倒入 C栈,只有
①是这个操作,可以快速找到正确答案。
11.阅读以下程序:
def f(x):
if x>5 or x<1:
return '无法计算'
elif x==5:
return 1
else:
return (f(x+1)+1)*2
若输入的 x为 2,则函数返回值为( )
A.22 B.10 C. 11 D.'无法计算'
【答案】A
【解析】
考查对递归相关代码的分析理解。
f(2)=(f(3)+1)*2=11*2=22 选 A
f(3)=(f(4)+1)*2=5*2=10
f(4)=(f(5)+1)*2=2*2=4
f(5)=1
本题是经典题目猴子吃桃的递归版本,其迭代版本,变量的迭代规律是 x=(x+1)*2。
12.流浪地球 2演员表 lnk是一个链表,如果希望对 lnk内部进行修改,分别形成男女演员的链表,并进行输出(如
第 12题图所示),代码如下:
lnk=[['吴京','男',1],['刘德华','男',3],['郭凡','男',4],['朱颜曼滋','女',2],['李雪健','男
',6],['王智','女',8],['佟丽娅','女',7],['沙溢','男',5],['宁理','男',-1]]
p=q=headA=0 #headA为男演员链表头指针
r=headB=3 #headB为女演员链表头指针
while p!=-1:
if lnk[p][1]=='男':
q=p
p=lnk[p][2] 第 12题图
elif headB!=p:
_______________
_______________
lnk[q][2]=lnk[p][2]
_______________
_______________
else:
lnk[q][2]=lnk[p][2]
p=lnk[p][2]
# 使用 headA,headB分别作为男性演员、女性演员链表头指针,遍历输出 lnk,代码略
请选择合适的代码填空,完成要求( )
①p=lnk[p][2] ②lnk[r][2]=-1 ③lnk[r][2]=p ④r=lnk[r][2]
A.③④ ①② B.④③ ①② C.③④ ②① D.③① ④②
高三技术学科 试题 第 4 页 共 12 页
【答案】A
【解析】
考查链表操作的相关代码。
本题是要将 1个单向链表,根据数据域的内容(男、女)分成男、女 2个独立的单向链表。
具体算法:遍历原链表,将找到的女演员节点依次链接形成一个单独的链表,同时将女演员节点从原链表删除。操
作完成后,原链表就是一个只有男演员的单向链表。分析分支语句的相应条件,要补充完善部分代码的分支满足的
条件是:链表指针 p所指向的节点,数据域内容为女且不是女演员链表的头节点。分析 q、r,链表指针 q指向 p的
前驱节点,节点数据为男演员。链表指针 r指向女演员链表的尾节点。操作原则:为了防止断链,将节点从原链表删
除前,先要链接到女演员链表尾节点。根据以上分析,可以依次确定:代码③,修改 r节点的指针域,指向 p节点。
一定是给出的代码中最先执行的。排除选项 B;p指针后移的代码①必定在已有的代码:lnk[q][2]=lnk[p][2](将 p指
向的节点从原链表删除)之后。排除选项 D;r指针向后移动代码必定在②之前,执行④操作后,r、p指向同一节点;
由于 r、p指向同一节点,必须先①后②。正确选项 A。链表代码,其实并不唯一。本题顺序也可以是③①④②。
二、非选择题(本大题共 4 小题,其中第 13 小题 8 分,第 14 题 9 分,第 15 题 9分,共 26 分)
13.某“图书借阅管理系统”服务器端程序采用 Flask Web 框架编写,服务器的 IP 地址为 192.168.1.10,端口号为
5000。该系统网站的页面规划如下所示:
访问地址 功能说明
/ 主页
/login 子页面,身份验证
/borrow 子页面,图书借阅
(1)将系统分成若干个模块,每个模块完成特定的功能,这属于搭建信息系统前期准备中的________阶段(单选,
填字母): A. 需求分析 B. 开发模式的选择 C. 概要设计 D.详细设计
(2)从浏览器访问该系统主页面,需要输入的 URL是___________________。
(3)实现上述功能的服务器端部分代码如下。请在划线处填入合适的代码。
from flask import Flask, render_ template, request, redirect
import sqlite3
app=Flask(__name__)
@app.route("/")
def index():
return render_template(“login.html”)
@app.route(" ① ",methods=["GET","POST"])
def login():
user=request.form.get("user")
password=request.form.get("psd")
if ② :
return render_template("ok.html",name=user)
else:
return "用户名或密码错误!"
def check(name,psd):
db= sqlite3.connect("login.db")
cur=db.cursor()
cur.execute("select * from users")
data=cur.fetchall()
cur.close()
db.close()
flag=False
高三技术学科 试题 第 5 页 共 12 页
for rec in data: #存储用户信息的 users 表中共 3个字段,依次为序号、用户名和密码,图 a
if ③ :
flag=True
break
return flag
@app.route("/borrow")
def borrow(): 第 13题图 a
#代码略
if __name__=="__main__":
app.run()
【答案】(1)C (1分)
(2)http://192.168.1.10:5000 (1分)
(3) ① /login (2分)
② check(user,password) (2分)
③ rec[1]==name and rec[2]==psd (2分)
【解析】
本题考查网络搭建及 flask相关知识。
(1)概要设计包括模块结构设计,系统物理配置和数据库管理系统选择。因此模块设计属于概要设计,选 C
(2)题干可知,“服务器的 IP地址为 192.168.1.10,端口号为 5000”,故访问时的主页 URL为:http://192.168.1.10:5000
(3)观察代码,①空处理身份验证问题,由表格可知,身份验证子页面访问路径为:/login,故填:/login
②处条件判断用户名及密码是否填写正确,自定义函数 check第 1个参数 name应为用户名,第 2个参数为密码,代
入实参,填:check(user,password)
③通过数据库查询语句查到的结果赋值给 data,data是一种二维元组,格式如[(1,”visit”,”111”),(2,”admin”,”123”)],
访问的方法与二维列表相同。结合图 a,循环遍历每个元素,姓名和密码索引为 1,2,填:rec[1]==name and rec[2]==psd
14.学校气象站的小江同学收集了本地 2022年全年的天气数据,数据按日期顺序存储在“tqsj.xlsx”文件中,部分
数据如第 14题图 a所示。
第 14题图 a
为分析全年各月份天气情况,编写 Python 程序,请回答下列问题:
(1)计算 2022 年每天的温差(最高气温℃-最低气温℃),找出最大温差,如有相同温差,输出所有符合要求的日
期,输出结果如第 14题图 b所示。程序代码如下,请在划线①②处填入相应的代码。
第 14题图 b
import pandas as pd
高三技术学科 试题 第 6 页 共 12 页
df=pd.read_excel("tqsj.xlsx")
df["温差"]= ①
df_wch=df.sort_values("温差",ascending=False,ignore_index=True)
max=df_wch.at[0,"温差"]
rq=[]
for i in df_wch.index:
if df_wch.at[i,"温差"]==max:
rq.append( ② )
print("最大温差:",max,"℃")
print("日期:",rq)
(2)统计各月平均温差并绘制线形图,部分 Python程序如下,请在划线处填入合适的代码。
avewch =[0]*12
mdays =[31,28,31,30,31,30,31,31,30,31,30,31] #2022 年每月天数
begin=0
for m in range(12):
total=0
for d in range(begin, ③ ):
total+=df.at[d,"温差"]
avewch[m]= ④
begin+=mdays[m]
x=[i+1 for i in range(12)]
y=avewch
plt.plot(x,y,label="平均温差")
#设置绘图参数,显示如第 14 题图 c所示,代码略
第 14题图 c
(3)由第 14题图 c可知,2022年平均温差最大的是______月。
【答案】
(1)①df["最高气温℃"]-df["最低气温℃"] (2分)
②df_wch.at[i,"日期"] 或 df_wch["日期"][i] (2分)
(2)③begin+mdays[m] (2分)
④total/mdays[m] (2分)
高三技术学科 试题 第 7 页 共 12 页
(3)8 (1分)
【解析】
该题主要考查使用 Python及 pandas模块分析数据及数据可视化。
(1) ①计算最大温差,温差=最高气温℃ - 最低气温℃ ,即 df["最高气温℃"]-df["最低气温℃"] ;
②查找温差等于最大温差 max的数据,并将对应日期添加到列表 rq中,df_wch.at[i,"日期"]或 df_wch["日期"][i] ;
(2) ③每月数据结束位置与该月天数相关,第 m月份起始数据位置为 begin,则结束数据对应位置为起始位置加上 m
月的天数,即为 begin+mdays[m];
④ m月平均温差为总计温差 total除以当月天数,确定答案为 total/mdays[m];
(3)由第 14题图 c可分析出 8月份的平均温差最大,确定答案为 8 。
15.甲乙丙 3位同学合作完成一个流浪地球模型,该模型需要使用多个零部件,每个零部件所需要加工的时间不一,
三位同学同时开始加工,当某位同学完成一个零件的加工时,就会对下一个零件进行加工(每.个.零.件.同.时.间.内.只.能.由.
一.位.同.学.加.工.),如此往复,直到所有的零件完成加工。
(1)按题干所述,若有 9个零件需要加工, 他们的所需的加.工.顺.序.及.加.工.时.间.为 [8,6,6,9,10,5,4,7,8],则完成
所有零件加工的时长为______________分钟。
(2)一个零件的加工包含划线、锯割和锉削 3个步骤(一.个.零.部.件.必.须.依.次.进.行.划.线.、.锯.割.和.锉.削.;.每.个.步.骤.一.旦.开.
始.就.不.会.中.断.直.至.完.成.,.步.骤.之.间.可.以.有.中.断.),零部件[1,2,5]代表需要划线 1分钟,锯割 2分钟,锉削 5分钟,
总耗时 8分钟——即小题(1)的第一个零部件。现提供所有零部件的具体划线、锯割和锉削所需的时间:
[[1,2,5],[2,1,3],[1,2,3],[1,5,3],[1,2,7],[1,1,3],[1,1,2],[2,1,4],[1,2,5]]
甲乙丙觉得如果将锉削时间短的零部件安排在靠后加工,对于减少加工时间有所帮助。对上述数据进行排序,以下
符合排序要求的代码为__________(多选,选错不给分,漏选给 1分,全选对 2分):
A. def sort(d): B. def sort(d):
for i in range(1,len(d)): for i in range(1,len(d)):
for j in range(0,len(d)-i): for j in range(i-1,len(d)-1,-1):
if d[j+1][2]>d[j][2]: if d[j+1][2]>d[j][2]:
d[j],d[j+1]=d[j+1],d[j] d[j],d[j+1]=d[j+1],d[j]
return d return d
C. def sort(d): D. def sort(d):
for i in range(1,len(d)): for i in range(1,len(d)):
for j in range(len(d)-1,i-1,-1): for j in range(1,len(d)-i):
if d[j-1][2]d[j-1],d[j]=d[j],d[j-1] d[j-1],d[j]=d[j],d[j-1]
return d return d
(3)根据小题(2)的描述,计算加工总时间,请在划线处填上合适的代码。
sj=[[1,2,5],[2,1,3],[1,2,3],[1,5,3],[1,2,7],[1,1,3],[1,1,2],[2,1,4],[1,2,5]]
sj=sort(sj)
n=len(sj)
flag=[0]*n
totaltime=0
m=3 #甲乙丙 3位同学
heads,tails=[0]*m,[0]*m
que=[[0 for i in range(n*3)] for j in range(m)] #生成二维数组
i=0
for j in range(m):
que[j][tails[j]]=sj[i][0]
高三技术学科 试题 第 8 页 共 12 页
tails[j]+=1
flag[j]+=1
______①_______
while sum(flag)<3*n: #sum函数可以求出 flag列表中所有数字之和
tmin=que[0][heads[0]]
for j in range(1,m):
if que[j][heads[j]]tmin=que[j][heads[j]]
for j in range(m):
que[j][heads[j]]-=tmin
if que[j][heads[j]]==0 and _______②_______:
_______________③____________
tails[j]+=1
heads[j]+=1
flag[i]+=1
i=(i+1)%n
totaltime+=tmin
tmax=max([que[i][heads[i]] for i in range(m)])
totaltime+=tmax
print('加工时长为:',totaltime)
【答案】
(1)24 (1 分)
(2)AC (2 分)
(3) ①i+=1 或 i=(i+1)%n (2 分)
②sum(flag)<3*n 或 sum(flag)<=3*n-1 (2 分)
③que[j][tails[j]]=sj[i][flag[i]] 或 que[j][tails[j]]=sj[i][sum(flag)//n] (2 分)
【解析一】
本题考查队列和冒泡排序。
(1)根据题意,每位同学完成当前整个零件的加工后再开始下一个零件的加工,过程如下:
甲 8 5 4 7
乙 6 9 8
丙 6 10
甲乙丙三位同学分别需要加工 24,23,16 分钟,则完成所有零件加工的时长为 24 分钟。
(2)本小题通过冒泡排序实现对锉削时间的升序排序,循环 len(d)-1 轮,每轮循环 len(d)-i 次,B 选项内循环次数
为 i-len(d),不正确;D 选项内循环次数为 len(d)-i-1,不正确。
(3)根据题目描述,每个零件同时间内只能由一位同学加工,同一零件的不同步骤可以由不同同学完成。为节省加工
时间,甲乙丙选择锉削时间短的零部件靠后加工的策略,结合程序(a 处代码 i=(i+1)%n 表明 i 在 0~8 之间循环)
推断最终的算法思想是对零部件的锉削时间进行升序排序后,先统一完成零部件的划线,再完成零部件的锯割,最
后完成零部件的锉削。
sj=[[1,2,5],[2,1,3],[1,2,3], 对零部件的锉削时间进行升序排序
[1,5,3],[1,2,7],[1,1,3],
[1,1,2],[2,1,4],[1,2,5]]
sj=sort(sj)
n=len(sj) flag 用于记录每个零件加工的进度,即第 j+1 个零件
flag=[0]*n 的第 flag[j]个步骤已进入加工队列
totaltime=0 totaltime 用于记录加工总时间
高三技术学科 试题 第 9 页 共 12 页
m=3 #甲乙丙 3 位同学
heads,tails=[0]*m,[0]*m que 为包含 m 个元素的二维数组,que[j]为一个队列,
que=[[0 for i in range(n*3)] for j in range(m)] 记录第 j+1 位同学所加工的零件相关信息(某一步骤
的时长)
heads 和 tails 记录 que 中的队首和队尾信息,
heads[j]为 que[j]的队首元素,tails[j]为 que[j]
的队尾元素
i=0 sj[i][0]为第 i+1 个零件的划线时间
for j in range(m): 该for循环让锉削时间最长的三个零件的划线时间入
que[j][tails[j]]=sj[i][0] 队,对应的,flag 记录已进入加工队列的步骤数量
tails[j]+=1 这里 i 的初值为 0,一零件入队加工后应使下一零件
flag[j]+=1 入队,则①空处填写 i+=1,也可以参照后续 a 处代码
i+=1 #① 填写 i=(i+1)%n
while sum(flag)<3*n: 当 sum(flag)<3*n 条件成立时,表明仍有零件未开始
加工
tmin=que[0][heads[0]] 通过顺序查找算法查找当前加工零件中最先完成的
for j in range(1,m): 一个步骤
if que[j][heads[j]]tmin=que[j][heads[j]]
for j in range(m): tmin 时间后,que[j][heads[j]]减掉 tmin,可知
que[j][heads[j]]-=tmin que[j][heads[j]]记录每位同学当前加工零件仍需
要花费的时间
if que[j][heads[j]]==0 and sum(flag)<3*n: #② 如 果 一 位 同 学 当 前 加 工 零 件 已 经 完 成 , 即
que[j][tails[j]]=sj[i][flag[i]] #③ que[j][heads[j]]==0 时,需要将当前零件步骤出队,
tails[j]+=1 选取下一个零件步骤入队。
heads[j]+=1 此时需要保证仍有零件未开始加工,可知第二个条件
flag[i]+=1 为 sum(flag)<3*n。由于本程序采取了先划线、再锯
i=(i+1)%n #a 割、最后锉削的算法思想,只要当前零件的三个步骤
未全部开始加工,也可以实现程序效果,即
flag[i]<3。
处代码为元素入队,sj[i]为当前开始加工的零件,
flag[i]为当前开始加工的零件已完成步骤的数量,
则 sj[i][flag[i]]可得当前开始加工的零件后续步
骤所花费的时间,即入队元素。本空应填写
que[j][tails[j]]=sj[i][flag[i]]
totaltime+=tmin tmin 累加至总时间
tmax=max([que[i][heads[i]] for i in range(m)]) while 循环在最后一个零件的步骤入队后结束,因此
totaltime+=tmax m 个队列中存在未完成的零件,所需时长分别为 m 个
print('加工时长为:',totaltime) 队列中的队首元素 que[i][heads[i]]的值。取最大
值,即为还需要加工的时长。
【解析二】
本题考查算法的综合应用,涉及排序算法,二维数组、队列等数据结构。
(1) 根据题干描述,甲乙丙三人同时对零件加工,完成一个零件后就会对下一个零件加工,当 9 个零件的加工顺
序和加工时间依次为[8,6,6,9,10,5,4,7,8]时,甲、乙、丙三人依次分配的零件如下图:
甲 乙 丙
高三技术学科 试题 第 10 页 共 12 页
第 1 个 8 6 6
第 2 个 5 9 10
第 3 个 4 7 8
总时间 17 22 24
所以,完成所有零件的加工总时长为 24 分钟。
(2) 本小题考查冒泡排序,涉及多键比较。A选项是从前往后冒泡,C 选项是从后往前冒泡,A、C正确。B 选项,
从代码逻辑(内循环)看,想从后往前冒泡,但第一趟并未将 d[j][2]中的最大值排到最左侧,错误。D 选
项,索引为 len(d)-1 的数据并未参与排序,错误。
(3) 解析:由题,sj=sort(sj)二维列表 sj 按照锉削时间降序排序,flag 数组代表 n 个零件当前已完成的工序数,
totaltime 为累计加工总时长。heads,tails=[0]*m,[0]*m,que=[[0 for i in range(n*3)] for j in range(m)]
可知,此处利用数组构建了 m 个队列,第 i 个队列的队首指针为 heads[i],队尾指针为 tails[i]。
核心代码分析:
i=0 #由下文 i=(i+1)%n 可知 i 为零件在 flag 数组中的索引号
for j in range(m): #该段程序分别给对应 m 个队列放入了一个零件作为初始值
que[j][tails[j]]=sj[i][0] #初始放入划线工序的时间
tails[j]+=1 #队尾指针后移
flag[j]+=1 #第 j 个零件的第 1 道工序, flag 数组初值为 0
______①_______ #此处 i 和 j 的值保持相同,因此①处填 i=i+1
while 循环的循环条件 sum(flag)<3*n 代表 所有 n 个零件的 3个工序尚未完成。
#此段程序意在寻找当前正在完成的工序最早结束的队列,即比较得到队首元素的最小值
While sum(flag)<3*n:
tmin=que[0][heads[0]]
for j in range(1,m):
if que[j][heads[j]]tmin=que[j][heads[j]]
#此段程序依次完成工序,注意时间节点 tmin 是当前 m 个队列中最早完成工序的结束时间
for j in range(m):
que[j][heads[j]]-=tmin #m 个队列队首的工序完成 tmin 时间
if que[j][heads[j]]==0 and ____②_____:
#若剩余时间为 0,该工序完成。
#②处需同步判断是否所有零件的工序是否都完成了,因此②处 sum(flag)<3*n。
_______________③____________
#当前工序完成,下一零件的工序入队
#因此 ③处填 que[j][tails[j]]=sj[i][flag[i]]
tails[j]+=1
heads[j]+=1 #已完成的工序出队
flag[i]+=1 #该工序进入下一阶段
i=(i+1)%n #i 指向下一个待加工的零件
totaltime+=tmin
根据算法逻辑,上述 while 循环体结束后,que 队列中还剩余 m个非 0 数据,此时只需要找到 m 个队列中的最大值
tmax,并将其累加到 totaltime,即为完成所有零件额加工总时长。
高三技术学科 试题 第 11 页 共 12 页
高三技术学科 试题 第 12 页 共 12 页
同课章节目录