资源简介 2023届高三信息技术一轮复习《选修一》专题测试全卷共 8页,满分 50分,考试时间 45分钟。一、选择题(均为单选,每题 2分,共 24分)1.有一组含有 9个元素的有序链表:1->3->5->6->8->11->15->18->20,现为该链表增设关键节点,建立索引,下列说法不正确的是A.一级索引中的关键节点为 1,5,8,15,20B.二级索引中的关键节点为 1,8,20C.若要在建立的一级索引的基础上插入元素 7,则需比较 3次即可找到 7插入的位置D.若要在建立的二级索引的基础上查找元素 18,则需比较 4次即可找到元素 182.关于栈,下列说法错误的是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.5C.4 D.35.分别用选择和冒泡排序算法对数据序列“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%nreturn na=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 xt=fun( )if n%2==1:return x*t*telse:return t*tA.n//2,x B.n/2,x C.x,n//2 D.x,n/28.有如下程序段: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=3p=a[head][2]while p!=-1:if a[ans][0] < a[p][0] :ans=pp=a[p][2]print(ans,a[ans][0],sep=",")则程序运行后,下列说法正确的是A.链表数据值依次为 2->8->3->6->8B.程序输出结果为 4,8C.a[0][2]的值为 1,双向链表 a的头节点数据值为 2D.a[1][1]的值为 0,双向链表 a的尾节点数据值为 8信息技术 第 2页(共 8页)10.有某算法的程序段如下:i = 0; j = 6; s = “”key = int( random( ) * 100 )while i <= j:m = ( i + j ) // 2if key == p[ m ]:s +=” M ”breakelif key < p[ m ]:j = m - 1s += “ L ”else:i = m+1s += ” R ”print( s )列表 p中的元素依次为“24, 35, 38, 41, 45, 69, 78”。执行该程序段后显示的内容可能为A.RL B.LMRC.RLR D.LRLM11.有如下程序:wz=[0,1,2,3,4,5,6]start=0qu=[0]*len(wz)wm="abcdefg"h=0;t=0while len(wz)>0:for i in range(2):start=(start+1)%len(wz)qu[t]=wz[start]t=t+1wz.pop(start)mm=""while hmm=mm+wm[qu[h]]h=h+1print(mm)程序运行后,显示的结果为( )A.bdfaecg B.bdfacegC.cfbgead D.cfbeadg12.单车道胡同路边停车,先进去的车只能从另一出口出来,阅读程序代码: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 :breaki += 1zs = 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=0stack[top]=a[0]s=str(a[0])+"进"ha=1;hb=0while :while top>-1 and _______ :s=s+str(stack[top])+"出"top-=1____if hatop+=1stack[top]=a[ha]s=s+str(a[ha])+"进"ha+=1信息技术 第 5页(共 8页)elif ha==len(a) and top>-1 and _______ :print("无法调度")breakif 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分制对于慢热型选手不利。例如有如下比分记录:"fffffffffffffwwwffffffffwwwfwfwfwffwwwfffwwffwwffffwwwwffwwwwffwwwfffwwwwwffwwwwffww"。采用 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=Falseif _____________:flag=Truereturn flags=input("输入比赛记录:")a=[0]*1000b=[0]*100c=[0]*100j=0;k=0;x=-1f1=0;f2=0;h1=0;h2=0for i in range(len(s)):if s[i]=="w":a[i]=1n=len(s)for i in range(n):if a[i]==1:f1=f1+1else:f2=f2+1h1=h1+a[i]________________if check(f1,f2,11):b[j]=f1;b[j+1]=f2j=j+2f1=0;f2=0信息技术 第 6页(共 8页)if check(h1,h2,21):c[k]=h1;c[k+1]=h2k=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,10for line in open("time.txt","r"):a.append(line)n+=1a[0]=nfor 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 tdef getCnt(first,last): # 返回从 first 到 last 所需车辆数量p,k=first,1s1=a[first][2:]信息技术 第 7页(共 8页)for i in range(first+1,last+1):s2=a[i][2:]t=getDif(s1,s2)if _______ :k+=1p=i_____return kj,sum=1,0a.append("\n") # 虚设一条空记录,使首字母不同for i in range(1,n+2):if a[i][0]!=a[j][0]:______j=iprint("\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/41、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 + 1i > 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) andtop>-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>=fzor 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 展开更多...... 收起↑ 资源预览