资源简介 阶段检测(第三、四章)一、 选择题(本大题共12小题,每小题列出的四个备选项中只有一个是符合题目要求的)1. 有如下Python程序段:s="2022 Hope To Get Out Of The Epidemic"t=""for i in s: if i<"a" or i>"z": t="" t=i+tprint(t)该程序运行后,最后显示的内容是( A )A. cimedipEB. cimedipC. cimedD. cime【解析】 该程序中语句if i<"a" or i>"z"和t=""的功能是当字符i为非小写字母时,变量t就清空。因此在“Epidemic”出现前,变量t中的内容为空。这样变量t中最后的内容为“Epidemic”的重新组合。语句t=i+t的功能就是将“Epidemic”进行逆向组合。A正确。2. 有后缀表达式“13 + 2 * 3 +2 *”,现利用栈计算该表达式:从左向右扫描,遇到数字时,数字入栈;遇到运算符时,两个元素出栈,用运算符计算,所得结果入栈,如此反复操作,直到扫描结束,栈顶元素是( B )A. 21 B. 22C. 23 D. 24【解析】 本题考查栈的相关操作。依题意可得表达式为:((1+3)*2+3)*2=22,B正确。3. 有如下Python程序段:import randoma=[random.randint(1,5) for i in range(5)]q=[1,3,5,2,1,0]head,tail=0,len(q)-1i=0while head!=tail: c=0 while q[head]!=a[i] and c<(tail-head)%len(q): q[tail]=q[head] head=(head+1)%len(q) tail=(tail+1)%len(q) c+=1 if a[i]==q[head]: head=(head+1)%len(q) i+=1 else: breakprint((tail-head)%len(q))执行该程序段后输出的值为3,则列表a的值不可能是( A )A. [3, 2, 1, 4, 1] B. [5, 2, 4, 1, 1]C. [1, 3, 4, 2, 3] D. [3, 5, 5, 3, 1]【解析】 本题考查随机数及循环队列知识。本题运算量较大,重点考查了学生的逻辑判断及模拟运算能力。由代码可知,最初数组a产生5个1~5之间的随机整数。最后(tail-head)%len(q)的结果为3,意味着最终循环队列q中的元素数量为3。将各选项中的数据代入模拟可知,A中的数据最终队列中的元素数量只能为2,最终其他参数是head=5,tail=1,c=0,i=3,符合题意。B、C、D的最终输出都是3,均不符合题意。4. 设栈S初始状态为空,元素a,b,c,d,e,f依次入栈,出栈顺序为b,d,c,f,e,a,那么栈容量至少应该是( D )A. 6 B. 5C. 4 D. 3【解析】 本题考查栈的基本操作。出栈顺序为b,d,c,f,e,a,则a入→b入→b出→c入→d入→d出→c出→e 入→f入→f出→e出→a 出,因此栈容量至少是3。D正确。5. 若字符串s1="pYTHON学习",有如下Python代码段:s2="";i=0while i if "A"<=s1[i]<="Z": s2=s2+chr(ord(s1[i])+32) elif "a"<=s1[i]<="z": s2=s2+chr(ord(s1[i])-32) else: s2 = s2 + s1[i] i+=1 print(s2)执行该代码段后,字符串s2的值是( C )A. PYTHON学习B. PythonC. Python学习D. python学习【解析】 本题考查字符处理知识。ord()函数的作用是求字符的十进制ASCII值,chr()函数是将十进制数值转化成它对应的ASCII字符,因此这段程序的意思是当s1[i]为大写字母时,将其转换成对应的小写字母,当s1[i]为小写字母时,将其转换成对应的大写字母,而其他字符保持不变。C正确。6. 某二叉树的先序遍历为ABFECD,中序遍历为BEFACD,则后序遍历为( D )A. FEBACD B. BFECDAC. EFBCDA D. EFBDCA【解析】 本题考查二叉树的遍历。由先序遍历可知A为树根,由中序遍历可知根节点A的左子树是BEF,右子树为CD,那么后序遍历的最后3个节点是DCA,D正确。7. 有如下Python程序段:n="p4y2t3h1o9n4";p=""for i in n: if "0"<=i<="9": if p=="": p+=i elif i>=p[-1]: p+=i elif i p=i执行该程序段后,p的值是( C )A. "239"B. "14"C. "19"D. "4"【解析】 本题考查字符串及字符串的比较等知识。由题可知,字符串p中存储字符串n中的数字字符(以下用“p”指代该字符串,方便理解)。按照规则,每次从n中取出数字字符和p中的字符进行判断:①若大于等于最后的字符,直接追加进p; ②若小于第一个字符,直接替换p中的字符。p依次指向的字符串是 4 2 23 1 19 19 。C正确。8. 有如下Python程序段:s=input("请输入字符串:")ans=0;t=""for c in s: if "0"<=c <= "9": t+=c else: ans+=int(t) t=""print(ans)运行该代码段后,输入“2024-06-06”,则程序输出的结果为( C )A. 24 B. 2024C. 2030 D. 2036【解析】 本题考查字符串知识。程序的功能是提取s中的连续数字并求整数和,由于最后的06后面没有非数字字符,因此该数不能累加到s中,故s=2024+6=2030,C正确。9. 一个栈的入栈序列为1,2,3,4,5,则其出栈序列不可能为( C )A. 1,2,3,4,5B. 4,5,3,2,1C. 4,3,5,1,2D. 3,2,1,5,4【解析】 本题考查栈的知识。若4先出栈,则后续出栈的顺序应为3,2,1,C符合题意。10. 某算法利用“栈”的思想进行字符串处理,其步骤如下:①创建长度为n的空栈,字符依次入栈;②当达到栈满状态或数据全部入栈时,字符依次出栈,按照出栈顺序连接成新字符串;③若还有未处理的字符,则重复步骤①②,直到全部字符处理完毕。实现该功能的Python程序如下:s=input("请输入字符串:")n=5;st=[""]*ntop=-1;i=0;m=""while i while (1) and i (2) st[top]=s[i] i+=1 while top!=-1: m+=st[top] (3) print("密文:",m)加框处(1)(2)(3)的可选代码如下:①top-=1 ②top+=1 ③top+1下列选项中,代码顺序正确的是( C )A. ④②①B. ③①②C. ③②①D. ④①②【解析】 本题考查数据结构栈的出栈入栈基本操作。条件(1)处后面的相应代码是入栈的操作,那么栈不能为满的状态。栈满时top=n-1,所以此处代码:top+111. 如图所示的二叉树的中序遍历序列是( D )A. G-D-B-H-I-F-E-C-AB. D-G-B-A-C-E-H-F-IC. A-B-D-G-C-E-F-H-ID. D-G-B-A-E-C-H-F-I【解析】 本题考查二叉树的遍历。中序遍历是“左—根—右”的顺序,由于根是节点“A”,选A、C错误。按照中序遍历规则可知,其序列应该是D-G-B-A-E-C-H-F-I,选B错误,选D正确。12. 若一棵二叉树的中序遍历序列为BIGDHAECF,后序遍历序列为IGHDBEFCA,则该二叉树的前序遍历序列为( D )A. ABCDEFGHIB. ABDGHICEFC. ABDHGICEFD. ABDGIHCEF【解析】 本题考查二叉树的遍历。“A”是根节点,那么“ECF”在右子树,A错误。左子树的根节点是“B”,再根据中序的“IGDH”,后序的“IGHD”,可知“D”是这个子树的根节点。“H”在右子树,前序遍历一定在最后,B、C错误,D正确二、 非选择题(本大题共3小题)13. 编写程序,实现如下功能:分别输入英文句子和关键词,运行程序后在英文单词中查找包含关键词的字符串,若查找成功,则输出该单词;若查找失败,则显示“查找无结果”。若某单词多次符合条件,则只显示一次。运行界面如图所示。请输入英文单词:A friend in need is a friend indeed请输入关键词:in[ in , indeed ]实现上述功能的Python程序如下,请回答下列问题:(1)请在画线处填入合适的代码。(2)加框处的程序代码有错误,请改正。s = input("请输入英文单词:")kword = input("请输入关键词:")a = s.split() #将字符串s切片为列表,以空格为间隔b=[]flag = Falsefor i in ① a : if len(i)>=len(kword): for j in range(len(i)): ② p=i[j:j+len(kword)] if p==kword: b.append(i) #在列表b末尾增加元素i ③ flag=True breakif flag: print(a)else: print("查找无结果")【答案】 (2)print(b)【解析】 本题考查字符串处理知识。①根据题意可知,先是将字符串s切割并存入字符串类型的列表a,故此处填入a。②列表b用于存放匹配成功的单词,若某单词的长度大于或等于关键词的长度,则进行查找,外循环变量i列举单词,内循环j枚举单词中的位置信息,故此处需要关于p的表达式,根据题意可知,需要将单词i进行切片,其长度应该是kword的长度,故答案是p=i[j:j+len(kword)]。③flag是找到与否的标志,若找到,则令flag=True。(2)匹配到的单词存放于列表b中,而不是列表a中。14. 利用栈的“先进后出”的特点可以实现数的进制转换。有如下Python程序段,实现的是十进制数转换为十六进制数的功能,运行界面如图所示。请输入十进制数:90其对应的十六进制数为:5A请回答下列问题:(1)十进制数78,其对应的十六进制数为 4E 。 (2)请在画线处填入合适的代码。s=[""]*100top=-1n=int(input("请输入十进制数: "))while n>0: top+=1 r=n%16 if r>9: ① s[top]=chr(r+55) else: s[top]= r ② n=n//16 print("其对应的十六进制数为:",end="")while top >-1: print(s[top],end="") ③ top-=1 【解析】 本题考查栈的应用。利用除16取余倒排法的算法。(1)十进制数78,其十六进制数为4E。(2)①top是栈顶,该处功能是实现将取得的余数进行进栈操作。若余数大于9,则应该将其转换为相应的A~F的大写英文字符,利用数字和ASCII码的规律可知,10加上55,对应字符恰好为英文字符“A”。因此答案是chr(r+55)。②每次取余后,n都要被16整除,因此更新n的值为新值,直到n=0为止。③将所有得到的余数出栈,top指针每次减1,直到top=-1结束,此时所有数据出栈完毕。15. 某校学生会要从候选人A和B中选举一个会长,每个候选人都有各自的支持方。现在进行几轮选举。在每一轮的选举中,当前成员可以直接剥夺对方阵营中另一名成员的选举权,即让对方成员在这一轮和随后的几轮中都丧失选举权。在选举过程中,若有选举权的成员都来自同一个阵营,则该阵营胜利。字母A和B分别代表两位候选人,输入一个字符串代表每名成员的阵营。例1:输入“ABB”,输出结果为B,即候选人B为会长。例2:输入“AAABBBB”,输出结果为A,即候选人A为会长。请在画线处填入合适的代码。s1=input("请输入投票字符串:")queA=[""]*100; queB=[""]*100headA=headB=0tailA=tailB=0n=len(s1)for i in range(n): #按选票信息分成A、B两个阵营,用编号记录较量时的出现的次序 if ① s1[i]== A : queA[tailA]=i tailA+=1 else: queB[tailB]=i tailB+=1while ② headA if ③ queA[headA] queA[tailA]=queA[headA]+n #加n后的编号是下一轮,用编号次序比较(编号不重复) tailA+=1 else: queB[tailB]=queB[headB]+n tailB+=1 headA+=1; headB+=1if ④ headB print("B")else: print("A")【解析】 ①由于入队的是队列queA,可以确定当前候选人为"A",所以此处应填s1[i]== A 。②循环题的语句是队列queA或队列queB入队,因此此处应填headA一、 选择题(本大题共12小题,每小题列出的四个备选项中只有一个是符合题目要求的)1. 有如下Python程序段:s="2022 Hope To Get Out Of The Epidemic"t=""for i in s: if i<"a" or i>"z": t="" t=i+tprint(t)该程序运行后,最后显示的内容是( )A. cimedipEB. cimedipC. cimedD. cime2. 有后缀表达式“13 + 2 * 3 +2 *”,现利用栈计算该表达式:从左向右扫描,遇到数字时,数字入栈;遇到运算符时,两个元素出栈,用运算符计算,所得结果入栈,如此反复操作,直到扫描结束,栈顶元素是( )A. 21 B. 22C. 23 D. 243. 有如下Python程序段:import randoma=[random.randint(1,5) for i in range(5)]q=[1,3,5,2,1,0]head,tail=0,len(q)-1i=0while head!=tail: c=0 while q[head]!=a[i] and c<(tail-head)%len(q): q[tail]=q[head] head=(head+1)%len(q) tail=(tail+1)%len(q) c+=1 if a[i]==q[head]: head=(head+1)%len(q) i+=1 else: breakprint((tail-head)%len(q))执行该程序段后输出的值为3,则列表a的值不可能是( )A. [3, 2, 1, 4, 1] B. [5, 2, 4, 1, 1]C. [1, 3, 4, 2, 3] D. [3, 5, 5, 3, 1]4. 设栈S初始状态为空,元素a,b,c,d,e,f依次入栈,出栈顺序为b,d,c,f,e,a,那么栈容量至少应该是( )A. 6 B. 5C. 4 D. 35. 若字符串s1="pYTHON学习",有如下Python代码段:s2="";i=0while i if "A"<=s1[i]<="Z": s2=s2+chr(ord(s1[i])+32) elif "a"<=s1[i]<="z": s2=s2+chr(ord(s1[i])-32) else: s2 = s2 + s1[i] i+=1 print(s2)执行该代码段后,字符串s2的值是( )A. PYTHON学习B. PythonC. Python学习D. python学习6. 某二叉树的先序遍历为ABFECD,中序遍历为BEFACD,则后序遍历为( )A. FEBACD B. BFECDAC. EFBCDA D. EFBDCA7. 有如下Python程序段:n="p4y2t3h1o9n4";p=""for i in n: if "0"<=i<="9": if p=="": p+=i elif i>=p[-1]: p+=i elif i p=i执行该程序段后,p的值是( )A. "239"B. "14"C. "19"D. "4"8. 有如下Python程序段:s=input("请输入字符串:")ans=0;t=""for c in s: if "0"<=c <= "9": t+=c else: ans+=int(t) t=""print(ans)运行该代码段后,输入“2024-06-06”,则程序输出的结果为( )A. 24 B. 2024C. 2030 D. 20369. 一个栈的入栈序列为1,2,3,4,5,则其出栈序列不可能为( )A. 1,2,3,4,5B. 4,5,3,2,1C. 4,3,5,1,2D. 3,2,1,5,410. 某算法利用“栈”的思想进行字符串处理,其步骤如下:①创建长度为n的空栈,字符依次入栈;②当达到栈满状态或数据全部入栈时,字符依次出栈,按照出栈顺序连接成新字符串;③若还有未处理的字符,则重复步骤①②,直到全部字符处理完毕。实现该功能的Python程序如下:s=input("请输入字符串:")n=5;st=[""]*ntop=-1;i=0;m=""while i while (1) and i (2) st[top]=s[i] i+=1 while top!=-1: m+=st[top] (3) print("密文:",m)加框处(1)(2)(3)的可选代码如下:①top-=1 ②top+=1 ③top+1下列选项中,代码顺序正确的是( )A. ④②①B. ③①②C. ③②①D. ④①②11. 如图所示的二叉树的中序遍历序列是( )A. G-D-B-H-I-F-E-C-AB. D-G-B-A-C-E-H-F-IC. A-B-D-G-C-E-F-H-ID. D-G-B-A-E-C-H-F-I12. 若一棵二叉树的中序遍历序列为BIGDHAECF,后序遍历序列为IGHDBEFCA,则该二叉树的前序遍历序列为( )A. ABCDEFGHIB. ABDGHICEFC. ABDHGICEFD. ABDGIHCEF二、 非选择题(本大题共3小题)13. 编写程序,实现如下功能:分别输入英文句子和关键词,运行程序后在英文单词中查找包含关键词的字符串,若查找成功,则输出该单词;若查找失败,则显示“查找无结果”。若某单词多次符合条件,则只显示一次。运行界面如图所示。请输入英文单词:A friend in need is a friend indeed请输入关键词:in[ in , indeed ]实现上述功能的Python程序如下,请回答下列问题:(1)请在画线处填入合适的代码。(2)加框处的程序代码有错误,请改正。s = input("请输入英文单词:")kword = input("请输入关键词:")a = s.split() #将字符串s切片为列表,以空格为间隔b=[]flag = Falsefor i in ① : if len(i)>=len(kword): for j in range(len(i)): ② if p==kword: b.append(i) #在列表b末尾增加元素i ③ breakif flag: print(a)else: print("查找无结果")14. 利用栈的“先进后出”的特点可以实现数的进制转换。有如下Python程序段,实现的是十进制数转换为十六进制数的功能,运行界面如图所示。请输入十进制数:90其对应的十六进制数为:5A请回答下列问题:(1)十进制数78,其对应的十六进制数为 。 (2)请在画线处填入合适的代码。s=[""]*100top=-1n=int(input("请输入十进制数: "))while n>0: top+=1 r=n%16 if r>9: ① else: s[top]= r ② print("其对应的十六进制数为:",end="")while top >-1: print(s[top],end="") ③ 15. 某校学生会要从候选人A和B中选举一个会长,每个候选人都有各自的支持方。现在进行几轮选举。在每一轮的选举中,当前成员可以直接剥夺对方阵营中另一名成员的选举权,即让对方成员在这一轮和随后的几轮中都丧失选举权。在选举过程中,若有选举权的成员都来自同一个阵营,则该阵营胜利。字母A和B分别代表两位候选人,输入一个字符串代表每名成员的阵营。例1:输入“ABB”,输出结果为B,即候选人B为会长。例2:输入“AAABBBB”,输出结果为A,即候选人A为会长。请在画线处填入合适的代码。s1=input("请输入投票字符串:")queA=[""]*100; queB=[""]*100headA=headB=0tailA=tailB=0n=len(s1)for i in range(n): #按选票信息分成A、B两个阵营,用编号记录较量时的出现的次序 if ① : queA[tailA]=i tailA+=1 else: queB[tailB]=i tailB+=1while ② : #当两阵营中均有成员时,进行较量 if ③ : #根据前面记录的编号,直接用编号进行较量 queA[tailA]=queA[headA]+n #加n后的编号是下一轮,用编号次序比较(编号不重复) tailA+=1 else: queB[tailB]=queB[headB]+n tailB+=1 headA+=1; headB+=1if ④ : # 若B阵营中还有成员,则B阵营胜利 print("B")else: print("A") 展开更多...... 收起↑ 资源列表 阶段检测(第三、四章)(原卷版).docx 阶段检测(第三、四章)(解析版).docx