2023届高三信息技术一轮复习《选修一》专题测试
全卷共 8页,满分 50分,考试时间 45分钟。
一、选择题(均为单选,每题 2分,共 24分)
1.有一组含有 9个元素的有序链表:1->3->5->6->8->11->15->18->20,现为该链表增
设关键节点,建立索引,下列说法不正确的是
A.一级索引中的关键节点为 1,5,8,15,20
B.二级索引中的关键节点为 1,8,20
C.若要在建立的一级索引的基础上插入元素 7,则需比较 3次即可找到 7插入的位置
D.若要在建立的二级索引的基础上查找元素 18,则需比较 4次即可找到元素 18
2.关于栈,下列说法错误的是
A.栈是先进后出表。它的数据元素只能在同一端(称为栈顶)进行操作,添加(进栈),
删除(出栈)
B.pop(0)方法可以删除列表的尾元素(相当于栈的“出栈”操作)
C.pop()方法可以删除列表的尾元素(相当于栈的“出栈”操作)
D.append方法可以在列表尾部添加一个数据元素(相当于栈的“入栈”操作)
3.树结构是一种具有层次关系的非线性结构。树是由 n(n≥0)个节点组成的有限集合,如
图所示,下列说法错误的是
A.任何一个非空树均仅有一个称为根的节点,如图中 A,n=0时为空树
B.当 n>0时,其余节点可分为 m (m≥0)个互不相交的有限集合,其中每个集合又是一
棵树,并称为根的子树
C.节点 A为根节点,B、C、D为 A的子树的根节点,同理,E、F、G是 B的子树的根
节点,B是 E、F、G的父节点
D.在树结构中,数据元素之间是一对一的关系
4.一棵二叉树的前序遍历结果为 JFDECBHAIG,中序遍历结果为 DFEJAHBICG,则该二叉树
的深度为
A.6 B.5
C.4 D.3
5.分别用选择和冒泡排序算法对数据序列“2,3,4,5,1,0”作升序排序,则需要交换的
次数分别为
A.5次和 9次 B.4次和 12次
C.5次和 15次 D.4次和 18次
信息技术 第 1页(共 8页)
6.以下程序代码采用的算法是
def gcd(m,n):
while m%n != 0:
m,n=n,m%n
return n
a=int(input("请输入 a的值:"))
b=int(input("请输入 b的值:"))
print(gcd(a,b))
A.枚举法 B.二分法 C.递归法 D.迭代法
7.老师编写了一个函数,它的功能为使用递归的方法快速计算 Xn,划线处代码为
def fun(x,n):
if n==1:
return x
t=fun( )
if n%2==1:
return x*t*t
else:
return t*t
A.n//2,x B.n/2,x C.x,n//2 D.x,n/2
8.有如下程序段:
a=[92,22,11,98,96,71]
n=len(a)
for i in range(n):
for j in range( ):
if a[j]>a[j+1]:
a[j],a[j+1]=a[j+1],a[j]
print(a)
为实现 n个数的升序排序,则划线处应填
A.range(i-1) B.range(n-2,i-1,-1)
C.range(i,n) D.range(n-1,n-i-2,-1)
9.有如下程序段:
a=[[2,2,1],[8,0,4],[3,3,0],[6,-1,2],[8,1,-1]]
ans=head=3
p=a[head][2]
while p!=-1:
if a[ans][0] < a[p][0] :
ans=p
p=a[p][2]
print(ans,a[ans][0],sep=",")
则程序运行后,下列说法正确的是
A.链表数据值依次为 2->8->3->6->8
B.程序输出结果为 4,8
C.a[0][2]的值为 1,双向链表 a的头节点数据值为 2
D.a[1][1]的值为 0,双向链表 a的尾节点数据值为 8
信息技术 第 2页(共 8页)
10.有某算法的程序段如下:
i = 0; j = 6; s = “”
key = int( random( ) * 100 )
while i <= j:
m = ( i + j ) // 2
if key == p[ m ]:
s +=” M ”
break
elif key < p[ m ]:
j = m - 1
s += “ L ”
else:
i = m+1
s += ” R ”
print( s )
列表 p中的元素依次为“24, 35, 38, 41, 45, 69, 78”。执行该程序段后显示的内
容可能为
A.RL B.LMR
C.RLR D.LRLM
11.有如下程序:
wz=[0,1,2,3,4,5,6]
start=0
qu=[0]*len(wz)
wm="abcdefg"
h=0;t=0
while len(wz)>0:
for i in range(2):
start=(start+1)%len(wz)
qu[t]=wz[start]
t=t+1
wz.pop(start)
mm=""
while hmm=mm+wm[qu[h]]
h=h+1
print(mm)
程序运行后,显示的结果为( )
A.bdfaecg B.bdfaceg
C.cfbgead D.cfbeadg
12.单车道胡同路边停车,先进去的车只能从另一出口出来,阅读程序代码:
listque=[] #定义列表 listque存储停车状况
max=8 #停车位最大容量
while(True):
print('\n1.停车') #\n表示换行打印
信息技术 第 3页(共 8页)
print('2. 开车离开')
print('3. 查看停车库')
print('其他. 退出')
x=input("输入你的选择:") #输入选择项
if x=='1':
if len(listque)print("还有"+str(max-len(listque))+"个停车位。")
listque.append(input("请输入停车车牌:"))
else:
print("对不起,停车位已满。")
elif x=='2':
if len(listque)==0:
print("停车库为空。")
else:
print(listque.pop(0)+"开出。")
elif x=='3':
print(listque)
else:
break
下列说法错误的是
A.listque.append( )语句的作用是输入停车车牌
B.listque.pop(0)表示开车离开,删除停车车牌
C.此程序的数据结构方式是先进后出的栈
D.while(True)语句表示永远执行循环
二、非选择题(共 26分)
13.(6分)某招聘考试的笔试成绩达到面试资格线可以入围参加面试。入围面试的资格线
根据计划录取人数的 1:3划定,即如果考试计划录取 m 人,则排名第 3*m 名选手的笔试
分数为面试资格分数线,该分若有同分者可一同参加面试。考生考号和笔试成绩存储在“笔
试成绩.csv”文档。编写一个 Python 程序,实现上述功能。程序运行时,将所有考生考号
和笔试成绩的数据信息存储列表 a中,结构如图 1 所示,共 n名考生。输入计划录取人数
m(3*m图 1 图 2
信息技术 第 4页(共 8页)
(1)实现上述功能的 Python 程序如下,请在划线处填入合适代码。
# 从 csv文档读取学生数据存储到列表 a中,代码略
n = len(a) - 1 #n表示考生总数
m = int(input("请输入计划录取人数:"))
mm = m * 3
_______
while i < n:
for j in range(n, i, -1):
if _______:
a[j], a[j - 1] = a[j - 1], a[j]
if :
break
i += 1
zs = i – 1 #最终人数
print("进入面试考生")
for i in range(0, __________):
print(a[i])
print("最终人数:", zs)
print("分数线:", a[zs][1])
(2)程序加框处的代码有误,请改正______。
14.(6分)有个火车站的铁轨调度方法如下:火车从一方 1,2,3,4…依次进入,由于每个火
车皮要去的目标车站不一样,想让车皮到站后能以最少的时间从火车上脱离,就让最近到的
车皮放在整列火车的最后。因此需要转换站来达成这样的目标,转换站只能在同一个地方进
与出。例如有四个车皮 1,2,3,4进入,2,4,3,1到站,即 2号车皮目的地最远,4号车皮
倒数第二远,3号车皮倒数第三远,1号车皮最近。为了能快速指挥车辆进出站转换,小王
编写例如下程序:
a=[1,2,3,4,5,6] #待车皮进站
b=[3,2,1,6,5,4] #出站顺序
stack=[0]*len(a); top=0
stack[top]=a[0]
s=str(a[0])+"进"
ha=1;hb=0
while :
while top>-1 and _______ :
s=s+str(stack[top])+"出"
top-=1
____
if hatop+=1
stack[top]=a[ha]
s=s+str(a[ha])+"进"
ha+=1
信息技术 第 5页(共 8页)
elif ha==len(a) and top>-1 and _______ :
print("无法调度")
break
if top==-1:
print(s)
代码显示结果:1进 2进 3进 3出 2出 1出 4进 5进 6进 6出 5出 4出
(1)修改加框处代码________
(2)将划线处代码补充完整,使功能完善。
15.(7分)乒乓球比赛规则原先采用 21分制,后来改成 11分制。改制后发现一些慢热型
选手不适应 11分制,只能选择退役。小明编写了如下程序。对于同样的比赛记录(由字母 w
与 f组成,其中 w 表示小明获得一分,f 表示对手获得一分),发现 11分制对于慢热型选
手不利。例如有如下比分记录:"fffffffffffffwwwffffffffwwwfwfwfwffwwwfffwwffww
ffffwwwwffwwwwffwwwfffwwwwwffwwwwffww"。采用 11分制,各局比分为: 0:11,6:11,
10:12,11:5,11:7。采用 21分制,各局比分为: 3:21,21:16,14:9。
(1)如果记录是 wwwffffffffffwfwwfwwfwfwfffffffwwwwwfffwf,请问 11 分制比赛
的第二局小明与对手的比分是 _______________(注:当任一方得分大于等于 11 分,且
领先对方 2分及以上,领先一方赢一局)。
(2)在程序划线处填入合适代码。
def check(a,b,fz):
flag=False
if _____________:
flag=True
return flag
s=input("输入比赛记录:")
a=[0]*1000
b=[0]*100
c=[0]*100
j=0;k=0;x=-1
f1=0;f2=0;h1=0;h2=0
for i in range(len(s)):
if s[i]=="w":
a[i]=1
n=len(s)
for i in range(n):
if a[i]==1:
f1=f1+1
else:
f2=f2+1
h1=h1+a[i]
________________
if check(f1,f2,11):
b[j]=f1;b[j+1]=f2
j=j+2
f1=0;f2=0
信息技术 第 6页(共 8页)
if check(h1,h2,21):
c[k]=h1;c[k+1]=h2
k=k+2
________
x=i
#输出二种分制下各局比分,代码略
16.(7分)某会务组根据参会者提交的入住宾馆和到达指定上车点时间的信息,安排车辆
接送 参会者去宾馆。不同宾馆的参会者分开接送,同一宾馆的参会者可同乘一辆车,每辆
车最多接送 v人,每个参会者的等待时间都不超过 w分钟。参会者入住的宾馆和到达上车
点的时间用长度为 7的字符串表示,例如“A-09:15”表示参会者当天入住 A 宾馆,9点 15
分到达上车点,如果 w为 10,那么该参会者最晚 9点 25分出发去宾馆。编写 Python 程
序,统计接送 n个参会者所需的最少车辆数。运行程序,屏幕上按入住宾馆分组输出所有参
会者提交的信息,同一宾馆的按时间先后排列。最后在屏幕末行显示所需的最少车辆数。
(1)如图所示为存储时间信息的文本文件,如果每辆车最多接送 4 人,每个参会者的等
待时间不超过 10 分钟,接送所有到 A 宾馆的参会者最少需要____________辆车;
a=[0]
n,v,w=0,5,10
for line in open("time.txt","r"):
a.append(line)
n+=1
a[0]=n
for i in range(n+1):
print(a[i])
print("读取文件结束,共",n,"条数据")
def getDif(ts1,ts2): # 返回 ts1到 ts2的时长(单位:分)
t=(int(ts2[:2])-int(ts1[:2])-1)*60+(60-int(ts1[-2:])+int(ts2[-2:]))
return t
def getCnt(first,last): # 返回从 first 到 last 所需车辆数量
p,k=first,1
s1=a[first][2:]
信息技术 第 7页(共 8页)
for i in range(first+1,last+1):
s2=a[i][2:]
t=getDif(s1,s2)
if _______ :
k+=1
p=i
_____
return k
j,sum=1,0
a.append("\n") # 虚设一条空记录,使首字母不同
for i in range(1,n+2):
if a[i][0]!=a[j][0]:
______
j=i
print("\n需要的车辆数量为",sum)
(2)为实现以上功能,在划线处填上合适代码。
信息技术 第 8页(共 8页)
2023届高三信息技术一轮复习《选修一》专题测试答案
(选择题速查 CBDBA DCBDC CC)
1.C
【详解】
本题主要考查链表数据结构。有序链表:1->3->5->6->8->11->15->18->20,则一级索引
中的关键节点为 1,5,8,15,20(取奇数位);二级索引中的关键节点为 1,8,20(取首尾以
及中间元素);若要在建立的一级索引的基础上插入元素 7,则需要比较 4次即可找到 7插
入的位置,首先分别与 1、5、8比较,其次与 6比较共 4次;若要在建立的二级索引的基
础上查找元素 18,则需要比较 4次就可以找到元素 18,分别与 8、20比较,再与 19、18
比较,共 4次,故本题选 C选项。
2.B
【详解】
本题主要考查栈数据结构。栈是先进后出(FILO)表。它的数据元素只能在同一端(称为
栈顶)进行操作,添加(进栈),删除(出栈);pop()方法可以删除列表的尾元素(相当于
栈的“出栈”操作);append方法可以在列表尾部添加一个数据元素(相当于栈的“入栈”操
作),故本题选 B选项。
3.D
【详解】
本题主要考查数据结构。任何一个非空树均仅有一个称为根的节点,如图中 A,n=0时为空
树;当 n>0时,其余节点可分为 m ( m≥0)个互不相交的有限集合,其中每个集合又是一棵
树,并称为根的子树;节点 A为根节点,B、C、D为 A的子树的根节点,同理,E、F、G是
B的子树的根节点,B是 E、F、G的父节点;在树结构中,数据元素之间是一对多的关系,
故本题选 D选项。
4.B
【详解】
本题主要考查二叉树的遍历。前序遍历是“根左右”,中序遍历是“左根右”,一棵二叉树的
前序遍历结果为 JFDECBHAIG,中序遍历结果为 DFEJAHBICG,则该二叉树如下:
由图可知,该二叉树的深度为 5,故本题选 B选项。
5.A
【详解】
本题主要考查冒泡和选择排序算法。冒泡排序(Bubble Sort)将一个列表中的两个元素进
行比较,并将最小的元素交换到顶部。两个元素中较小的会冒到顶部,而较大的会沉到底部,
该过程将被重复执行,直到所有元素都被排序。选择排序(Select Sort) 是直观的排序,
通过确定一个 Key 最大或最小值,再从待排序的的数中找出最大或最小的交换到对应位置,
再选择次之。选择排序需要交换 5次,第一次是 5和 0交换,变为 2、3、4、0、1、5;第
二次是 4和 1交换,变为 2、3、1、0、4、5;第三次是 3和 0交换,变为 2、0、1、3、4、
5;第四次是 2和 1交换,变为 1、0、2、3、4、5;第五次是 1和 0交换,变为 0、1、2、
3、4、5。冒泡排序需要 9次交换,第一次是 5分别和 1、0交换,共 2次,变为 2、3、4、
9/4
1、0、5;第二、三、四次是 2、3、4分别和 1、0交换,共 6次,变为 1、0、2、3、4、5;
第五次是 1和 0交换,变为 0、1、2、3、4、5,一共 2+6+1=9次,故本题选 A选项。
6.D
本题主要考查迭代算法。迭代法是用计算机解决问题的一种基本方法,它让计算机对一组指
令或一定步骤进行重复执行,在每次执行这组指令或这些步骤是都从变量的原值推出他的一
个新值,用迭代法解决问题,要考虑迭代的初值、迭代的过程、迭代的结束或迭代的次数。
简单地说就是运算过程中的变量的不断交替,分析程序可知,辗转相除法求最大公约数采用
的算法是迭代法,故本题选 D选项。
7.C
【详解】
本题主要考查递归算法及 Python程序实现。由下文 if条件分支代码可知,此处先递归计
算 x^n/2,即 t=fun(x,n//2),如果 n是偶数,则返回 x*t*t,如果 n是奇数,则直接
返回 t*t,故本题选 C选项。
8.B
【详解】
本题主要考查冒泡排序算法。分析程序,外层循环变量 i的范围是 0~n-1,该程序实现升序
排序,比较的是索引 j与 j+1,内层循环可以从左往右比较每次将一个最大值放到最右边,
代码为 range(n-i-1);也可以从右往左比较交换,每次将一个最小值放到最左边从而实现
升序排序,代码为 range(n-2,i-1,-1),故本题选 B选项。
9.D
【详解】
本题主要考查链表及 Python程序。分析程序可知,a是双向链表,ans=head=3,故链表
数据值依次为 6->3->2->8->8;程序运行结束后,ans=1,a[ans][0]=8;a[0][2]的值为
1,head=3,双向链表 a的头节点数据值为 6;a[1][1]的值为 0,双向链表 a的尾节点数
据值为 8,故本题选 D选项。
10.C
【详解】
本题主要考查二分查找及 Python程序实现。分析程序可知,当不满足 key==p[m]时,循环
执行次数大于 2,故选项 A不可能,同理当满足 if判断条件,执行 s +="M"后退出循环,
故选项 B也不可能。验证选项 C,当 45// 2=5,p[5]=69,j=m-1=4,s=s+"L"="RL",m= (4+4) // 2=4,a(4)=45,i=m+1=5,
s=s+"R"="RLR",退出循环条件,故选项 C可能。同理选项 D不可能,故本题选 C选项。
11.C
【详解】
本题主要考查 Python程序的执行。第一次循环后 start=2,qu[0]=wz[start]=2;第二
至第七次循环后,qu[1]=5,qu[2]=1,qu[3]=6,qu[4]=4,qu[5]=0,qu[6]=3。h初值
为 0,执行完最后一个 while循环,即根据列表 qu的值从 wm中取对应的元素拼接到 mm中,
mm=mm+wm[qu[h]],程序运行后,显示的结果为 mm="cfbgead",故本题选 C选项。
12.C
【详解】
本题主要考查队列数据结构及 Python程序实现。分析程序可知,listque.append( )语
句的作用是输入停车车牌;listque.pop(0)表示开车离开,删除停车车牌;此程序的数据
结构方式是先进先出的队列;while(True)语句表示永远执行循环,故本题选 C选项。
13. i = 1 a[j][1] > a[j-1][1] zs + 1
i > mm and a[i][1] != a[i-1][1] 或 i > mm and a[i][1] < a[i-1][1]
【详解】(分值 1+1+2+2)
本题主要考查 Python程序的综合应用。①使用嵌套循环进行排序,变量 i每次递增 1,可
知变量 i的初值为 1,故填 i = 1。②进行降序排序,此处比较索引为 j与 j-1的成绩,当
a[j][1] > a[j-1][1]时,交换以完成降序,故填 a[j][1] > a[j-1][1]。③此处通过循
环输出最终的进面人信息,总人数为 zs。range(start, stop, [step]),start: 计数
10/4
从 start 开始。默认是从 0 开始。例如 range(5)等价于 range(0, 5);stop: 计
数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有 5;
step:步长,默认为 1。例如:range(0, 5) 等价于 range(0, 5, 1)。故此处填 zs +
1。④该分若有同分者可一同参加面试,故加框处还要判断最后一名是否有同分,故应改为 i >
mm and a[i][1] != a[i-1][1] 或 i > mm and a[i][1] < a[i-1][1]。
14. top>-1 and hb<=len(b)
stack[top]==b[hb] hb+=1 stack[top]!=b[hb]
【详解】(分值 2+1+1+2)
本题主要考查 Python程序及栈数据结构。①由最后一个 elif判断条件“ha==len(a)”以及
最后一个 if分支结构(当 top=-1时输出 s),可知加框处应改为 top>-1 and hb<=len(b)。
②此处是通过 while循环输出所有符合条件的栈元素,条件是栈顶元素等于列表 b中索引为
hb的值,故此处填 stack[top]==b[hb]。③当栈顶元素出栈后,则需要更新 top=top-1,
hb=hb+1,继续判断下一个栈元素是否需要出栈,故此处填 hb+=1。④如果 ha==len(a) and
top>-1说明 a中所有元素均已入栈且此时栈中还有元素,由代码“print("无法调度")”可
知此时栈顶元素与 b(hb)不相等,无法调度,故此处填 stack[top]!=b[hb]。
15. 11:13 (a>=fz or b>=fz) and abs(a-b)>=2 h2=i-x-h1 h1=0
【详解】(分值 1+2+2+2)
本题主要考查 Python程序的综合应用。①如果记录是
wwwffffffffffwfwwfwwfwfwfffffffwwwwwfffwf,11 分制比赛的第一局小明与对手的
比分是 4:11,第二局小明与对手的比分是 11:13。②当任一方得分大于等于对应的分制,且
领先对方 2分及以上,领先一方赢一局,abs是求绝对值函数,故此处 if判断条件是(a>=fz
or b>=fz) and abs(a-b)>=2。③变量 h1记录小明的得分,h2记录对手的得分,因为当
小明得分为 1时则对手得分为 0,否则反之,x记录上一轮胜负局的终点,i是本轮当前位
置,故 h2=i-x-h1。④如果 check(h1,h2,21)为真,表示本轮已分出胜负,则更新 h1为 0
继续下一轮计算判断,故填 h1=0。
16. 3 i- p+1>v or t>w或 i- p=v or t>w s1=s2或 s1 =a[i][2:]
sum= sum+getCnt(j, i-1)
【详解】(分值 1+2+2+2)
本题主要考查 Python程序的综合应用。①去 A宾馆的第 1个参会者到达指定上车地点的时
间是 08: 03,第 2个参会者达到设计为 08: 38,两者时间超出 10分钟,故第 1个人单独
乘坐一辆车,第 3, 4, 5个参会者到达时间和第 2个参会者到达时间之差小于 10,故第 2-5
人合乘一辆车,第 6个人单独乘一辆车,故最少需 3辆车。②p指向去某宾馆的第一个参会
者,提取该参会者到达指定上车地点的时间存 s1,从下一个参会者开始逐个往后遍历,提
取当前参会者到达指定上车地点的时间存 s2,调用自定义函数 getDif (s1.s2)就算这两
人达到上车的时间差为 t,若大于 w,即去该宾馆的第一个上车人的等待时间大于 w,则需
开新的一辆车子,或该车已满,即从 p到第 i个参会者的人数大于 v,也需开新的一辆车子,
故此处填写 i- p+1>v or t>w或 i- p=v or t>w。③车子数量 k加 1,p调整为 i,指向
新车辆的第一个上车的人,s1调整为 s2,记录该车第一个人的上车时间,故此处填写为
s1=s2或 s1 =a[i][2:]。④遍历参会者的信息,即数组 a,若当前提交信息中的宾馆和前
一相邻信息中的宾馆不同,则表示同一宾馆的记录已经遍历完毕,j指向该宾馆第一个参会
者,i-1指向该宾馆最后一个参会者,调用自定义函数 getCnt计算从第 j到 i-1个参会者
所需的车辆数,累加到 sum中,再调整为 i,即指向下一宾馆的第一个参会者,故此处填
sum= sum+getCnt(j, i-1) 。
11/4