资源简介 阶段检测(第一、二章)一、 选择题(本大题共12小题,每小题列出的四个备选项中只有一个是符合题目要求的)1. 下列关于链表的说法,错误的是( B )A. 链表占用的存储空间不固定B. 链表中不一定有头指针C. 链表的节点由数据区域和指针区域两部分组成D. 在链表中插入一个节点,只需要修改部分节点的指针【解析】 本题考查链表知识。链表中必须要有头指针才能正常工作,B符合题意。2. 文字处理软件Word的“撤销”操作,符号输入及撤销时,内部所依托的数据结构是( B )A. 队列 B. 栈C. 链表 D. 数组【解析】 本题考查数据结构的相关知识。文字处理软件Word的“撤销”操作,符号输入及撤销时,先输入的最后撤销,最后输入的最先撤销,属于“栈”数据结构的特征。B正确。3. 下列关于数组的说法,正确的是( C )A. 在计算机内部存储时,一维数组是线性存储,二维数组是非线性存储B. 对数组进行操作的过程中,若某些数据元素已被删除,其占用的存储空间也会被释放C. 数组的优点是访问速度快,但删除、插入数据的操作效率较低D. 同一数组元素的数据类型可以不相同,这和Python的列表类型相同【解析】 本题考查数组的相关知识。在计算机内部存储时,一维数组是线性存储,二维数组也是线性存储,A错误。对数组进行操作的过程中,若某些数据元素已删除,其占用的存储空间不会被删除,B错误,C正确。同一数组元素的数据类型是相同的,D错误。4. 下列关于字符串的说法,错误的是( B )A. 字符串是由零个或多个字符组成的有限序列B. 空串是由空格组成的字符串C. 字符串可以比较大小D. 字符串的存储既可以采用顺序存储结构,也可以采用链式存储结构【解析】 本题考查字符串的相关知识。空串是长度为0的字符串,B符合题意。5. 下列关于链表的说法,正确的是( A )A. 插入、删除操作无须移动数据元素B. 链表和数组相同,都属于顺序存储C. 可随机快速访问任何一个数据元素D. 同一链表中每个节点的结构均不同【解析】 链表不属于顺序存储,B错误;数组可随机快速访问任何一个数据元素,C错误;同一个链表中每个节点的结构均相同,D错误。6. 下列关于数组和链表的说法,错误的是( C )A. 链表的各数据的存储空间可以不连续,而数组的存储空间必须连续B. 链表各数据节点的存储顺序与逻辑顺序可以不一致C. 在数组中进行插入或删除元素时,不需要移动元素D. 存储同一序列,数组与链表所需的存储空间大小不同【解析】 本题考查数组和链表的区别。数组进行插入与删除时,需要移动大量的元素,而链表不需要移动,C符合题意。7. 有如下Python程序段:import randoma=[0]*6i=0while i<6: t=random.randint(2,10) if t not in a: a[i]=t i+=1print(a)运行程序后,输出的结果不可能是( D )A. [3, 0, 0, 0, 0, 0] B. [9, 10, 4, 6, 0, 0]C. [2, 3, 4, 5, 6, 7] D. [0, 10, 1, 3, 4, 5]【解析】 本题考查随机数及列表知识。由代码可知,a列表初始值全部为0,经过while循环的处理,列表a元素的值是2~10的不重复随机整数。由于i+=1和if语句对齐,因此不赋值循环也可以进行。因为第一次循环时,产生的随机数t一定不为0,因此一定会对列表a赋值,因此第一个值不可能为0,D符合题意。8. 有如下Python程序段:a = [0]*10s=input("请输入字符串:")n = 0for i in range(len(s)): if "0" <=s[i] <= "9": m = 1 else: m = 2 a[m] = a[m] + 1 if a[m] == 1: n +=1print(n)执行该程序段后,若输入s的内容为“Happy2025”,则输出变量n的值为( B )A. 1 B. 2C. 3 D. 9【解析】 本题考查循环和数组运算知识。由程序可知,数组元素a[1]用于存储数字字符的个数,数组元素a[2]用于存储非数字字符的个数。 当遇到第1个数字或非数字时,a[1]=1和a[2]=1时,执行n=n+1。因此最终n的值为2。本题的易错在于只有当a[m]=1时,才触发计数器n加1,而这样的情况只有两种:a[1]=1和a[2]=1。B正确。9. 数组元素a[0]~a[n-1]已按升序排列,现要将a[pos](0≤pos≤n-1)的值加1,并保持数组的有序性不变,实现该功能的程序段如下,方框中应填入的正确代码是( B )t = a[pos]+1i = poswhile : a[i] = a[i+1] i += 1a[i] = tA. i < n-1 B. i < n-1 and t > a[i+1]C. i < n-1 and a[i] > a[i+1] D. i <= n-1 or t > a[i]【解析】 本题考查数组的插入排序知识。根据代码可知,由于代码中出现了a[i+1] 的表达式,因此循环变量i的取值范围不能等于n-1,否则会产生下标越界的错误,D错误。另外还需要保持数据的升序,因此还需要附加其他条件,A错误。根据代码可知,待排序的数事先已经被暂时存放到变量t中,因此移动数组元素数据时需要比较的是t和其后面的元素a[i+1],只有当t>a[i+1]时,才需要改变元素之间的前后顺序,C错误。10. 数组中保存有n+1个数据,分别保存在a[0]到a[n]中。现需要删除第2个数字(即a[1]处的数字),且要求不能改变其他数字。Python代码如下:a=[4,2,7,5,3,9]n=len(a)-1for i in range( (1) ): (2) a=a[:n]print(a)画线处的可选代码如下:①1,n ②n,1,-1 ③a[i-1] = a[i] ④a[i+1] = a[i] ⑤a[i] = a[i+1] ⑥a[i] = a[i-1]为实现上述功能,画线处应填入的代码是( D )A. ②④ B. ①③C. ②⑥ D. ①⑤【解析】 本题考查通过循环进行数组操作的能力。考虑对于数组a[0]到a[n],删除位置k上的数据,则需要将k+1到n中的数字全部左移,所以题目要求删除a[1]所在位置,需要将位置2到n的数字全部左移1个位置。注意左移时需要从左往右进行,若从右往左将造成数字的覆盖。所以循环时,每次将后一个赋值给当前一个即可,最后删除最后一个数。D正确。11. 有如下Python程序段:s=[[7,2],[5,4],[4,1],[9,-1],[1,3]]p=head=2while s[p][1]!=-1: print(s[p][0],end="->") p=s[p][1]执行该代码后,输出结果为( C )A. 4->5->1 B. 7-> 4->5->1->C. 4->5->1-> D. 4->5->1->9【解析】 本题考查链表的遍历。由于循环的条件是s[p][1]!=-1,也就是当前头指针p的下一个指针域不是最后一个(指针域为-1),则输出该数据域。因此最后的9不能输出,C正确。12. 使用Python程序在链表a中删除一个数据data,代码如下:import randoma=[[87,1],[93,3],[97,5],[95,2],[80,0],[98,-1]]head=4x=random.randint(0,len(a)-1)data= ① q=headwhile q!=-1: if ② : if q==head: head=a[q][1] else: a[p][1]=a[q][1] break else: ③ q=a[q][1]则画线处应填入的代码是( C )A. ①a[0][x] ②data==a[q][0] ③p=qB. ①a[0][x] ②data!=a[q][0] ③p=headC. ①a[x][0] ②data==a[q][0] ③p=qD. ①a[x][0] ②data!=a[q][0] ③q=head【解析】 本题考查遍历链表及删除节点操作。由代码可知,x是在二维列表a中任选的一个索引号,此数即为即将从链表中删除的数据data。由于二维列表a中的第一个数为链表的数据域,第二个数为指针域,因此①的位置肯定是a[x][0],A、B错误。接下来在while循环中,此为遍历链表过程中实现删除数据data的过程,当前节点为q节点,p为q的前驱节点。根据代码可知,若找到数据域为data的节点,将该节点删除,故②处的代码是data==a[q][0]。删除当前节点时,又要分为两种情况:该节点是头节点需要更新head的值(head更新为当前节点的下一个节点),若不是头节点,则可以直接删除,删除时只需让前驱节点p指向当前节点q的后继节点即可,即a[p][1]=a[q][1]。若当前节点的数据域不是data,则将当前节点p更新为前驱节点q,并继续检查下一个节点,故③处的代码是p=q。C正确,D错误。二、 非选择题(本大题共3小题)13. 有不同颜色的袜子若干(袜子的颜色用数字编号1~15表示),颜色相同的袜子才能组成一双,其中有几只袜子是落单的,现要求找出落单袜子的颜色以及能够配对的袜子数量。编写程序解决该问题,程序运行后,依次输入袜子的颜色编号(数据之间用空格分隔),输出落单袜子的颜色编号以及能配对的袜子的数量(双)。运行界面如图所示。请输入袜子的颜色编号(1~15),用空格隔开:3 15 4 3 2 4 11 15落单袜子的颜色为:2落单袜子的颜色为:11能配对的袜子有:3双实现上述功能的Python程序如下,请回答下列问题:(1)根据题意,请在画线处填入合适的代码。(2)加框处的程序代码有错误,请改正。s = input("请输入袜子的颜色编号(1~15),中间用空格隔开:")a=s.split() #将字符串s切片为列表,以空格为间隔b=[0]*16 #定义用于装袜子编号的“桶”t = 0 ;c = 0for i in ① a : t = int(i) b[t] = ② b[t]+ 1 for i in range(1,16): if ③ b[i]%2==1 : print("落单袜子的颜色为:" + str(i)) c = c + b[i]%2print("能配对的袜子有:" + str(c)+ "双")【答案】 c + b[i]//2【解析】 本题考查数组应用及循环知识。(1)①for语句,从左向右列举a中的每个元素。②数组a存放不同颜色袜子的数量,此处利用桶的思想进行计数。③袜子成双的话为一对,若某种颜色的袜子数量不是偶数则意味着落单了。(2)变量c用于记录袜子的总双数,因此c + b[i]//2,表示袜子的总双数。14. 中华人民共和国公民身份号码共18位,其中前17位为数字本体码,第18位为校验码。作为尾号的校验码,是按统一的公式计算出来的,校验码的计算方法如下:①将公民身份号码前17位分别乘以不同的系数,系数依次为7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2。②将这17位数字和系数相乘的结果相加。③求用上述相加的和除以11的余数。④余数只可能有0,1, 2... 9,10共11个数字,分别对应校验码1,0,X,9,8,7,6,5,4,3,2。例如,公民身份号码34052419800101001X,计算3*7+4*9+0*10+5*5+...+1*2=189,用189除以11得出余数2,对应的校验码是X。编写 Python程序,判断输入的公民身份号码的校验码是否正确,正确则输出“Yes”,否则输出“No”,请在画线处填入合适的代码。def judge(s): ① n=len(s) if n!=18: return False res=0 for i in range(n-1): ② res+=int(s[i])*v[i] res=res%11 code=m[res] if ③ code==s[-1]或其他等价答案 : return True else: return Falsev=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] #系数m= 10X98765432 #余数对应的校验码s=input()if ④ judge(s)==True 或 judge(s) : print( Yes )else: print( No )【解析】 本题考查字符串、列表和自定义函数等知识。①根据代码 n!=18,返回False,可知这里的变量n得到的是字符串的长度n=len(s)。②根据循环范围range(n-1),以及前后的语句和对变量res的分析,res变量是公民身份号码前17位乘以不同的系数再相加后的结果,对应代码:res+=int(s[i])*v[i],进行数学运算时,一定要注意变量的类型。不一致的情况下做好相应的转换:int(s[i])。③根据函数return的返回情况,这里应该是:code==s[-1]。④代码的绝大部分工作都是自定义函数judge完成,这里只要调用函数即可:judge(s)。15. 传统节日是中华民族悠久历史文化的重要组成部分,记录了中华民族丰富多彩的社会生活,并蕴含着深厚的历史文化内涵。经过信息课的集思广益,我们以链表的形式罗列了以下传统节日:[["元宵节", 11], ["元旦", 0], ["清明节", 4], ["中秋节", 5], ["端午节", 7], ["国庆节", 9], ["社日节", 12], ["中元节", 3], ["冬至节", -1], ["重阳节", 13], ["寒食节", 2], ["龙抬头", 6], ["上巳节", 10],["下元节", 8]]。请回答下列问题:(1)当head为1的时候,想要在原始链表a中访问端午节,需要先访问 7 (填数字)个节日。为更全面地了解我国的传统节日,小明上网搜索后,发现了几个问题: ①他发现元旦和国庆节不是我国的传统节日。②除了上述节日外,他还查阅到春节、七夕、除夕等也都是我国的传统节日。小明编写程序对链表进行更正,程序如下所示:a = [["元宵节", 11], ["元旦", 0],["清明节", 4], ["中秋节", 5],["端午节", 7], ["国庆节", 9],["社日节", 12], ["中元节", 3], ["冬至节", -1], ["重阳节", 13],["寒食节", 2],["龙抬头", 6],["上巳节", 10],["下元节", 8]]head = 1p = headwhile a[p][1] != -1: if a[p][0] == "元旦" and p==head: head=a[p][1] elif ① a[a[p][1]][0]=="国庆节" : a[p][1] = a[a[p][1]][1] else: p = a[p][1] a. append(["春节", head])② head=len(a)-1 p = headwhile a[p][0] != "端午节": p = a[p][1]a. append(["七夕", a[p][1]])a[p][1] = len(a)- 1while a[p][0] != -1 : p = a[p][1]a. append(["除夕", a[p][1]])a[p][1] = len(a)- 1# 遍历新链表p = headwhile a[p][1] != -1: print(a[p][0], end="->") p = a[p][1]print(a[p][0])小明想要设计一个程序,能够根据用户输入的节日名称,输出从该节日开始,一年内的节日顺序。如原始链表为A节->B节->C节->D节->E节->F节。若用户输入C节,则输出结果为C节->D节->E节->F节->A节->B节。为了实现这个功能,小明在原有的程序基础上,增加了以下Python程序:user_input = input("请输入一个传统节日名:")found = Falseindex = -1p=headwhile a[p][1] != -1: if a[p][0] == user_input: found = True index = p p = a[p][1]if found: p = index while p != -1: print(a[p][0], end="->") p = a[p][1] if p==-1: ③ p=head if p==index: p=-1 print()else: print("不是传统节日,请重新输入:")(2)请在画线处填入合适的代码。(3)加框处的程序代码有错误,请改正。【答案】 a[p][1]!=-1【解析】 本题考查链表操作知识。(1)模拟后可知要访问7个节日。(2)①此处需要删除国庆节,因此需要找到下一个节点为国庆节的位置,然后让当前节点指向下下个节点即可。②增加春节,然后将该节点设置为头节点。③若按照链表遍历到尾部,则接下去继续从头节点head开始访问。(3)a[p][1]才是指针域,a[p][0]是数据域。阶段检测(第一、二章)一、 选择题(本大题共12小题,每小题列出的四个备选项中只有一个是符合题目要求的)1. 下列关于链表的说法,错误的是( )A. 链表占用的存储空间不固定B. 链表中不一定有头指针C. 链表的节点由数据区域和指针区域两部分组成D. 在链表中插入一个节点,只需要修改部分节点的指针2. 文字处理软件Word的“撤销”操作,符号输入及撤销时,内部所依托的数据结构是( )A. 队列 B. 栈C. 链表 D. 数组3. 下列关于数组的说法,正确的是( )A. 在计算机内部存储时,一维数组是线性存储,二维数组是非线性存储B. 对数组进行操作的过程中,若某些数据元素已被删除,其占用的存储空间也会被释放C. 数组的优点是访问速度快,但删除、插入数据的操作效率较低D. 同一数组元素的数据类型可以不相同,这和Python的列表类型相同4. 下列关于字符串的说法,错误的是( )A. 字符串是由零个或多个字符组成的有限序列B. 空串是由空格组成的字符串C. 字符串可以比较大小D. 字符串的存储既可以采用顺序存储结构,也可以采用链式存储结构5. 下列关于链表的说法,正确的是( )A. 插入、删除操作无须移动数据元素B. 链表和数组相同,都属于顺序存储C. 可随机快速访问任何一个数据元素D. 同一链表中每个节点的结构均不同6. 下列关于数组和链表的说法,错误的是( )A. 链表的各数据的存储空间可以不连续,而数组的存储空间必须连续B. 链表各数据节点的存储顺序与逻辑顺序可以不一致C. 在数组中进行插入或删除元素时,不需要移动元素D. 存储同一序列,数组与链表所需的存储空间大小不同7. 有如下Python程序段:import randoma=[0]*6i=0while i<6: t=random.randint(2,10) if t not in a: a[i]=t i+=1print(a)运行程序后,输出的结果不可能是( )A. [3, 0, 0, 0, 0, 0] B. [9, 10, 4, 6, 0, 0]C. [2, 3, 4, 5, 6, 7] D. [0, 10, 1, 3, 4, 5]8. 有如下Python程序段:a = [0]*10s=input("请输入字符串:")n = 0for i in range(len(s)): if "0" <=s[i] <= "9": m = 1 else: m = 2 a[m] = a[m] + 1 if a[m] == 1: n +=1print(n)执行该程序段后,若输入s的内容为“Happy2025”,则输出变量n的值为( )A. 1 B. 2C. 3 D. 99. 数组元素a[0]~a[n-1]已按升序排列,现要将a[pos](0≤pos≤n-1)的值加1,并保持数组的有序性不变,实现该功能的程序段如下,方框中应填入的正确代码是( )t = a[pos]+1i = poswhile : a[i] = a[i+1] i += 1a[i] = tA. i < n-1 B. i < n-1 and t > a[i+1]C. i < n-1 and a[i] > a[i+1] D. i <= n-1 or t > a[i]10. 数组中保存有n+1个数据,分别保存在a[0]到a[n]中。现需要删除第2个数字(即a[1]处的数字),且要求不能改变其他数字。Python代码如下:a=[4,2,7,5,3,9]n=len(a)-1for i in range( (1) ): (2) a=a[:n]print(a)画线处的可选代码如下:①1,n ②n,1,-1 ③a[i-1] = a[i] ④a[i+1] = a[i] ⑤a[i] = a[i+1] ⑥a[i] = a[i-1]为实现上述功能,画线处应填入的代码是( )A. ②④ B. ①③C. ②⑥ D. ①⑤11. 有如下Python程序段:s=[[7,2],[5,4],[4,1],[9,-1],[1,3]]p=head=2while s[p][1]!=-1: print(s[p][0],end="->") p=s[p][1]执行该代码后,输出结果为( )A. 4->5->1 B. 7-> 4->5->1->C. 4->5->1-> D. 4->5->1->912. 使用Python程序在链表a中删除一个数据data,代码如下:import randoma=[[87,1],[93,3],[97,5],[95,2],[80,0],[98,-1]]head=4x=random.randint(0,len(a)-1)data= ① q=headwhile q!=-1: if ② : if q==head: head=a[q][1] else: a[p][1]=a[q][1] break else: ③ q=a[q][1]则画线处应填入的代码是( )A. ①a[0][x] ②data==a[q][0] ③p=qB. ①a[0][x] ②data!=a[q][0] ③p=headC. ①a[x][0] ②data==a[q][0] ③p=qD. ①a[x][0] ②data!=a[q][0] ③q=head二、 非选择题(本大题共3小题)13. 有不同颜色的袜子若干(袜子的颜色用数字编号1~15表示),颜色相同的袜子才能组成一双,其中有几只袜子是落单的,现要求找出落单袜子的颜色以及能够配对的袜子数量。编写程序解决该问题,程序运行后,依次输入袜子的颜色编号(数据之间用空格分隔),输出落单袜子的颜色编号以及能配对的袜子的数量(双)。运行界面如图所示。请输入袜子的颜色编号(1~15),用空格隔开:3 15 4 3 2 4 11 15落单袜子的颜色为:2落单袜子的颜色为:11能配对的袜子有:3双实现上述功能的Python程序如下,请回答下列问题:(1)根据题意,请在画线处填入合适的代码。(2)加框处的程序代码有错误,请改正。s = input("请输入袜子的颜色编号(1~15),中间用空格隔开:")a=s.split() #将字符串s切片为列表,以空格为间隔b=[0]*16 #定义用于装袜子编号的“桶”t = 0 ;c = 0for i in ① : t = int(i) b[t] = ② for i in range(1,16): if ③ : print("落单袜子的颜色为:" + str(i)) c = c + b[i]%2print("能配对的袜子有:" + str(c)+ "双")14. 中华人民共和国公民身份号码共18位,其中前17位为数字本体码,第18位为校验码。作为尾号的校验码,是按统一的公式计算出来的,校验码的计算方法如下:①将公民身份号码前17位分别乘以不同的系数,系数依次为7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2。②将这17位数字和系数相乘的结果相加。③求用上述相加的和除以11的余数。④余数只可能有0,1, 2... 9,10共11个数字,分别对应校验码1,0,X,9,8,7,6,5,4,3,2。例如,公民身份号码34052419800101001X,计算3*7+4*9+0*10+5*5+...+1*2=189,用189除以11得出余数2,对应的校验码是X。编写 Python程序,判断输入的公民身份号码的校验码是否正确,正确则输出“Yes”,否则输出“No”,请在画线处填入合适的代码。def judge(s): if n!=18: return False res=0 for i in range(n-1): res=res%11 code=m[res] if ③ : return True else: return Falsev=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] #系数m= 10X98765432 #余数对应的校验码s=input()if ④ : print( Yes )else: print( No )15. 传统节日是中华民族悠久历史文化的重要组成部分,记录了中华民族丰富多彩的社会生活,并蕴含着深厚的历史文化内涵。经过信息课的集思广益,我们以链表的形式罗列了以下传统节日:[["元宵节", 11], ["元旦", 0], ["清明节", 4], ["中秋节", 5], ["端午节", 7], ["国庆节", 9], ["社日节", 12], ["中元节", 3], ["冬至节", -1], ["重阳节", 13], ["寒食节", 2], ["龙抬头", 6], ["上巳节", 10],["下元节", 8]]。请回答下列问题:(1)当head为1的时候,想要在原始链表a中访问端午节,需要先访问 7 (填数字)个节日。为更全面地了解我国的传统节日,小明上网搜索后,发现了几个问题: ①他发现元旦和国庆节不是我国的传统节日。②除了上述节日外,他还查阅到春节、七夕、除夕等也都是我国的传统节日。小明编写程序对链表进行更正,程序如下所示:a = [["元宵节", 11], ["元旦", 0],["清明节", 4], ["中秋节", 5],["端午节", 7], ["国庆节", 9],["社日节", 12], ["中元节", 3], ["冬至节", -1], ["重阳节", 13],["寒食节", 2],["龙抬头", 6],["上巳节", 10],["下元节", 8]]head = 1p = headwhile a[p][1] != -1: if a[p][0] == "元旦" and p==head: head=a[p][1] elif ① : a[p][1] = a[a[p][1]][1] else: p = a[p][1] a. append(["春节", head])② p = headwhile a[p][0] != "端午节": p = a[p][1]a. append(["七夕", a[p][1]])a[p][1] = len(a)- 1while a[p][0] != -1 : p = a[p][1]a. append(["除夕", a[p][1]])a[p][1] = len(a)- 1# 遍历新链表p = headwhile a[p][1] != -1: print(a[p][0], end="->") p = a[p][1]print(a[p][0])小明想要设计一个程序,能够根据用户输入的节日名称,输出从该节日开始,一年内的节日顺序。如原始链表为A节->B节->C节->D节->E节->F节。若用户输入C节,则输出结果为C节->D节->E节->F节->A节->B节。为了实现这个功能,小明在原有的程序基础上,增加了以下Python程序:user_input = input("请输入一个传统节日名:")found = Falseindex = -1p=headwhile a[p][1] != -1: if a[p][0] == user_input: found = True index = p p = a[p][1]if found: p = index while p != -1: print(a[p][0], end="->") p = a[p][1] if p==-1: ③ if p==index: p=-1 print()else: print("不是传统节日,请重新输入:")(2)请在画线处填入合适的代码。(3)加框处的程序代码有错误,请改正。 展开更多...... 收起↑ 资源列表 阶段检测(第一、二章)(原卷版).docx 阶段检测(第一、二章)(解析版).docx