2023年4月台州二模-信息技术卷解析(PDF版)

文档属性

名称 2023年4月台州二模-信息技术卷解析(PDF版)
格式 zip
文件大小 830.8KB
资源类型 教案
版本资源 浙教版(2019)
科目 信息技术(信息科技)
更新时间 2023-04-15 16:18:17

图片预览

文档简介

台州市 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 题图 b
A.①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 6
7 5 4 3 1 6 3
i=0 1 7 5 4 3 3 6
i=1 1 3 7 5 4 3 6
i=2 1 3 3 7 5 4 6
i=3 1 3 3 4 7 5 6
3 >=2 and lst[3]!=lst[2] = True ,执行 break 退出循环
11.有如下 Python程序段:
def fac(n):
ans = 1
for i in range(2, n + 1):
ans *= i
return ans
def 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 = 0
for key in b:
while i <= j:
m = (i + j) // 2; c += 1
if key < a[m]:
j = m - 1
else:
i = m + 1
a = 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.5
C. 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 = 0
for j in df.index:
if df['id'][j] not in arr:
arr.append(df['id'][j])
if convert( ) > convert(late_time):
late += 1
return arr, late # 依次返回签到学生编号列表和迟到人数
(3)主程序。统计所有班级准时、迟到和缺席人数,输出结果如第 14题图 c所示。程序代码如下。
import pandas as pd
df = 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] += late
d[2] += tot[i - 1] - len(arr)
# 输出该班级的迟到人数和缺席人数,代码略
划线处应填入的代码是 ① ;若将加框处代码更改为 ② ,程序的运行
结果不变。(②处选填:sum()/mean()/count()/min())
(4)绘制饼图展示全年级的签到人数比例,如第 14题图 d所示,程序代码如下。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.pie(d, labels=['准时', '迟到', '缺席'])
plt.title('签到人数比例')
plt.show()
下列说法正确的是 (多选)。
A. 缺席人数比迟到人数多
B. 该图能增强数据的解释力和吸引力
C. 生成该饼图的数据来源于列表 labels 第 14 题图 d
D. 饼图和环形图都适合展现这类比例关系的数据
【答案】
(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;饼图和环形图类似,都适合展现
这类比例关系的数据,正确。正确选项 BD
15.一批集装箱陆续送达码头,要求叠放到指定的若干位置,每个位置最多可叠放 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 -1
cnt = 0
i = len(st) - 1
while i >= 0 and :
cnt += 1
台州市高三技术教学质量评估试题 第 10页 共 14页
i -= 1
return cnt * 2 + 1
(2)当某个集装箱送达时,输入其编号和重量,将该集装箱放到移动次数最少的位置,并输出移
动过程。程序执行结果的部分截图如第 15题图 b所示。请在划线处填入合适的代码。
goods = {}
n = 8
k = (n - 1) // 5 + 1
p = [[] for i in range(k)]
for i in range(n):
# 输出当前集装箱叠放情况,代码略
x = int(input('请输入到达的集装箱编号:'))
weight = int(input('请输入到达的集装箱重量:'))
goods[x] = weight
第 15 题图 b
min_steps = 999
for j in range(k):
t = judge(x, p[j])
if ① :
minp = j
min_steps = t
print('移动过程为:')
tmp = []
for j in range( ② ):
print(p[minp][-1], '-> 临时位置')
tmp.append(p[minp].pop()) # 删除 p[minp]的最后一个元素,并追加到 tmp
p[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 -1
cnt = 0
i = len(st) - 1
while i >= 0 and :
cnt += 1
i -= 1
return 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 #因此返回-1
cnt = 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 #移动次数+1
i -= 1 #向左实现遍历
台州市高三技术教学质量评估试题 第 12页 共 14页
return cnt * 2 + 1 #考虑到将 cnt个集装箱移至临时位置后有需要再移回 st位置,因此移动次数 cnt*2,
且 x加入 st位置,因此需要将移动次数+1
(2)当某个集装箱送达时,输入其编号和重量,将该集装箱放到移动次数最少的位置,并输出移
动过程。程序执行结果的部分截图如第 15题图 b所示。请在划线处填入合适的代码。
goods = {}
n = 8
k = (n - 1) // 5 + 1
p = [[] for i in range(k)]
for i in range(n):
# 输出当前集装箱叠放情况,代码略
x = int(input('请输入到达的集装箱编号:'))
weight = int(input('请输入到达的集装箱重量:'))
goods[x] = weight
第 15 题图 b
min_steps = 999
for j in range(k):
t = judge(x, p[j])
if ① :
minp = j
min_steps = t
print('移动过程为:')
tmp = []
for j in range( ② ):
print(p[minp][-1], '-> 临时位置')
tmp.append(p[minp].pop()) # 删除 p[minp]的最后一个元素,并追加到 tmp
p[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] = weight
min_steps = 999 #预设最少移动步数 min_steps
for 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 = t
print('移动过程为:')
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]的最后一个元素,并追加到 tmp
p[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页
同课章节目录