内容正文:
浙江省Lambda联盟2024年5月高三模拟考试
技术试题卷
考生须知:
本试题卷分两部分,第一部分信息技术,第二部分通用技术。全卷共11页,第一部分1至6页,第二部分7至11页。满分100分,考试时间90分钟。
1.考生答题前,务必将自己的姓名、准考证号用黑色字迹的签字笔或钢笔填写在答题纸上。
2.选择题的答案须用2B铅笔将答题纸上对应题目的答案标号涂黑,如要改动,须将原填涂处用橡皮擦净。
3.非选择题的答案须用黑色字迹的签字笔或钢笔写在答题纸上相应区域内,作图时可先使用2B铅笔,确定后须用黑色字迹的签字笔或钢笔描黑,答案写在本试题卷上无效。
第一部分 信息技术(50分)
一、选择题(本大题共12小题,每小题2分,共24分。每小题列出的四个备选项中只有一个是符合题目要求的,不选、多选、错选均不得分)
1. 下列关于数据、信息和知识的说法,正确的是( )
A. 数字是数据的唯一表示形式 B. 数据的记录过程一定需要人的参与
C. 人类在搜索引擎的帮助下就可以拥有海量的知识 D. 人们接收同样的信息后,建构的知识也是有区别的
2. 下列关于人工智能的说法,正确的是( )
①通过模拟人类大脑中神经元之间的复杂交互来进行认知推理,是“联结主义”流派;
②用“三段论”的方法实现的人工智能,是“行为主义”流派;
③图灵机可测试机器是否具有智能;
④深度学习模型在模拟人类大脑处理数据,逐层抽象对原始数据进行学习的过程中用到了人工神经网络的信息处理机制;
⑤跨领域人工智能需要从特殊技能到泛化技能,从单一知识到多源知识、从易到难,研究难度较大
⑥人工智能的成本较高,对生产和服务业等劳动密集型领域造成的冲击较小
A. ③④⑤ B. ②④⑤ C. ①④⑤ D. ①②⑥
3. 某企业引入了一套智能考勤管理系统,该系统应用了人脸识别、高精度室内定位、移动互联网、云计算等技术,不仅解决了“杜绝代签”“需到考勤点才能签到”的需求,而且提供自动定时点名、手动点名、在线请销假、补签、签到及早退等功能。管理员通过浏览器不仅可以随时随地查阅考勤结果,而且能得到多种机制下的“预警”报告。下列关于该系统组成的说法,不正确的是( )
A. 该系统的用户就是企业员工
B. 员工在线请假会产生数据
C. 该系统在服务器上安装前,服务器上须安装相关的系统软件
D. 员工通过人脸识别实现签到,主要应用了人工智能技术
4. 某企业引入了一套智能考勤管理系统,该系统应用了人脸识别、高精度室内定位、移动互联网、云计算等技术,不仅解决了“杜绝代签”“需到考勤点才能签到”的需求,而且提供自动定时点名、手动点名、在线请销假、补签、签到及早退等功能。管理员通过浏览器不仅可以随时随地查阅考勤结果,而且能得到多种机制下的“预警”报告。下列关于智能考勤管理系统的说法,正确的是( )
A. 该系统可能采用 SHA-256 算法加密存储员工个人数据
B. 用户通过手机在线签到只能使用移动通信网络
C. 该系统网络应用软件的实现架构可能为 B/S
D. 该网络系统由数据通信系统和网络协议两部分构成
5. 某企业引入了一套智能考勤管理系统,该系统应用了人脸识别、高精度室内定位、移动互联网、云计算等技术,不仅解决了“杜绝代签”“需到考勤点才能签到”的需求,而且提供自动定时点名、手动点名、在线请销假、补签、签到及早退等功能。管理员通过浏览器不仅可以随时随地查阅考勤结果,而且能得到多种机制下的“预警”报告。下列关于该信息系统的局限性、安全和保护的说法不正确的是( )
A. 网络故障导致该系统无法正常工作,说明信息系统对外部环境有依赖性
B. 公司将员工个人信息公开出售是不可取的
C. 该信息系统设计简洁明了,功能丰富多样,破解了数字鸿沟
D. 员工利用“人脸识别”登陆系统,“人脸识别”是一种依靠生物特征识别的认证技术
6. 网关(Gateway)是计算机网络中的一种设备或服务器,下列关于网关的理解不正确的是( )
A. 网关就是网络的关口,是在不同网络间传输数据时的中转站
B. 有时网关可以用一台普通计算机来代替
C. 同一局域网内的计算机通信仍需要设置默认网关
D. 网关需要独立的 IP 地址
7. 一张未压缩的 BMP 格式照片(1920×1080 像素,32 色)存储在计算机内的大小约为( )
A. 7.91MB B. 1.24MB C. 9.89MB D. 63.28MB
8. 对“842715”中的数字进行选择排序中的两遍加工的结果可能是( )
A. 842715 B. 142785 C. 875412 D. 124785
9. BF语言是一种基于一种简单的计算模型的最小化编程语言,这个机器包括八种指令,一个以字节(0-255)为单位、初始全部为零的数组,一个初始时指向该数组中第一个字节的指针,以及用于输入输出的两个字节流。八种指令用字符表示如图所示:
字符
含义
>
指针加一
<
指针减一
+
指针所指字节的值加一
-
指针所指字节的值减一
.
输出指针所指字节内容(ASCII 码)
,
向指针所指的字节输入内容(ASCII 码)
[
若指针所指字节的值为零,则向后跳转,跳转到其对应的]的下一个指令处
]
若指针所指字节的值不为零,则向前跳转,跳转到其对应的[的下一个指令处
和 BF 语言最接近的计算模型是( )
A. 图灵机 B. 原始递归函数 C. Lambda 演算 D. 组合子逻辑
10. BF语言是一种基于一种简单的计算模型的最小化编程语言,这个机器包括八种指令,一个以字节(0-255)为单位、初始全部为零的数组,一个初始时指向该数组中第一个字节的指针,以及用于输入输出的两个字节流。八种指令用字符表示如图所示:
字符
含义
>
指针加一
<
指针减一
+
指针所指字节的值加一
-
指针所指字节的值减一
.
输出指针所指字节内容(ASCII 码)
,
向指针所指的字节输入内容(ASCII 码)
[
若指针所指字节的值为零,则向后跳转,跳转到其对应的]的下一个指令处
]
若指针所指字节的值不为零,则向前跳转,跳转到其对应的[的下一个指令处
以下代码可实现将字符串转换成 BF 语言
def Conv(v):
s=10*'+'+'['t=""
for i in range(len(v)):
ordI=ord(v[i])
cdcI=ordI
temp=cdcI % 10
if temp > 5:
cdcI-=temp
maxI=256-ordI
s+='>'+('-'*maxI if( ) else '+'*(cdcI//10))
t+='>'+('+'if(ordI-cdcI>0) else '-')*abs(ordI-cdcI)
s += '<' * len(v) + '-]' + t + (len(v)-1) * '<' + '[>]'
return s
则横线处应该填入( )
A. cdcI -= 10 maxI<128 B. cdcI += 10 maxI>128 C. cdcI -= 10 maxI>128 D. cdcI += 10 maxI<128
11. 已知 nums 列表中含有 5 个不相同的数字,该流程图的输出结果可能是( )
A 1 B. 111 C. 011 D. 001
12. 以下代码可实现把多个升序链表合并成一个升序链表
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def mergeTwoLists(list1 list2):
if (1) or (2) :
list1, list2 = list2, list1
if (3) :
list1.next =(4)
return list1
def mergeKLists(list1):
if (5) :
return None
if len(list1) == 1:
return list1[0]
mid = len(list1) // 2
left, right = mergeKLists(list1[:mid]), mergeKLists(list1[mid:])
return mergeTwoLists(left, right)
划线处(1)(2)(3)(4)(5)应填入的正确代码有
①(list2 and list1.val > list2.val) ②(list1 and list2.val > list1.val) ③list1,list2=list2,list1
④mergeTwoLists(list1.next, list2) ⑤mergeTwoLists(list1, list2.next) ⑥not list1 ⑦not list2
⑧list1 ⑨list2
则正确代码顺序是( )
A. ⑥①⑧④⑥ B. ⑦②⑥④⑥ C. ⑥①⑨④⑥ D. ⑦②⑨④⑥
二、非选择题(本大题共3小题,其中第13小题10分,第14小题7分,第15小题9分,共26分)
13. 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。现给出一个字符串 ,设计程序搜索其中最长的回文子串。
(1)ebebaabe 的最长回文子串是____。
(2)以下函数用于获取某字符串中最长的回文子串,请补全代码。
def longestPalindrome(s):
def expandAroundCenter(s, left, right):
while ①____:
left -= 1
right += 1
return left + 1, right – 1
start, end = 0, 0
for i in range(len(s)):
left1, right1 = expandAroundCenter(s, i, i)
left2, right2 = ②____
if right1 - left1 > end - start:
start, end = left1, right1
if right2 - left2 > end - start:
start, end = left2, right2
return ③____
(3)在实际应用中以上算法在处理较长字符串时效率过于低下。我们若利用回文串的对称性减少字符的访问次数可以大幅度提升该算法的效率。以下是一种实现。请补全代码。
def longestPalindrome(s):
end, start = -1, 0
s = '/' + '/'.join(list(s)) + '/' #处理偶数长度的子串
arm_len = []
right = j= -1
def get_arm_len(s, left, right):
left_idx, right_idx = expand_around_center(s, left, right)
return (right_idx - left_idx) // 2
for i in range(len(s)):
if right >= i:
i_sym = 2 * j - i
min_arm_len = min(arm_len[i_sym], right - i)
cur_arm_len = ①____
else:
cur_arm_len = get_arm_len(s, i, i)
②____
if ③____:
j = i
right = i + cur_arm_len
if 2 * cur_arm_len + 1 > end - start:
start = i - cur_arm_len
end = i + cur_arm_len
return ④____
14. 为了更便捷地开展中考招生录取公示工作,某市教育局设计了一个中考录取学校查询系统。用户可以在浏览器在相应的页面注册、登录和查询等操作。该系统服务器采用 Flask Web 框架编写,框架结构如图 a 所示。
图a
(1)在设计该系统的前期准备中,需要了解系统需要达到怎么样的目标,这一过程属于____。
(2)小王登录查询系统应访问子页面的 URL 是____。
(3)已知录取信息存储在 data 目录下,文件名称格式为“2021 年<学校名称>录取名单”。文件样例如图 b 所示(涉及隐私的部分用*代替)。服务器端部分代码如下,请补全代码
2021年杭州第二中学滨江校区录取名单
准考证号
姓名
性别
21*******
鲍**
男
21*******
卜**
男
21*******
蔡**
女
21*******
柴*
男
21*******
常**
女
21*******
陈*
男
21*******
陈*
男
图 b
from flask import Flask, render_template, request, redirect, url_for
import pandas as pd
import os
app = Flask(_name_)
# 读取所有 CSV 文件的文件名,代码略
# 将所有文件名中的年份和学校名称提取出来,存入 school_years,school_names
# 将文件名与文件路径映射存入 file_paths
def query_admissions(year, school_name, student_name, exam_id):
# 读取对应学校和年份的录取数据
file_path = os.path.exists(f"data\\{year}年{school_name}录取名单")
if file_path:
df = pd.read_csv(f"data\\{year}年{school_name}录取名单", skiprows=1)
result =
①____
return school_name
@app.route('/')
def index():
return render_template('index.html')
@app.route(' ②____')
def login():
return render_template('login.html')
@app.route('/view')
def view():
exam_id = request.args.get('exam_id')
name = request.args.get('student_ name')
admission = ""
for school_name in school_names:
if ③____: admission = school_name
return render_template('view.html',exam_id=exam_id,student_name=name,admission=admis⁃sion)
if _name_ == '_main_':
app.run(debug=True,port="80")
(4)加框处代码有误,请更正。____
(5)下列代码用于统计各学校性别比(男性:女性)并将排行前五学校绘制在图表中,如图 c 所示。请补全代码。
图 c
import pandas as pd
import matplotlib.pyplot as plt
# 设置中文字体,这里略去
# 读取并合并所有 CSV 文件,并添加学校列,代码略
merged_df = pd.concat(dfs, ignore_index=True)
school_gender_ratio = merged_df.groupby([' 学 校 ', ' 性别 ']).size().unstack(fill_value=0)
school_gender_ratio['总'] = ①____
school_gender_ratio['男'] = school_gender_ratio['男'] / school_gender_ratio['总']
school_gender_ratio['女'] = school_gender_ratio['女'] / school_gender_ratio['总']
sorted_schools = ②____
ax = sorted_schools[['男', '女']].plot(kind='bar', stacked=True)
ax.set_title('不同学校的性别比例')
ax.set_xlabel('学校')
ax.set_ylabel('性别比例')
ax.set_xticklabels(ax.get_xticklabels(), rotation=45)
ax.legend(title='性别', prop=font)
plt.show()
15. 井字棋,英文名叫 Tic-Tac-Toe,是一种在 3*3 格子上进行的连珠游戏。游戏需要的工具仅为纸和笔,然后由分别代表 O 和 X 的两个游戏者轮流在格子里留下标记,任意三个标记形成一条直线,则为获胜。现编写程序实现模拟井字棋的人机对弈。
(1)下图函数可实现创建默认的井字棋棋盘(规定双方分别为-1 和 1,空格用 0 表示)。
def create_board(size=3):
return ____
下列不能填入横线处实现功能的是
A.[[0] * size for _ in range(size)]
B.[[0] * size] * size
C.[[0 for _ in range(size)] for _ in range(size)]
(2)现编写函数实现自动寻找当前状态下的最优下法。请补全代码。
def minimax(board, player, memo):
key = str(board) + str(player)
if key in memo: return memo[key]
if game_over(board): ①____
if player == 1:
max_eval = -float('inf')
for i in range(len(board)):
for j in range(len(board)):
if board[i][j] == 0:
board[i][j] = player
eval = ②____
board[i][j] = 0
max_eval = max(max_eval, eval)
memo[key] = max_eval
return max_eval
else:
#处理另一方的状态,代码略
def find_best_move(board, player):
memo = {}
best_eval = -float('inf') if player == 1 else float('inf')
best_move = None
for i in range(len(board)):
for j in range(len(board)):
if board[i][j] == 0:
board[i][j] = player
eval = minimax(board, -1 if player == 1 else 1, memo)
board[i][j] = 0
if ③____:
best_eval = eval
best_move = (i, j)
return best_move
(3)小余同学提出以上代码中 memo 变量应作为返回值传递否则无法实现优化效果。你同意这种说法吗?____(同意/反对)。若同意,请给出解决方案,若反对,请写出你的理由。
(4)以下是主程序代码,请补全。
def print_board(board): #打印棋盘,代码略
def is_winner(board, player): #判断某个玩家是否为赢家,代码略
def game_over(board): #判断游戏是否结束,代码略
def evaluate(board):
if is_winner(board, 1): return 1
elif is_winner(board, -1): return -1
else: return 0
①____
player=1
print_board(board)
while not game_over(board):
print(f"玩家{'X' if player == 1 else 'O'}的回合:")
if player==1:
row, col = ②____
else:
row, col=input().split(",")
board[row][col] = player
print_board(board)
player = -1 if player == 1 else 1
if is_winner(board, 1):
print("玩家 X 赢了!")
elif: is_winner(board, -1):
print("玩家 O 赢了!")
else:
print("游戏结束,平局!")
第1页/共1页
学科网(北京)股份有限公司
$$
浙江省Lambda联盟2024年5月高三模拟考试
技术试题卷
考生须知:
本试题卷分两部分,第一部分信息技术,第二部分通用技术。全卷共11页,第一部分1至6页,第二部分7至11页。满分100分,考试时间90分钟。
1.考生答题前,务必将自己的姓名、准考证号用黑色字迹的签字笔或钢笔填写在答题纸上。
2.选择题的答案须用2B铅笔将答题纸上对应题目的答案标号涂黑,如要改动,须将原填涂处用橡皮擦净。
3.非选择题的答案须用黑色字迹的签字笔或钢笔写在答题纸上相应区域内,作图时可先使用2B铅笔,确定后须用黑色字迹的签字笔或钢笔描黑,答案写在本试题卷上无效。
第一部分 信息技术(50分)
一、选择题(本大题共12小题,每小题2分,共24分。每小题列出的四个备选项中只有一个是符合题目要求的,不选、多选、错选均不得分)
1. 下列关于数据、信息和知识的说法,正确的是( )
A. 数字是数据的唯一表示形式 B. 数据的记录过程一定需要人的参与
C. 人类在搜索引擎的帮助下就可以拥有海量的知识 D. 人们接收同样的信息后,建构的知识也是有区别的
【答案】D
【解析】
【详解】本题考查数据、信息与知识。A项,数据的表示形式多样,不只是数字,还有文字、图像等,所以A错误;B项,有些数据的记录可以通过机器自动完成,不一定需要人的参与,比如一些环境监测数据等,所以B错误;C项,搜索引擎只是提供信息,要形成知识还需要对信息进行加工、理解等,所以C错误;D项,由于人们的认知、经验等不同,接收同样的信息后建构的知识也会有区别,D正确。故答案为:D。
2. 下列关于人工智能的说法,正确的是( )
①通过模拟人类大脑中神经元之间的复杂交互来进行认知推理,是“联结主义”流派;
②用“三段论”的方法实现的人工智能,是“行为主义”流派;
③图灵机可测试机器是否具有智能;
④深度学习模型在模拟人类大脑处理数据,逐层抽象对原始数据进行学习的过程中用到了人工神经网络的信息处理机制;
⑤跨领域人工智能需要从特殊技能到泛化技能,从单一知识到多源知识、从易到难,研究难度较大
⑥人工智能的成本较高,对生产和服务业等劳动密集型领域造成的冲击较小
A. ③④⑤ B. ②④⑤ C. ①④⑤ D. ①②⑥
【答案】C
【解析】
【详解】本题考查人工智能。“联结主义”流派是通过模拟人类大脑中神经元之间的复杂交互来进行认知推理,①正确;用“三段论”的方法实现的人工智能是“符号主义”流派,②错误;图灵提出的图灵测试可用于测试机器是否具有智能,而非图灵机,③错误;深度学习模型确实利用了人工神经网络的信息处理机制来对原始数据进行学习,④正确;跨领域人工智能具有从特殊技能到泛化技能等特点,研究难度大,⑤正确;人工智能成本较高,对劳动密集型领域冲击较大,⑥错误。综上,正确的是①④⑤,故答案选:C。
3. 某企业引入了一套智能考勤管理系统,该系统应用了人脸识别、高精度室内定位、移动互联网、云计算等技术,不仅解决了“杜绝代签”“需到考勤点才能签到”的需求,而且提供自动定时点名、手动点名、在线请销假、补签、签到及早退等功能。管理员通过浏览器不仅可以随时随地查阅考勤结果,而且能得到多种机制下的“预警”报告。下列关于该系统组成的说法,不正确的是( )
A. 该系统的用户就是企业员工
B. 员工在线请假会产生数据
C. 该系统在服务器上安装前,服务器上须安装相关的系统软件
D. 员工通过人脸识别实现签到,主要应用了人工智能技术
【答案】A
【解析】
【详解】本题考查信息系统的组成。虽然企业员工是系统的主要使用者,但管理员也是系统的重要用户之一,他们负责管理系统的配置、维护和监控。因此,系统的用户不仅仅限于企业员工,还包括管理员等其他角色。故答案为:A。
4. 某企业引入了一套智能考勤管理系统,该系统应用了人脸识别、高精度室内定位、移动互联网、云计算等技术,不仅解决了“杜绝代签”“需到考勤点才能签到”的需求,而且提供自动定时点名、手动点名、在线请销假、补签、签到及早退等功能。管理员通过浏览器不仅可以随时随地查阅考勤结果,而且能得到多种机制下的“预警”报告。下列关于智能考勤管理系统的说法,正确的是( )
A. 该系统可能采用 SHA-256 算法加密存储员工个人数据
B. 用户通过手机在线签到只能使用移动通信网络
C. 该系统网络应用软件的实现架构可能为 B/S
D. 该网络系统由数据通信系统和网络协议两部分构成
【答案】C
【解析】
【详解】本题考查信息系统相关内容。A选项,SHA 256是用于数字签名验证、SSL 握手、密码保护和许多其他安全相关操作的标准哈希算法,数据加密存储有五种方式:(1)MD5加密(加密不可逆)、(2)Base64位加密(可加密也可解密)、(3)sha1加密(加密不可逆)、(4)RSA加密(公钥加密,私钥解密)、(5)AES加密(需要密钥才能解密);该系统不会采用 SHA-256 算法加密存储员工个人数据,选项错误。B选项,用户通过手机在线签到既可以使用移动通信网络,也可以使用无线网络,选项错误。C选项,由题目描述,可知该系统网络应用软件的实现架构可能为 B/S,选项正确。D选项,网络系统主要由网络系统软件和网络系统硬件两部分组成:网络系统软件包括网络操作系统、网络通信协议和网络存取方法等,而网络系统硬件设备则由数据处理系统和数据通信系统组成,选项错误。故本题答案是C选项。
5. 某企业引入了一套智能考勤管理系统,该系统应用了人脸识别、高精度室内定位、移动互联网、云计算等技术,不仅解决了“杜绝代签”“需到考勤点才能签到”的需求,而且提供自动定时点名、手动点名、在线请销假、补签、签到及早退等功能。管理员通过浏览器不仅可以随时随地查阅考勤结果,而且能得到多种机制下的“预警”报告。下列关于该信息系统的局限性、安全和保护的说法不正确的是( )
A. 网络故障导致该系统无法正常工作,说明信息系统对外部环境有依赖性
B. 公司将员工个人信息公开出售是不可取的
C. 该信息系统设计简洁明了,功能丰富多样,破解了数字鸿沟
D. 员工利用“人脸识别”登陆系统,“人脸识别”是一种依靠生物特征识别的认证技术
【答案】C
【解析】
【详解】本题考查信息系统的局限性。虽然该系统功能丰富,但并不代表它能够完全消除数字鸿沟。数字鸿沟是指信息技术的发展给社会带来的不平等现象,而信息系统的设计虽然可以提高效率和便利性,但并不能完全消除数字鸿沟。故答案为:C。
6. 网关(Gateway)是计算机网络中的一种设备或服务器,下列关于网关的理解不正确的是( )
A. 网关就是网络的关口,是在不同网络间传输数据时的中转站
B. 有时网关可以用一台普通计算机来代替
C. 同一局域网内的计算机通信仍需要设置默认网关
D. 网关需要独立的 IP 地址
【答案】C
【解析】
【详解】本题考查网关相关内容。网关作为计算机网络中的一种网络设备,其主要作用是连接不同网络之间的通信。它可以将一个网络的协议格式转换为另一个网络可识别的协议格式,实现不同网络之间的数据传输。网关还具有路由选择、安全检测、数据过滤等功能。网关的主要功能是实现不同网络之间的数据传输。它需要具备转换不同协议格式的能力,支持数据缓存、分组、组装、再传输等功能,以保证数据的快速、稳定传输。此外,网关还能实现路由选择、防火墙、入侵检测等网络安全功能,保障网络的安全。网关的使用场景非常广泛,主要包括企业内网与公网、不同子网之间、不同协议之间等。例如,家庭路由器就是一种网关,它将家庭内部的设备与公网进行了连接。又如,企业内部的不同子网之间需要通信,就可以使用路由网关来实现。ABD选项说法正确。C选项,同一局域网内,不设置“默认网关”的计算机也能互相通讯,是因为在同一内网中两台计算机机之间是不需要通过默认网关来通信的,是通过交换机(或路由器)上的列表来匹配进行数据传输的,选项说法错误。故本题答案是C选项。
7. 一张未压缩的 BMP 格式照片(1920×1080 像素,32 色)存储在计算机内的大小约为( )
A. 7.91MB B. 1.24MB C. 9.89MB D. 63.28MB
【答案】B
【解析】
【详解】本题考查图像的存储。图像文件容量=像素*颜色深度/8。32色即25色,说明每个像素占用5位,1920×1080像素的照片总位数为1920×1080×5位。1B(字节)=8位,将总位数转换为字节数为1920×1080×5÷8字节。1MB=1024×1024字节,所以该照片存储大小约为1920×1080×5÷(8×1024×1024)≈1.24MB。故答案选B。
8. 对“842715”中的数字进行选择排序中的两遍加工的结果可能是( )
A. 842715 B. 142785 C. 875412 D. 124785
【答案】D
【解析】
【详解】本题考查排序。选择排序是一种简单直观的排序算法,其基本思想是每一次从待排序的数据元素中选择最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完为止。 在两遍加工中,第一遍选择排序会将最小的元素放到序列的起始位置,第二遍选择排序会将次小的元素放到第二个位置,依次类推。因此,两遍加工后的结果应该是将序列中的最小值放在第一个位置,次小值放在第二个位置,以此类推。对于序列“842715”,两遍选择排序后的结果应该是将最小的数字1放在第一个位置,次小的数字2放在第二个位置,依次类推,即“124785”。故答案为:D。
9. BF语言是一种基于一种简单的计算模型的最小化编程语言,这个机器包括八种指令,一个以字节(0-255)为单位、初始全部为零的数组,一个初始时指向该数组中第一个字节的指针,以及用于输入输出的两个字节流。八种指令用字符表示如图所示:
字符
含义
>
指针加一
<
指针减一
+
指针所指字节的值加一
-
指针所指字节的值减一
.
输出指针所指字节内容(ASCII 码)
,
向指针所指的字节输入内容(ASCII 码)
[
若指针所指字节的值为零,则向后跳转,跳转到其对应的]的下一个指令处
]
若指针所指字节的值不为零,则向前跳转,跳转到其对应的[的下一个指令处
和 BF 语言最接近的计算模型是( )
A. 图灵机 B. 原始递归函数 C. Lambda 演算 D. 组合子逻辑
【答案】A
【解析】
【详解】本题考查计算模型。BF语言是一种极简的编程语言,其计算模型包括一个指针、一个以字节为单位的数组以及八种基本指令。这种模型与图灵机最为接近。图灵机是一种抽象的计算模型,由图灵在上世纪提出,被认为是通用计算模型的基础。图灵机包含一个无限长的纸带,纸带被划分为一个个格子,每个格子上可以写入符号。机器包含一组状态以及一组转移规则,根据当前状态和当前格子上的符号执行相应的转移规则。这与BF语言的模型十分相似,都是基于一种简单的指令集操作一个数据存储器。故答案为:A。
10. BF语言是一种基于一种简单的计算模型的最小化编程语言,这个机器包括八种指令,一个以字节(0-255)为单位、初始全部为零的数组,一个初始时指向该数组中第一个字节的指针,以及用于输入输出的两个字节流。八种指令用字符表示如图所示:
字符
含义
>
指针加一
<
指针减一
+
指针所指字节的值加一
-
指针所指字节的值减一
.
输出指针所指字节内容(ASCII 码)
,
向指针所指的字节输入内容(ASCII 码)
[
若指针所指字节的值为零,则向后跳转,跳转到其对应的]的下一个指令处
]
若指针所指字节的值不为零,则向前跳转,跳转到其对应的[的下一个指令处
以下代码可实现将字符串转换成 BF 语言
def Conv(v):
s=10*'+'+'['t=""
for i in range(len(v)):
ordI=ord(v[i])
cdcI=ordI
temp=cdcI % 10
if temp > 5:
cdcI-=temp
maxI=256-ordI
s+='>'+('-'*maxI if( ) else '+'*(cdcI//10))
t+='>'+('+'if(ordI-cdcI>0) else '-')*abs(ordI-cdcI)
s += '<' * len(v) + '-]' + t + (len(v)-1) * '<' + '[.>]'
return s
则横线处应该填入( )
A. cdcI -= 10 maxI<128 B. cdcI += 10 maxI>128 C. cdcI -= 10 maxI>128 D. cdcI += 10 maxI<128
【答案】D
【解析】
【详解】本题考查程序设计语言。对于第一个空,当temp>5时,需要对cdcI进行调整。如果直接减去temp可能会导致值变得过小,所以先让cdcI加上10,这是一种平衡和修正的操作,为后续根据具体情况进一步调整做准备。对于第二个空,当maxI<128时,结合cdcI+=10,可以确定一种特定的指令添加模式。如果是maxI>128,就不能准确地对应到代码中需要根据条件来生成相应指令的情况。故答案为:D。
11. 已知 nums 列表中含有 5 个不相同的数字,该流程图的输出结果可能是( )
A. 1 B. 111 C. 011 D. 001
【答案】D
【解析】
【详解】本题考查流程图。初始时low为0,high为列表长度减1。在循环中,通过计算中间索引mid,比较nums[mid]与nums[high]大小。如果nums[mid]<nums[high],则将high更新为mid,并在res中添加“0”;否则将low更新为mid+1,并添加“1”。由于nums中含有5个不相同数字,在进行二分查找过程中,根据数字大小关系会不断更新low和high,从而导致res中形成不同的“0”和“1”组合,所以输出结果可能是各种由“0”和“1”组成的字符串。若nums=[2,1,3,5,4],则程序输出res的值为001。故答案为:D。
12. 以下代码可实现把多个升序链表合并成一个升序链表
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def mergeTwoLists(list1, list2):
if (1) or (2) :
list1, list2 = list2, list1
if (3) :
list1.next =(4)
return list1
def mergeKLists(list1):
if (5) :
return None
if len(list1) == 1:
return list1[0]
mid = len(list1) // 2
left, right = mergeKLists(list1[:mid]), mergeKLists(list1[mid:])
return mergeTwoLists(left, right)
划线处(1)(2)(3)(4)(5)应填入的正确代码有
①(list2 and list1.val > list2.val) ②(list1 and list2.val > list1.val) ③list1,list2=list2,list1
④mergeTwoLists(list1.next, list2) ⑤mergeTwoLists(list1, list2.next) ⑥not list1 ⑦not list2
⑧list1 ⑨list2
则正确代码的顺序是( )
A. ⑥①⑧④⑥ B. ⑦②⑥④⑥ C. ⑥①⑨④⑥ D. ⑦②⑨④⑥
【答案】A
【解析】
【详解】本题考查链表。(1)如果第一个链表为空,则直接返回第二个链表,故选⑥。(2)如果第二个链表不为空且第一个链表的值大于第二个链表的值,则交换两个链表,使得较小的值在前。故选①。(3)在递归合并两个链表时,将当前较小值的节点作为合并结果的头节点。故选⑧。(4)递归地合并剩余的链表部分。故选④。(5)如果链表数组为空,则返回None。故选⑥。故答案为:A。
二、非选择题(本大题共3小题,其中第13小题10分,第14小题7分,第15小题9分,共26分)
13. 如果字符串反序与原始字符串相同,则该字符串称为回文字符串。现给出一个字符串 ,设计程序搜索其中最长的回文子串。
(1)ebebaabe 的最长回文子串是____。
(2)以下函数用于获取某字符串中最长的回文子串,请补全代码。
def longestPalindrome(s):
def expandAroundCenter(s, left, right):
while ①____:
left -= 1
right += 1
return left + 1, right – 1
start, end = 0, 0
for i in range(len(s)):
left1, right1 = expandAroundCenter(s, i, i)
left2, right2 = ②____
if right1 - left1 > end - start:
start, end = left1, right1
if right2 - left2 > end - start:
start end = left2, right2
return ③____
(3)在实际应用中以上算法在处理较长字符串时效率过于低下。我们若利用回文串的对称性减少字符的访问次数可以大幅度提升该算法的效率。以下是一种实现。请补全代码。
def longestPalindrome(s):
end, start = -1, 0
s = '/' + '/'.join(list(s)) + '/' #处理偶数长度的子串
arm_len = []
right = j= -1
def get_arm_len(s, left, right):
left_idx, right_idx = expand_around_center(s, left, right)
return (right_idx - left_idx) // 2
for i in range(len(s)):
if right >= i:
i_sym = 2 * j - i
min_arm_len = min(arm_len[i_sym], right - i)
cur_arm_len = ①____
else:
cur_arm_len = get_arm_len(s, i, i)
②____
if ③____:
j = i
right = i + cur_arm_len
if 2 * cur_arm_len + 1 > end - start:
start = i - cur_arm_len
end = i + cur_arm_len
return ④____
【答案】 ①. ebaabe ②. left >= 0 and right < len(s) and s[left] == s[right] ③. expandAroundCenter(s, i, i+1) ④. s[start: end + 1] ⑤. get_arm_len(s, i - min_arm_len, i + min_arm_len) ⑥. arm_len.append(cur_arm_len) ⑦. i + cur_arm_len > right ⑧. s[start+1:end+1:2]
【解析】
【详解】本题考查Python综合应用。
(1)对于字符串ebebaabe,最长的回文子串是ebaabe。这是因为它在正向和反向读取时都是相同的。故答案为:ebaabe。
(2)在扩展中心的方法中,while循环的条件是继续扩展的前提条件。我们需要确保left和right指针在字符串的范围内,并且它们所指的字符相等。故答案为:left >= 0 and right < len(s) and s[left] == s[right]。我们需要考虑两种情况:一种是奇数长度的回文,以单个字符为中心;另一种是偶数长度的回文,以两个相邻字符为中心。这里expandAroundCenter(s, i, i+1)表示检查以i和i+1为中心的偶数长度回文。故答案为:expandAroundCenter(s, i, i+1)。函数的返回值应该是字符串中最长回文子串。s[start:end + 1]表示从start到end的子串,包括start和end位置的字符。故答案为:s[start: end + 1]。
(3)在改进的算法中,如果当前索引i在当前回文的右边界内,那么可以利用对称性来计算当前回文的臂长。get_arm_len(s, i - min_arm_len, i + min_arm_len)表示从对称位置开始扩展并计算臂长。故答案为:get_arm_len(s, i - min_arm_len, i + min_arm_len)。我们需要将当前计算得到的臂长存储在arm_len列表中。arm_len.append(cur_arm_len)表示将当前的臂长添加到列表中。故答案为:arm_len.append(cur_arm_len)。如果当前回文的右边界超过了之前的右边界,那么我们需要更新右边界。i + cur_arm_len > right表示当前回文的右边界超过了之前的右边界。故答案为:i + cur_arm_len > right。由于我们在预处理中将字符串的每个字符之间插入了/,所以我们需要在返回结果时去掉这些插入的字符。s[start+1:end+1:2]表示从start到end的子串,间隔为2,去掉插入的/。故答案为:s[start+1:end+1:2]。
14. 为了更便捷地开展中考招生录取公示工作,某市教育局设计了一个中考录取学校查询系统。用户可以在浏览器在相应的页面注册、登录和查询等操作。该系统服务器采用 Flask Web 框架编写,框架结构如图 a 所示。
图a
(1)在设计该系统的前期准备中,需要了解系统需要达到怎么样的目标,这一过程属于____。
(2)小王登录查询系统应访问子页面的 URL 是____。
(3)已知录取信息存储在 data 目录下,文件名称格式为“2021 年<学校名称>录取名单”。文件样例如图 b 所示(涉及隐私的部分用*代替)。服务器端部分代码如下,请补全代码
2021年杭州第二中学滨江校区录取名单
准考证号
姓名
性别
21*******
鲍**
男
21*******
卜**
男
21*******
蔡**
女
21*******
柴*
男
21*******
常**
女
21*******
陈*
男
21*******
陈*
男
图 b
from flask import Flask, render_template, request, redirect, url_for
import pandas as pd
import os
app = Flask(_name_)
# 读取所有 CSV 文件文件名,代码略
# 将所有文件名中年份和学校名称提取出来,存入 school_years,school_names
# 将文件名与文件路径映射存入 file_paths
def query_admissions(year, school_name, student_name, exam_id):
# 读取对应学校和年份的录取数据
file_path = os.path.exists(f"data\\{year}年{school_name}录取名单")
if file_path:
df = pd.read_csv(f"data\\{year}年{school_name}录取名单", skiprows=1)
result =
①____
return school_name
@app.route('/')
def index():
return render_template('index.html')
@app.route(' ②____')
def login():
return render_template('login.html')
@app.route('/view')
def view():
exam_id = request.args.get('exam_id')
name = request.args.get('student_ name')
admission = ""
for school_name in school_names:
if ③____: admission = school_name
return render_template('view.html',exam_id=exam_id,student_name=name,admission=admis⁃sion)
if _name_ == '_main_':
app.run(debug=True,port="80")
(4)加框处代码有误,请更正。____
(5)下列代码用于统计各学校性别比(男性:女性)并将排行前五的学校绘制在图表中,如图 c 所示。请补全代码。
图 c
import pandas as pd
import matplotlib.pyplot as plt
# 设置中文字体,这里略去
# 读取并合并所有 CSV 文件,并添加学校列,代码略
merged_df = pd.concat(dfs, ignore_index=True)
school_gender_ratio = merged_df.groupby([' 学 校 ', ' 性别 ']).size().unstack(fill_value=0)
school_gender_ratio['总'] = ①____
school_gender_ratio['男'] = school_gender_ratio['男'] / school_gender_ratio['总']
school_gender_ratio['女'] = school_gender_ratio['女'] / school_gender_ratio['总']
sorted_schools = ②____
ax = sorted_schools[['男', '女']].plot(kind='bar', stacked=True)
ax.set_title('不同学校的性别比例')
ax.set_xlabel('学校')
ax.set_ylabel('性别比例')
ax.set_xticklabels(ax.get_xticklabels(), rotation=45)
ax.legend(title='性别', prop=font)
plt.show()
【答案】 ①. 需求分析 ②. http://10.0.0.100/login 或 http://10.0.0.100:80/login ③. if result==[]: return "" ④. /login ⑤. query_admissions(2021, school_name, student_name,exam_id) ⑥. df[(df['姓名'] == student_name) & (df['准考证号']==exam_id)] ⑦. school_gender_ratio.sum(axis=1) ⑧. school_gender_ratio.sort_values(by='男', ascending=False).head(10)
【解析】
【详解】本题考查信息系统的应用。
(1)在设计系统的前期准备阶段,首先需要明确系统的目标和需求,这个过程称为需求分析。需求分析是软件开发的一个重要步骤,它确定了系统需要完成的功能和性能要求。故答案为:需求分析。
(2)小王登录查询系统应访问的子页面URL格式通常是http://<服务器IP>:<端口>/<路径>。在此示例中,假设服务器的IP地址是10.0.0.100,端口是80(默认端口可以省略),路径是/login,因此正确的URL是http://10.0.0.100/login或http://10.0.0.100:80/login。
(3)在查询录取信息时,如果未找到结果(即结果列表为空),应该返回空字符串表示没有找到对应的学校。故答案为:if result==[]: return ""。在Flask中,路由装饰器@app.route用于定义URL路径与处理函数之间的映射关系。在代码中,@app.route后需要跟上一个URL路径,这样当用户访问该URL时,Flask会调用对应的处理函数。根据问题提示,登录页面的路径应该是/login。故答案为:/login。在view路由中,需要根据用户提供的考生姓名和准考证号查询该考生的录取信息。所以需要调用query_admissions函数来实现这个功能。query_admissions函数接受四个参数:年份year、学校名称school_name、考生姓名student_name、考生准考证号exam_id,并返回查询结果(学校名称)。因此,在view路由中调用query_admissions函数并传入相应的参数,可以实现根据考生姓名和准考证号查询录取信息的功能。故答案为:query_admissions(2021, school_name, student_name,exam_id)。
(4)了确保查询结果的准确性,我们应该使用“且”的逻辑来筛选数据,即同时满足姓名和准考证号匹配的记录才符合我们的要求。因此,使用“与”的逻辑运算符"&"是更合适的选择。故答案为:df[(df['姓名'] == student_name) & (df['准考证号']==exam_id)]。
(5)在这行代码中,我们使用了Pandas DataFrame的sum()函数来计算每个学校的总人数。我们希望得到的是每个学校男性和女性的总人数之和,sum函数默认按列,axis=1表示按行,即对每个学校的各个性别的人数进行求和。这样我们就得到了每个学校的总人数,结果将作为学校性别比例的分母。故答案为:school_gender_ratio.sum(axis=1)。在这行代码中,我们使用了Pandas DataFrame的sort_values()函数来根据男性人数列进行降序排列,by='男'表示根据男性人数进行排序,ascending=False表示降序排列。然后使用head(10)函数来获取排序后的前10个学校,这里我们希望获取的是性别比例排名前五的学校,但为了防止有相同比例的学校出现,我们选择前10个学校进行展示。故答案为:school_gender_ratio.sort_values(by='男', ascending=False).head(10)。
15. 井字棋,英文名叫 Tic-Tac-Toe,是一种在 3*3 格子上进行的连珠游戏。游戏需要的工具仅为纸和笔,然后由分别代表 O 和 X 的两个游戏者轮流在格子里留下标记,任意三个标记形成一条直线,则为获胜。现编写程序实现模拟井字棋的人机对弈。
(1)下图函数可实现创建默认的井字棋棋盘(规定双方分别为-1 和 1,空格用 0 表示)。
def create_board(size=3):
return ____
下列不能填入横线处实现功能的是
A.[[0] * size for _ in range(size)]
B.[[0] * size] * size
C.[[0 for _ in range(size)] for _ in range(size)]
(2)现编写函数实现自动寻找当前状态下的最优下法。请补全代码。
def minimax(board, player, memo):
key = str(board) + str(player)
if key in memo: return memo[key]
if game_over(board): ①____
if player == 1:
max_eval = -float('inf')
for i in range(len(board)):
for j in range(len(board)):
if board[i][j] == 0:
board[i][j] = player
eval = ②____
board[i][j] = 0
max_eval = max(max_eval, eval)
memo[key] = max_eval
return max_eval
else:
#处理另一方的状态,代码略
def find_best_move(board, player):
memo = {}
best_eval = -float('inf') if player == 1 else float('inf')
best_move = None
for i in range(len(board)):
for j in range(len(board)):
if board[i][j] == 0:
board[i][j] = player
eval = minimax(board, -1 if player == 1 else 1, memo)
board[i][j] = 0
if ③____:
best_eval = eval
best_move = (i, j)
return best_move
(3)小余同学提出以上代码中 memo 变量应作为返回值传递否则无法实现优化效果。你同意这种说法吗?____(同意/反对)。若同意,请给出解决方案,若反对,请写出你的理由。
(4)以下是主程序代码,请补全。
def print_board(board): #打印棋盘,代码略
def is_winner(board, player): #判断某个玩家是否为赢家,代码略
def game_over(board): #判断游戏是否结束,代码略
def evaluate(board):
if is_winner(board, 1): return 1
elif is_winner(board, -1): return -1
else: return 0
①____
player=1
print_board(board)
while not game_over(board):
print(f"玩家{'X' if player == 1 else 'O'}的回合:")
if player==1:
row, col = ②____
else:
row, col=input().split(",")
board[row][col] = player
print_board(board)
player = -1 if player == 1 else 1
if is_winner(board, 1):
print("玩家 X 赢了!")
elif: is_winner(board, -1):
print("玩家 O 赢了!")
else:
print("游戏结束,平局!")
【答案】 ①. B ②. return evaluate(board) ③. minimax(board, -1, memo) ④. (player == 1 and eval > best_eval) or (player == -1 and eval < best_eval) ⑤. 反对 memo 在此作为指针传递可实现记忆效果 ⑥. board = create_board(3) ⑦. find_best_move(board, player)
【解析】
【详解】本题考查Python程序。
(1)[[0]*size]*size,这个表达式在生成二维列表时,虽然也会生成一个3x3的二维列表,但是其中的子列表都是同一个列表的引用,即每一行的子列表都指向同一个内存地址。这意味着当修改其中一个子列表时,其他子列表也会受到影响,这不符合棋盘应该是独立的状态的要求。故答案为:B。
(2)游戏结束的判断条件应该是检查当前棋盘是否已经有玩家获胜或者已经下满了所有的格子,即没有空格了。因此,这个空需要调用game_over函数来判断游戏是否结束。故答案为:return evaluate(board)。在玩家为1时,表示当前轮到玩家1(X)下棋,我们需要遍历棋盘的所有空格,尝试在每个空格下一个X,并计算下一个状态的评估值,最后返回最大的评估值。所以这里应该调用minimax函数,然后递归地搜索对手的最优下法,并返回评估值。此处缺少了一个递归调用minimax函数的部分。故答案为:minimax(board, -1, memo)。在选择最佳下法时,我们需要根据玩家是1还是-1来判断评估值是取最大值还是最小值。因为玩家1(X)希望最大化评估值,而玩家-1(O)希望最小化评估值。所以这个空需要一个条件表达式来判断当前玩家是1还是-1,并根据评估值的大小来更新最优下法和评估值。条件表达式应该是(player == 1 and eval > best_eval) or (player == -1 and eval < best_eval)。
(3)在给定的代码中,memo变量是作为参数传递给minimax函数的,这是一种常见的优化方法,称为记忆化搜索(Memoization)。在递归调用的过程中,memo会存储已经计算过的状态及其评估值,避免重复计算,从而提高算法的效率。这种方式是有效的,并且不会增加额外的复杂度和开销。因此,memo变量作为参数传递是合适的。故答案为:反对。
(4)在程序的开头,首先调用了create_board函数来创建一个初始的井字棋棋盘。根据题目提供的信息,该函数会生成一个默认的3x3井字棋棋盘,其中所有位置都是空的(即用0表示)。因此,board=create_board(3)这行代码的作用是初始化一个3x3的井字棋棋盘,并将其赋值给变量board,以供后续使用。故答案为:board = create_board(3)。在每一轮玩家的回合中,程序需要根据当前棋盘状态和当前玩家的标识来选择最优的下法。这里调用了find_best_move函数来找到当前状态下的最佳下法。这个函数会根据当前棋盘状态和当前轮到的玩家,通过极小极大算法(minimax)来搜索最优的下法,并返回一个包含最佳下法坐标的元组 (row, col)。然后程序会根据玩家的标识,将对应的标记(X或O)放置在这个最佳的位置上。故答案为:find_best_move(board, player)。
第1页/共1页
学科网(北京)股份有限公司
$$