内容正文:
2025学年第二学期杭州市高二年级教学质量检测
技术试题卷
考生须知:
本试题卷分两部分,第一部分信息技术,第二部分通用技术。全卷共12页,第一部分1至6页,第二部分7至12页。满分100分,考试时间90分钟。
1.答题前,请核对考生条码信息,确认无误后,将条码贴在答题卡上的“条码粘贴处”,并将自己的学校、姓名、试场号、座位号填写在答题卡相应的位置上。
2.回答选择题时,用2B铅笔将答题卡上对应题目的答案标号涂黑。如需改动,用橡皮擦干净后,再选涂其他答案标号。回答非选择题时,用黑色水笔将答案写在答题卡相应的答题区内。答案写在试题卷上一律无效。
3.考试结束,将答题卡交回。
第一部分 信息技术(共50分)
一、选择题(本大题共12小题,每小题2分,共24分,每小题列出的四个备选项中只有一个是符合题目要求的,不选、错选、多选均不得分。)
某出行系统采用无人驾驶技术,每辆汽车搭载有雷达、摄像头等多种传感器,实时采集车辆周围环境数据,并通过车载计算单元结合高精度地图和深度学习实现无人驾驶。乘客通过手机App预约用车,系统根据实时路况和车辆位置智能调度最近车辆,并发送车辆信息给乘客。行驶过程中,车辆将关键行驶数据加密后通过5G上传至服务器,用于优化调度算法和生成交通报告。阅读材料,回答下列小题。
1. 下列关于该系统中数据和信息的说法,正确的是( )
A. 环境数据经数字化后车载计算单元才能处理
B. 系统中数据的表现形式都是相同的
C. 同一段道路拥堵的信息,对乘客和交通管理部门的价值是相同的
D. 服务器对行驶数据进行分析,不会产生新的数据
2. 下列有关该系统安全的措施,描述合理的是( )
A. 为提高数据的传输速率,系统对行驶数据进行加密
B. 为方便使用,乘客预约用车时不需要进行身份认证
C. 将乘客的行程轨迹公开,不会涉及安全问题
D. 定期备份车辆行驶数据与系统日志;有助于提升数据安全
3. 下列关于该系统中人工智能技术的描述,不正确的是( )
A. 车辆通过深度学习模型识别行人、车辆,属于基于数据驱动的人工智能方法
B. 系统采用基于规则的搜索方法进行路径规划,属于符号主义人工智能方法
C. 利用行驶数据优化自动驾驶算法,体现了人工智能从数据中学习的能力
D. 提升车载计算单元的性能,就能完全避免车辆在复杂路况下的感知错误
4. 下列关于该系统软件与硬件的说法,正确的是( )
A. 服务器中不需要安装应用软件 B. 摄像头是该系统的输出设备
C. 手机有操作系统后才能安装App D. 服务器关机后,硬盘中的数据会丢失
5. 下列关于该系统的功能与应用的说法,不正确的是( )
A. 系统发送车辆信息给乘客的过程体现了数据查询功能
B. 无人驾驶控制车辆转弯的过程体现了系统的输出功能
C. 该系统的运行依赖电力、网络等各种外部环境
D. 优化智能调度算法提高了系统的运行效率
6. 下列关于该系统中网络技术的说法,正确的是( )
A. 手机和服务器之间的通信需要遵循网络协议 B. 手机通过移动通信网络才能预约用车
C. 车辆上传行驶数据不需要传输介质 D. 车辆和服务器之间的通信是单向的
7. 某礼物兑换码编码方式如下:兑换码由1位类别标识和2位序号标识组成,标识可使用数字和大写英文字母。下列礼物规模中,可采用上述编码方式的是( )
A. 10种类别,每种2000份 B. 20种类别,每种1000份
C. 30种类别,每种1600份 D. 40种类别,每种500份
8. 某完全二叉树的前序遍历为ECADB,删除其中一个叶子节点,则新二叉树的中序遍历结果不可能是( )
A. ACDE B. ACEB C. CBEA D. CDEB
9. 栈初始为空,经过一系列入栈、出栈操作后,栈又为空。若元素入栈的顺序为“琴”“棋”“书”“画”,其中“书”第一个出栈,则下列说法正确的是( )
A. “画”一定在“棋”之后出栈 B. “琴”一定在“棋”之后出栈
C. “棋”可以最后一个出栈 D. “琴”可以第二个出栈
10. 有如下Python程序段:
i, res = 0, ""
while i < len(s):
if "g" <= s[i] <= "j":
res += chr(ord(s[i])+1)
i += 2
else:
res += s[i]
i += 3
若s为"technology",执行该程序段后,res的值为( )
A. "tioh" B. "tcnlh" C. "uhpg" D. "udomg"
11. 有如下Python程序段:
#获取d的初始值,代码略
n = len(d)
for i in range(n//2):
f = 1
for j in range( (1) ):
if (2) :
d[j], d[j+2] = d[j+2], d[j]
f =- f
执行该程序段后,数组d中所有偶数索引(0,2,4,…)上的元素按升序排列,所有奇数索引(1,3,5,…)上的元素按降序排列,则(1)(2)处填入的正确代码顺序应为( )
①n-(i+1)*2 ②n-i*2 ③f*d[j] > f*d[j+2] ④f*d[j] < f*d[j+2]
A. ①③ B. ①④ C. ②③ D. ②④
12. 定义如下函数:
def judge(a):
i = j = 0
t = 1
f = [-1] * 100
while j < len(a):
k = a[j]
if f[k] >= i:
t = max(t, j - i) # max(a, b)返回a和b中的较大值
i = f[k]+1
f[k] = j
j += 1
t = max(t, j - i)
if t >= len(a)//2:
return True
return False
如果调用函数后返回的结果为True,则a的值可能为( )
A. [6, 1, 9, 6, 6, 9, 2, 9] B. [7, 7, 5, 3, 2, 2, 7, 3] C. [2, 6, 6, 2, 8, 8, 2, 4] D. [5, 2, 4, 2, 7, 2, 2, 3]
二、综合题(本大题共3题,其中第13题7分,第14题10分,第15题9分,共26分)
13. 某校将学生12月消费数据导出到文件data.xlsx中,并对其进行分析以引导理性消费,部分数据如图a所示。
现要分析当月学生在食堂的消费情况,计算出学生当月在食堂的日均消费额,并统计出该月消费天数满20天的学生中,日均消费额最高的前5名学生(名次的计算方法是:若有m人消费额高于该学生,则该学生的名次为m+1),绘制如图b所示的条形图。实现上述功能的部分Python程序如下:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel(" data.xlsx")
df = ①
df2 = ②
df3 = df.groupby("学号")["日期"].nunique() # 计算出每个学生当月的消费天数
# df3为Series结构,其中索引为学号,值为天数
df4 = pd.DataFrame({"学号":df2.index,"总消费额":df2.values,"消费天数":df3.values,"日均消费":0}) # 构建一个DataFrame对象
df4.日均消费 = df4.总消费额/df4.消费天数
df4 = df4[df4.消费天数 >= 20] #筛选
df5 = ③
plt.barh(x,y) #绘制条形图
#设置绘图参数,代码略
(1)程序中①②③处可选的代码有:______ _______ _______
A. df[df.地点 == "食堂"]
B. df[df.地点 != "食堂"]
C. df4. sort_values("日均消费", ascending = False) #降序排序
D. df4. sort_values("总消费额", ascending = False)
E. df.groupby("学号")["消费金额"]. sum() #分类统计
F. df.groupby("日期")["消费金额"]. sum()
请选择合适的代码填入划线处(单选)。
(2)小华发现运行第(1)小题代码时,若第5位学生之后有日均消费额与第5位相同的学生,程序也只输出前5人。现要解决这个问题,可将方框处的代码修改为以下代码,请在划线处填入合适的代码。
data = df5. values.tolist() #将df5存储的数据转换为列表data
#值如[['A23001',483.0,25,19.32],…]
x,y = [],[]
i = 0
k = 1
while k < 5 and i < len(data):
x. append(data[i][0]) # x追加一个元素
y. append(data[i][3])
①___
if i < len(data) and data[i][3] != data[i-1][3]:
②___
14. 某高校开发了校园雨伞共享系统,在教学楼、食堂等场所设置了伞架,每个伞架上有多个伞位。借伞时,用户通过手机App扫描伞架上二维码,服务器验证用户信息后向智能终端发送借伞指令并存储借出数据,智能终端控制伞位电机转动,解锁雨伞。还伞时,用户将雨伞插入空闲伞位,伞位内的RFID读写器读取雨伞上电子标签中的信息,智能终端将归还数据上传至服务器,服务器发送指令使智能终端控制伞位电机转动,锁定雨伞。用户可通过App查看自己的借还信息。请回答下列问题:
(1)该系统中,属于执行器的是________(单选:A.伞位电机/B.电子标签)
(2)下列关于该系统可能出现的故障现象,说法正确的有________(多选)。
A.若RFID读写器故障,则无法采集到完整的归还数据
B.若伞位电机发生故障,则其连接的智能终端无法接收服务器指令
C.若服务器断网,则用户无法成功借伞
D.若智能终端断网,则用户无法查询到自己的历史借还信息
(3)数据表中存储的雨伞借还数据包含7个字段,如图所示,展示了“归还”和“借出”两种状态的示例数据各一条。
用户编号
雨伞编号
借出伞位编号
借出时间
归还伞位编号
归还时间
状态
10011
U001
A10
20260407 14:00
D21
20260407 14:50
归还
90232
U123
B08
20260407 14:20
借出
若将雨伞(编号为“U123”)归还到伞位(编号为“C03”),提交数据到Web服务器的URL为http://192.168.10.8:8080/return?sid=C03&umbid=U123,服务器中的部分Python程序如下,请在划线处填入合适的代码:
@app.route("①___")
def return_umb():
’’’从URL中获取伞位编号和雨伞编号,分别存入sid和umbid;
读取数据表中状态为“借出”的所有记录存入records列表,每个元素为包含7个数据项(如图所示)的列表,并按照雨伞编号升序排列,代码略’’’
flag = False
i, j = 0, len(records) - 1
while i <= j and not flag:
m = (i + j) // 2
if records[m][1] == umbid:
flag = True
elif②___:
i = m + 1
else:
j = m - 1
if flag:
#数据表中更新雨伞归还数据,代码略
return "归还成功!"
else:
return "归还失败:未找到该雨伞的借出记录!"
(4)执行函数return_umb()时,若“借出”状态的雨伞编号为U001、U002、U003、U004、U005、U006、U007、U008,且循环结束时j的值等于i+1,则归还的雨伞编号为________。
(5)为避免损坏的雨伞在归还后被其他用户继续借用,写出一种解决该问题的合理方案。
15. 现要对长度为n的序列a进行加密,加密结果存入序列c中,处理过程如下:
①从a中的第1个元素开始计数(从1开始),每数到第k个(1<k<n),将该元素和a中的第1个元素,依次移动至c的末尾,然后从该元素的下一个元素重新开始计数,继续这一过程,直至遍历完a,完成一轮取数。重复以上操作,直到a中剩余元素个数小于k个。
②若a中还有剩余元素,则逆序移动至c的尾部,结束加密过程。
如a为[1,2,3,4,5,6,7,8],k为3,加密处理过程如图所示,加密结果为[3,1,6,2,7,4,8,5]。
序列
初始值
第一轮取数
第二轮取数
剩余数
a
[1,2,3,4,5,6,7,8]
[4,5,7,8]
[5,8]
[]
c
[]
[3,1,6,2]
[3,1,6,2,7,4]
[3,1,6,2,7,4,8,5]
(1)若a为[1,2,3,4],k为3,按上述加密处理后,加密结果为________。
(2)定义如下函数cal(n,k),返回序列长度为n、计数为k时,取数的总轮数。
def cal(n, k):
if n < k:
return 0
return cal(n - n // k * 2, k) + 1
①若n为12,k为4,执行语句t= cal(n, k)后,变量t的值为________。
②对于任意的n和k,程序段________(单选)执行后,变量t的值与调用函数cal(n,k)的返回值相同。
A. t = 0
while n >= k:
t += 1
n = n - n // k * 2
B. t = 1
while n > k:
n = n - n // k * 2
t += 1
(3)实现加密功能的Python程序如下,请在划线处填入合适的代码。
def convert(data, head, k, t):
①___
qcpre =- 1
for i in range(t):
num = 0
qa = qc
while qa !=- 1:
num += 1
if②___:
qapre = qa
qa = data[qa][1]
else:
data[qapre][1] = data[qa][1]
data[qa][1] = qc
if qc == head:
head = qa
else:
③___
qcpre = qc
qc = data[qc][1]
qa = data[qapre][1]
num = 0
if qc != - 1:
#将链表data中qc及其之后的节点逆序,代码略
return head
’’’读取待加密序列a存入data列表,并按原序列顺序建立链表,data模拟链表结构,data[i]包含两个元素,data[i][0]为数据区域,data[i][1]为指针区域,head为链表头指针;读取序列长度存入n;设置k,代码略’’’
t = cal(n, k)
head = convert(data, head, k, t)
#输出链表data中的加密结果,代码略
第1页/共1页
学科网(北京)股份有限公司
$
2025学年第二学期杭州市高二年级教学质量检测
技术试题卷
考生须知:
本试题卷分两部分,第一部分信息技术,第二部分通用技术。全卷共12页,第一部分1至6页,第二部分7至12页。满分100分,考试时间90分钟。
1.答题前,请核对考生条码信息,确认无误后,将条码贴在答题卡上的“条码粘贴处”,并将自己的学校、姓名、试场号、座位号填写在答题卡相应的位置上。
2.回答选择题时,用2B铅笔将答题卡上对应题目的答案标号涂黑。如需改动,用橡皮擦干净后,再选涂其他答案标号。回答非选择题时,用黑色水笔将答案写在答题卡相应的答题区内。答案写在试题卷上一律无效。
3.考试结束,将答题卡交回。
第一部分 信息技术(共50分)
一、选择题(本大题共12小题,每小题2分,共24分,每小题列出的四个备选项中只有一个是符合题目要求的,不选、错选、多选均不得分。)
某出行系统采用无人驾驶技术,每辆汽车搭载有雷达、摄像头等多种传感器,实时采集车辆周围环境数据,并通过车载计算单元结合高精度地图和深度学习实现无人驾驶。乘客通过手机App预约用车,系统根据实时路况和车辆位置智能调度最近车辆,并发送车辆信息给乘客。行驶过程中,车辆将关键行驶数据加密后通过5G上传至服务器,用于优化调度算法和生成交通报告。阅读材料,回答下列小题。
1. 下列关于该系统中数据和信息的说法,正确的是( )
A. 环境数据经数字化后车载计算单元才能处理
B. 系统中数据的表现形式都是相同的
C. 同一段道路拥堵的信息,对乘客和交通管理部门的价值是相同的
D. 服务器对行驶数据进行分析,不会产生新的数据
2. 下列有关该系统安全的措施,描述合理的是( )
A. 为提高数据的传输速率,系统对行驶数据进行加密
B. 为方便使用,乘客预约用车时不需要进行身份认证
C. 将乘客的行程轨迹公开,不会涉及安全问题
D. 定期备份车辆行驶数据与系统日志;有助于提升数据安全
3. 下列关于该系统中人工智能技术的描述,不正确的是( )
A. 车辆通过深度学习模型识别行人、车辆,属于基于数据驱动的人工智能方法
B. 系统采用基于规则的搜索方法进行路径规划,属于符号主义人工智能方法
C. 利用行驶数据优化自动驾驶算法,体现了人工智能从数据中学习的能力
D. 提升车载计算单元的性能,就能完全避免车辆在复杂路况下的感知错误
4. 下列关于该系统软件与硬件的说法,正确的是( )
A. 服务器中不需要安装应用软件 B. 摄像头是该系统的输出设备
C. 手机有操作系统后才能安装App D. 服务器关机后,硬盘中的数据会丢失
5. 下列关于该系统的功能与应用的说法,不正确的是( )
A. 系统发送车辆信息给乘客的过程体现了数据查询功能
B. 无人驾驶控制车辆转弯的过程体现了系统的输出功能
C. 该系统的运行依赖电力、网络等各种外部环境
D. 优化智能调度算法提高了系统的运行效率
6. 下列关于该系统中网络技术的说法,正确的是( )
A. 手机和服务器之间的通信需要遵循网络协议 B. 手机通过移动通信网络才能预约用车
C. 车辆上传行驶数据不需要传输介质 D. 车辆和服务器之间的通信是单向的
【答案】1. A 2. D 3. D 4. C 5. A 6. A
【解析】
【详解】1.本题考查数据与信息基础相关知识。A选项正确,计算机类计算单元仅能处理数字化数据,环境模拟数据需数字化后才可被车载计算单元处理;B选项错误,系统包含图像、数值、文本等多种不同表现形式的数据;C选项错误,道路拥堵信息对乘客用于避峰出行,对交管部门用于疏导车流,二者价值不同;D选项错误,服务器分析行驶数据会生成交通报告、优化参数等新数据。因此,本题选择A选项。
2.本题考查信息安全相关知识。A选项错误,加密操作会增加运算开销,无法提升传输速率,加密目的是保障数据安全;B选项错误,乘客预约不进行身份认证存在冒用、安全追踪隐患;C选项错误,公开用户行程轨迹会泄露个人隐私,存在信息安全风险;D选项正确,定期备份行驶数据与系统日志,可防止数据丢失、便于故障追溯,提升数据安全。因此,本题选择D选项。
3.本题考查人工智能相关知识。A选项正确,深度学习依靠大量标注数据训练模型识别障碍物,属于数据驱动人工智能;B选项正确,固定规则路径规划依靠逻辑符号运算,属于符号主义人工智能;C选项正确,利用行驶数据迭代优化算法,是机器学习自主学习优化的体现;D选项错误,路况复杂、传感器干扰等因素无法仅凭提升硬件完全消除感知错误。因此,本题选择D选项。
4.本题考查计算机软硬件相关知识。A选项错误,服务器需安装调度、数据处理等应用软件才能实现业务功能;B选项错误,摄像头采集外部画面,属于输入设备而非输出设备;C选项正确,操作系统是底层基础,手机必须搭载操作系统才可安装运行App;D选项错误,硬盘属于断电非易失存储,服务器关机硬盘数据不会丢失。因此,本题选择C选项。
5.本题考查信息系统功能相关知识。A选项错误,系统向乘客推送车辆信息属于数据传输推送,并非数据查询功能;B选项正确,系统计算后输出转向指令控制车辆转弯,体现输出功能;C选项正确,车辆传感器、5G传输、服务器运行都依赖电力与网络环境;D选项正确,优化调度算法缩短派单等待时间,提升系统运行效率。因此,本题选择A选项。
6.本题考查网络通信相关知识。A选项正确,所有设备间网络通信都必须遵守统一网络协议才能正常交互;B选项错误,手机也可连接Wi-Fi无线网络完成预约用车,并非只能依靠移动通信网络;C选项错误,5G无线信号、基站等都属于无形传输介质,数据传输离不开传输介质;D选项错误,车辆上传数据、服务器下发调度指令,二者通信为双向传输。因此,本题选择A选项。
7. 某礼物兑换码编码方式如下:兑换码由1位类别标识和2位序号标识组成,标识可使用数字和大写英文字母。下列礼物规模中,可采用上述编码方式的是( )
A. 10种类别,每种2000份 B. 20种类别,每种1000份
C. 30种类别,每种1600份 D. 40种类别,每种500份
【答案】B
【解析】
【详解】本题考查编码容量计算。兑换码由1位类别标识和2位序号标识组成,每位可使用数字0-9和大写字母A-Z共36种字符。因此类别标识最多36种,序号标识最多36^2=1296种,即每种类别最多1296份。选项B:20种类别≤36,每种1000份≤1296,符合要求;其他选项要么类别超过36,要么每份超过1296,均不可行。因此,本题选择B选项。
8. 某完全二叉树的前序遍历为ECADB,删除其中一个叶子节点,则新二叉树的中序遍历结果不可能是( )
A. ACDE B. ACEB C. CBEA D. CDEB
【答案】C
【解析】
【详解】本题考查完全二叉树的性质与二叉树的前序、中序遍历。首先根据给定前序遍历ECADB还原原完全二叉树:根节点为E,E的左孩子为C,右孩子为B,C的左孩子为A,右孩子为D,原树的叶子节点为A、D、B,分别删除不同叶子推导中序结果:删除叶子A,可得到中序CDEB;删除叶子D,可得到中序ACEB;删除叶子B,可得到中序ACDE;无法得到CBEA,因此该结果不可能出现。故答案为:C。
9. 栈初始为空,经过一系列入栈、出栈操作后,栈又为空。若元素入栈的顺序为“琴”“棋”“书”“画”,其中“书”第一个出栈,则下列说法正确的是( )
A. “画”一定在“棋”之后出栈 B. “琴”一定在“棋”之后出栈
C. “棋”可以最后一个出栈 D. “琴”可以第二个出栈
【答案】B
【解析】
【详解】本题考查栈的操作与出栈序列。入栈顺序固定为“琴”“棋”“书”“画”,且“书”第一个出栈,则必须先入栈“琴”“棋”“书”后出栈“书”,此时栈中剩“琴”“棋”(底到顶)。之后“画”可入栈,后续出栈顺序只能是“棋”“画”“琴”或“画”“棋”“琴”之一,即完整序列为“书棋画琴”或“书画棋琴”。分析选项:A中“画”不一定在“棋”之后(第二种情况画先出);B中“琴”一定在“棋”之后出栈,两种序列均满足;C中“棋”不可能最后一个,因为“琴”最后;D中“琴”不可能第二个。因此,本题选择B选项。
10. 有如下Python程序段:
i, res = 0, ""
while i < len(s):
if "g" <= s[i] <= "j":
res += chr(ord(s[i])+1)
i += 2
else:
res += s[i]
i += 3
若s为"technology",执行该程序段后,res的值为( )
A. "tioh" B. "tcnlh" C. "uhpg" D. "udomg"
【答案】A
【解析】
【详解】本题考查Python程序中循环与分支结构的执行逻辑分析。首先s为"technology",初始i=0,res为空字符串,逐步执行程序:
i=0时,s[0]为't',不满足"g"<=s[i]<="j",res拼接得到"t",i增加3变为3;
i=3时,s[3]为'h',满足条件,拼接'h'移位后的字符'i',res变为"ti",i增加2变为5;
i=5时,s[5]为'o',不满足条件,拼接'o'后res变为"tio",i增加3变为8;
i=8时,s[8]为'g',满足条件,拼接'g'移位后的字符'h',res变为"tioh",
i增加2变为10,退出循环,最终res为"tioh",对应第一个选项。故答案为:A。
11. 有如下Python程序段:
#获取d的初始值,代码略
n = len(d)
for i in range(n//2):
f = 1
for j in range( (1) ):
if (2) :
d[j], d[j+2] = d[j+2], d[j]
f =- f
执行该程序段后,数组d中所有偶数索引(0,2,4,…)上的元素按升序排列,所有奇数索引(1,3,5,…)上的元素按降序排列,则(1)(2)处填入的正确代码顺序应为( )
①n-(i+1)*2 ②n-i*2 ③f*d[j] > f*d[j+2] ④f*d[j] < f*d[j+2]
A. ①③ B. ①④ C. ②③ D. ②④
【答案】A
【解析】
【详解】本题考查Python程序中冒泡排序变形的逻辑分析能力。该程序对数组偶数索引升序排序、奇数索引降序排序,采用类似冒泡排序的思路。首先分析(1)处,每次比较j和j+2位置的同奇偶元素,每一轮排序后会有i个符合要求的元素放在数组末尾,不需要再参与比较,因此j的遍历范围终点应为n-(i+1)*2,故(1)选①;再分析(2)处,f初始为1,每次交换后符号翻转,偶数索引位置f为1,要求升序,当d[j]大于d[j+2]时交换,等价于f*d[j] > f*d[j+2];奇数索引位置f为-1,要求降序,当d[j]小于d[j+2]时交换,不等式两边乘-1后也满足f*d[j] > f*d[j+2],因此(2)选③,正确顺序为①③,对应第一个选项。故答案为:A。
12. 定义如下函数:
def judge(a):
i = j = 0
t = 1
f = [-1] * 100
while j < len(a):
k = a[j]
if f[k] >= i:
t = max(t, j - i) # max(a, b)返回a和b中的较大值
i = f[k]+1
f[k] = j
j += 1
t = max(t, j - i)
if t >= len(a)//2:
return True
return False
如果调用函数后返回的结果为True,则a的值可能为( )
A. [6, 1, 9, 6, 6, 9, 2, 9] B. [7, 7, 5, 3, 2, 2, 7, 3] C. [2, 6, 6, 2, 8, 8, 2, 4] D. [5, 2, 4, 2, 7, 2, 2, 3]
【答案】B
【解析】
【详解】本题考查Python代码的逻辑分析与阅读理解能力。首先梳理函数逻辑:该函数的功能是计算数组a中最长无重复元素子串的长度t,再判断t是否大于等于数组长度的一半,若是返回True,否则返回False。本题四个选项的输入数组长度都是8,因此len(a)//2=4,只要最长无重复子串长度t≥4就会返回True。逐一验证各选项:选项A最长无重复子串长度为3,小于4,返回False;选项B遍历计算后得到最长无重复子串长度为4,满足t≥4的条件,返回True;选项C最长无重复子串长度为3,小于4,返回False;选项D最长无重复子串长度为3,小于4,返回False。故答案为:B。
二、综合题(本大题共3题,其中第13题7分,第14题10分,第15题9分,共26分)
13. 某校将学生12月消费数据导出到文件data.xlsx中,并对其进行分析以引导理性消费,部分数据如图a所示。
现要分析当月学生在食堂的消费情况,计算出学生当月在食堂的日均消费额,并统计出该月消费天数满20天的学生中,日均消费额最高的前5名学生(名次的计算方法是:若有m人消费额高于该学生,则该学生的名次为m+1),绘制如图b所示的条形图。实现上述功能的部分Python程序如下:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel(" data.xlsx")
df = ①
df2 = ②
df3 = df.groupby("学号")["日期"].nunique() # 计算出每个学生当月的消费天数
# df3为Series结构,其中索引为学号,值为天数
df4 = pd.DataFrame({"学号":df2.index,"总消费额":df2.values,"消费天数":df3.values,"日均消费":0}) # 构建一个DataFrame对象
df4.日均消费 = df4.总消费额/df4.消费天数
df4 = df4[df4.消费天数 >= 20] #筛选
df5 = ③
plt.barh(x,y) #绘制条形图
#设置绘图参数,代码略
(1)程序中①②③处可选的代码有:______ _______ _______
A. df[df.地点 == "食堂"]
B. df[df.地点 != "食堂"]
C. df4. sort_values("日均消费", ascending = False) #降序排序
D. df4. sort_values("总消费额", ascending = False)
E. df.groupby("学号")["消费金额"]. sum() #分类统计
F. df.groupby("日期")["消费金额"]. sum()
请选择合适的代码填入划线处(单选)。
(2)小华发现运行第(1)小题代码时,若第5位学生之后有日均消费额与第5位相同的学生,程序也只输出前5人。现要解决这个问题,可将方框处的代码修改为以下代码,请在划线处填入合适的代码。
data = df5. values.tolist() #将df5存储的数据转换为列表data
#值如[['A23001',483.0,25,19.32],…]
x,y = [],[]
i = 0
k = 1
while k < 5 and i < len(data):
x. append(data[i][0]) # x追加一个元素
y. append(data[i][3])
①___
if i < len(data) and data[i][3] != data[i-1][3]:
②___
【答案】(1) ①. A ②. E ③. C
(2) ①. i+=1 ②. k =i
【解析】
【详解】本题考查Python基于pandas的数据分析与程序逻辑设计。
(1)题目要求分析学生在食堂的消费情况,第一步需要筛选出所有地点为食堂的消费记录,因此①处选A;接下来需要按学号统计每个学生的总消费金额,用于后续计算日均消费,因此按学号分组对消费金额求和,②处选E;筛选出消费天数满20天的学生后,需要按照日均消费降序排序,才能选出日均消费最高的学生,因此③处选C。
(2)data已经按日均消费降序排列,需要选出所有名次不超过5的学生,循环中已经将当前索引i的学生信息加入结果,接下来需要将索引i自增,准备处理下一个学生,因此①处填i+=1;如果当前待处理学生的日均消费和前一名学生不同,说明名次更新,符合循环的判断逻辑,因此将k更新为当前索引i,②处填k = i。
14. 某高校开发了校园雨伞共享系统,在教学楼、食堂等场所设置了伞架,每个伞架上有多个伞位。借伞时,用户通过手机App扫描伞架上二维码,服务器验证用户信息后向智能终端发送借伞指令并存储借出数据,智能终端控制伞位电机转动,解锁雨伞。还伞时,用户将雨伞插入空闲伞位,伞位内的RFID读写器读取雨伞上电子标签中的信息,智能终端将归还数据上传至服务器,服务器发送指令使智能终端控制伞位电机转动,锁定雨伞。用户可通过App查看自己的借还信息。请回答下列问题:
(1)该系统中,属于执行器的是________(单选:A.伞位电机/B.电子标签)
(2)下列关于该系统可能出现的故障现象,说法正确的有________(多选)。
A.若RFID读写器故障,则无法采集到完整的归还数据
B.若伞位电机发生故障,则其连接的智能终端无法接收服务器指令
C.若服务器断网,则用户无法成功借伞
D.若智能终端断网,则用户无法查询到自己的历史借还信息
(3)数据表中存储的雨伞借还数据包含7个字段,如图所示,展示了“归还”和“借出”两种状态的示例数据各一条。
用户编号
雨伞编号
借出伞位编号
借出时间
归还伞位编号
归还时间
状态
10011
U001
A10
20260407 14:00
D21
20260407 14:50
归还
90232
U123
B08
20260407 14:20
借出
若将雨伞(编号为“U123”)归还到伞位(编号为“C03”),提交数据到Web服务器的URL为http://192.168.10.8:8080/return?sid=C03&umbid=U123,服务器中的部分Python程序如下,请在划线处填入合适的代码:
@app.route("①___")
def return_umb():
’’’从URL中获取伞位编号和雨伞编号,分别存入sid和umbid;
读取数据表中状态为“借出”的所有记录存入records列表,每个元素为包含7个数据项(如图所示)的列表,并按照雨伞编号升序排列,代码略’’’
flag = False
i, j = 0, len(records) - 1
while i <= j and not flag:
m = (i + j) // 2
if records[m][1] == umbid:
flag = True
elif②___:
i = m + 1
else:
j = m - 1
if flag:
#数据表中更新雨伞归还数据,代码略
return "归还成功!"
else:
return "归还失败:未找到该雨伞的借出记录!"
(4)执行函数return_umb()时,若“借出”状态的雨伞编号为U001、U002、U003、U004、U005、U006、U007、U008,且循环结束时j的值等于i+1,则归还的雨伞编号为________。
(5)为避免损坏的雨伞在归还后被其他用户继续借用,写出一种解决该问题的合理方案。
【答案】(1)A (2)AC
(3) ①. /return ②. records[m][1] < umbid
(4)U007 (5)参考答案1:在手机App端增加故障上报功能,用户还伞后完成故障上报,修改服务器程序,对于报修的雨伞在未维修前设置暂停借出
参考答案2:可在伞架上增设故障上报按钮,用户归还损坏雨伞后,通过按压该按钮即可完成故障上报,修改服务器程序,对于报修的雨伞在未维修前设置暂停借出
或其他合理答案
【解析】
【小问1详解】
本题考查物联网系统中执行器的概念与判断。执行器是接收控制信号完成控制操作的部件,本系统中伞位电机根据指令完成转动解锁锁定雨伞,属于执行器;电子标签是用来存储标识雨伞信息的载体,不属于执行器。故答案为:A。
【小问2详解】
本题考查物联网系统的故障分析。A选项,归还数据需要RFID读写器读取雨伞电子标签信息,若RFID读写器故障,确实无法采集到完整的归还数据,A说法正确;B选项,伞位电机是执行部件,电机故障只会导致无法执行指令,不会影响智能终端接收服务器指令,B说法错误;C选项,借伞过程需要服务器验证用户信息、存储借出数据、下发指令,若服务器断网,整个流程无法完成,用户无法成功借伞,C说法正确;D选项,历史借还信息存储在服务器,智能终端断网不影响用户手机联网从服务器获取查询结果,用户仍可以查询历史借还信息,D说法错误。故答案为:AC。
【小问3详解】
本题考查Flask路由配置与二分查找算法逻辑。对于①处,Flask框架中@app.route装饰器的参数为访问该接口的路由路径,本题中归还接口的访问路径为/return,因此①处填/return;对于②处,records中的记录已经按照雨伞编号升序排列,二分查找时如果中间位置的雨伞编号小于目标编号umbid,说明目标在右半区间,需要将左边界i更新为m+1,符合后续代码逻辑,因此②处填records[m][1] < umbid。
【小问4详解】
本题考查二分查找算法的执行过程。共有8个按升序排列的借出雨伞编号,索引范围为0到7,结合二分查找的执行逻辑推导,当循环结束满足j = i+1时,目标归还雨伞编号为U007。故答案为:U007。
【小问5详解】
本题考查信息系统的优化方案设计,要求解决损坏雨伞归还后被继续借用的问题,合理即可。故答案为:在手机App端增加故障上报功能,用户还伞后完成故障上报,修改服务器程序,对于报修的雨伞在未维修前设置暂停借出(或在伞架上增设故障上报按钮,用户归还损坏雨伞后,通过按压该按钮即可完成故障上报,修改服务器程序,对于报修的雨伞在未维修前设置暂停借出,其他合理答案均可)。
15. 现要对长度为n的序列a进行加密,加密结果存入序列c中,处理过程如下:
①从a中的第1个元素开始计数(从1开始),每数到第k个(1<k<n),将该元素和a中的第1个元素,依次移动至c的末尾,然后从该元素的下一个元素重新开始计数,继续这一过程,直至遍历完a,完成一轮取数。重复以上操作,直到a中剩余元素个数小于k个。
②若a中还有剩余元素,则逆序移动至c的尾部,结束加密过程。
如a为[1,2,3,4,5,6,7,8],k为3,加密处理过程如图所示,加密结果为[3,1,6,2,7,4,8,5]。
序列
初始值
第一轮取数
第二轮取数
剩余数
a
[1,2,3,4,5,6,7,8]
[4,5,7,8]
[5,8]
[]
c
[]
[3,1,6,2]
[3,1,6,2,7,4]
[3,1,6,2,7,4,8,5]
(1)若a为[1,2,3,4],k为3,按上述加密处理后,加密结果为________。
(2)定义如下函数cal(n,k),返回序列长度为n、计数为k时,取数的总轮数。
def cal(n, k):
if n < k:
return 0
return cal(n - n // k * 2, k) + 1
①若n为12,k为4,执行语句t= cal(n, k)后,变量t的值为________。
②对于任意的n和k,程序段________(单选)执行后,变量t的值与调用函数cal(n,k)的返回值相同。
A. t = 0
while n >= k:
t += 1
n = n - n // k * 2
B. t = 1
while n > k:
n = n - n // k * 2
t += 1
(3)实现加密功能的Python程序如下,请在划线处填入合适的代码。
def convert(data, head, k, t):
①___
qcpre =- 1
for i in range(t):
num = 0
qa = qc
while qa !=- 1:
num += 1
if②___:
qapre = qa
qa = data[qa][1]
else:
data[qapre][1] = data[qa][1]
data[qa][1] = qc
if qc == head:
head = qa
else:
③___
qcpre = qc
qc = data[qc][1]
qa = data[qapre][1]
num = 0
if qc != - 1:
#将链表data中qc及其之后的节点逆序,代码略
return head
’’’读取待加密序列a存入data列表,并按原序列顺序建立链表,data模拟链表结构,data[i]包含两个元素,data[i][0]为数据区域,data[i][1]为指针区域,head为链表头指针;读取序列长度存入n;设置k,代码略’’’
t = cal(n, k)
head = convert(data, head, k, t)
#输出链表data中的加密结果,代码略
【答案】(1)[3,1,4,2]
(2) ①. 3 ②. A
(3) ①. qc = head ②. num < k ③. data[qcpre][1] = qa
【解析】
【详解】本题主要考查基于链表的约瑟夫环变种加密算法,涉及递归计算轮数、链表操作及程序填空。
解析如下:
(1)若 a=[1,2,3,4],k=3,模拟加密过程:初始链表为 1 → 2 → 3 → 4,头指针指向 1。 第一轮(因为 n = 4 ≥ k = 3,执行取数):从第 1 个元素开始计数,数到第 3 个元素为 3,将 3 和当前第 1 个元素 1 依次移到结果尾部,得到 [3,1]。移动后,链表变为 2 → 4(原链表中 3 和 1 被取出,剩余元素按原顺序连接)。此时计数从被取出的那个元素的下一个元素(即 4)重新开始,但剩余元素个数为 2,小于 k = 3,所以本轮结束。剩余元素为 [2,4],按规则“逆序移动至 c 的尾部”,即先 4 后 2,添加到结果尾部得到 [3,1,4,2]。 因此加密结果为 [3,1,4,2]。
(2)函数 cal(n,k) 通过递归计算取数总轮数。每轮会移走 n/k⋅2 个元素(因为每次取两个元素:数到的第 k 个和当前第 1 个),然后剩余 n-n/k⋅2 个元素继续下一轮。递归终止条件是 n<k。当 n=12,k=4 时:第一轮:12/4*2=6,剩余 12 - 6 = 6,轮数 + 1; 第二轮:6/4*2=2,剩余 6 - 2 = 4,轮数 + 1;第三轮:4/4*2=2,剩余 4 - 2 = 2,轮数 + 1;第四轮:2<4,返回 0,不再增加轮数。 总轮数 = 3,因此 t=3。 对于循环模拟,选项 A 初始 t=0,当 n≥k 时执行循环体:t+=1,n=n-n/k⋅2,与递归逻辑完全一致。选项 B 初始 t=1,会导致轮数多算 1,且条件 n>k 会导致当 n==k 时少算一轮,因此错误。正确选项为 A。
(3)程序填空部分,convert(data,head,k,t) 函数执行 t 轮取数操作,使用链表结构(每个节点包含数据 data[i][0] 和指针 data[i][1]),每轮从头开始遍历链表,数到第 k 个节点 qa 时,将 qa 和当前头节点 qc(即本轮起始节点)依次移到链表尾部。①处需要初始化每轮开始时的当前节点指针 qc,因为每轮都从链表头开始,所以应填 qc=head。②处是内层循环用于计数,从 1 数到 k,因此当 num < k 时继续遍历;当num==k时找到目标节点,执行移动操作。所以应填 num < k。③处是在移动节点 qa 到链表尾部时,如果 qc 不是头节点(即 qc≠head),则需要将 qa 链接到上一轮尾部节点 qcpre 之后,即将 qa 插入到 qcpre 后面,因此应填 data[qcpre][1]=qa。
第1页/共1页
学科网(北京)股份有限公司
$