第二章数据与链表同步作业2023—2024学年高中信息技术浙教版(2019)选修1

2024-07-29
| 19页
| 97人阅读
| 0人下载

资源信息

学段 高中
学科 信息技术
教材版本 高中信息技术浙教版选修1 数据与数据结构
年级 -
章节 第二章 数组与链表
类型 作业-同步练
知识点 -
使用场景 同步教学
学年 2024-2025
地区(省份) 全国
地区(市) -
地区(区县) -
文件格式 DOCX
文件大小 912 KB
发布时间 2024-07-29
更新时间 2024-07-29
作者 匿名
品牌系列 -
审核时间 2024-07-29
下载链接 https://m.zxxk.com/soft/46580338.html
价格 1.00储值(1储值=1元)
来源 学科网

内容正文:

第二章 数据与链表 一、选择题 1.有Python程序段如下: #链表1st中的每个元素由数据和指针两个数据项组成,其中数据可能重复且呈升序排列 p1=head p2=lst[pl][1] while p2!=-1: if 1st[p1][0]==1st[p2][0]: p2=1st[p2][1] 1st[p1][1]=p2 else: p1=p2 p2=1st[p2][1] 若链表1st的初始状态为,则执行完该程序段后链表1st更新为(    ) A. B. C. D. 2.使用列表d模拟链表结构(节点数大于0),每个节点包含数据区域和指针区域,h为头指针。下列程序段实现了删除数据区域为奇数的节点。 q=p=h=2 while p!=-1:     if d[h][0]%2==1:        (1)       q=p=h     elif d[p][0]%2==1:        (2)       p=d[p][1]     else:       q=p       p=d[p][1] 划线处可选代码如下: ①h=d[h][1]     ②p=d[p][1]     ③d[p][1]=d[q][1]    ④d[q][1]=d[p][1] 下列选项中,代码顺序正确的是(    ) A.①③ B.②③ C.①④ D.②④ 3.下列关于链表节点插入操作的描述,哪个是正确的(   ) A.插入操作总是从链表头部开始 B.只需要修改新节点的指针域即可完成插入 C.必须先找到插入位置的前驱节点,再修改前驱节点的指针域 D.链表插入操作的时间复杂度总是O(1) 4.在一个列表a中隐藏着一个链表,a=[[4,0],[5,2],[7,4],[8,5],[6,3],[1,-1]]。链表节点a[i]中,a[i][0]表示数据,a[i][1]表示指针,下列说法正确的是(   ) A.链表的两个相邻节点,其存储空间必须连续 B.该隐藏链表的表头head=2 C.该隐藏链表有5个节点 D.代码“a[i][1]=a[i+1][1]”可以实现删除节点“i+1” 5.关于线性链表的描述,以下选项中正确的是(   ) A.存储空间不一定连续,且各元素的存储顺序是任意的 B.存储空间必须连续,且各元素的存储顺序是任意的 C.存储空间不一定连续,且前件元素一定存储在后件元素的前面 D.存储空间必须连续,且前件元素一定存储在后件元素的前面 6.数组元素 a[0]至a[n-1]依次存放着n个数据,其中前 n-1个数据不重复且有序,现需要将x(与前 n-1个数据不重复) 插入到数组中,使数组仍然有序。例如: n为5,数组 a为[0,5,10,20,20] , x为8,插入操作后 a为[0,5,8,10,20]。实现该功能的程序段如下: i=0 while i<n-1 and a[i]<x:     i+=1     for k in range(        a[k]= a[k-1]     a[i]=x 方框中应填入的正确代码为(   ) A.n,i,-1 B.n-1,i,-1 C.i+1,n D.i-1,n-1 7.下列Python程序段的功能是在链表link1中删除数据为key的所有节点,link1链表中的每个节点由一个数据域和一个指针域组成。 #建立链表 link1,代码略 key=int(input("输入要删除的数据:")) head=0 while link1[head][0]==key and head!=- 1:     head=link1[head][1]     p=q=head     if head==- 1:         print("全部数据删除")     else:         q=link1[q][1]         while   ① :             if link1[q][0]==key: ②             else:                p=link1[p][1] q=link1[q][1] 则划线①②处的代码分别为(  ) A.①link1[q][1]!=- 1              ②link1[p][1]=link1[q][1] B.①link1[q][1]!=- 1               ②link1[q][1]=link1[p][1] C.①q!=- 1                          ②link1[q][1]=link1[p][1] D.①q!=- 1                          ②link1[p][1]=link1[q][1] 8.使用列表模拟单向链表,链表中p节点的a[p][0]存储数据,a[p][1]存储其后继节点的指针。编写Python程序删除链表中所有的偶数项(头节点为该链表的第1项),部分代码如下: p=head             #head指向该链表的头节点 while p!=-1: q=a[p][1]   if (1) : (2) p=a[p][1] 上述程序段划线处可选语句为 ①q!=-1        ②a[q][1]!=-1        ③a[q][1]=a[p][1]        ④a[p][1]=a[q][1] 则(1)(2)处填入的语句依次为(   ) A.①③ B.①④ C.②③ D.②④ 9.有如下 Python 程序段 def bianli(head): pt = head while pt != -1: print(data[pt][0],data[pt][1],"->",end='') pt = data[pt][1] print() data = [['A',1],['B',2],['C',3],['D',-1]] head = 0 bianli(head)  #遍历链表,显示初始状态为“A 1 ->B 2 ->C 3 ->D -1 ->” qt = head pt = data[qt][1] bianli(head) #遍历链表,显示最终状态为“A 2 ->C 1 ->B 3 ->D -1 ->” 执行该程序段后,链表遍历结果由初始状态变为最终状态,上述程序段中方框处可选代码为: ①data[data[qt][1]][1] = pt ②data[qt][1] = data[pt][1] ③data[pt][1] = data[data[pt][1]][1] 则方框处代码的正确顺序是(   ) A.①②③ B.①③② C.②①③ D.②③① 10.有一组含有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 11.有关数组特征描述中,下列说法不正确的是(  ) A.同一数组中,每个数组元素的数据类型是相同的 B.通过数组名和下标可以对数组中任意位置的数组元素进行高效访问 C.数组的存储空间固定不变 D.数组是非顺序存储结构 12.将英文单词“student”中的每个字符按次序以单链表的形式进行存储,操作过程中漏掉了字符 e,存储状态如图所示: 现将字符e存放于1111H处,并按正确的次序插入单链表中,则元素d、e、n的“链接地址”依次是(    ) A.100CH,1014H,1111H B.100CH,1111H,1014H C.1111H,100CH,1014H D.1111H,1014H,100CH 13.设有数组定义语句:Dim a(5) As Integer,Listl 为列表框控件。下列给数组元素赋值的语句,错误的是(  )。 A.a(3)=3 B.a(3)=VAL(InputBox(“InputData”) C.a(3)=Listl.ListIndex D.a=Array(1,2,3,4,5,6) 14.下列说法或用法正确的是(   ) A.OPTION   BASE   6 B.OPTION   BASE 语句的位置可以任意 C.DIM    A(6,3  TO  7)定义的是二维数组 D.数组元素的下标不能是负数。 二、填空题 15.用二维数组表示的数据在内存中的存储方式也采用顺序存储,有 和 两种方式。 16.在数据结构中, 是一种允许在任何位置插入和删除元素的数据结构。 17.数组 d 的初始值如表所示,则 d(d(3))+d(4)的值 ( )。 18.在程序运行过程中可以改变数组元素个数的是( )数组,不可以改变数组元素个数的是( )数组。 三、操作题 19.程序运行时,以内存单元为基本单位对内存进行分配,若干个连续的内存单元称为一个内存块,每个内存块的信息包含首地址和大小,编写Python程序模拟内存分配和释放的过程。 1)初始化空间内存块,将信息存储在链表flink中。 2)分配大小为size的内存,先依次查找结束think中是否存在不小于size的内存块,若存在且等于size,则将其从链表flink中删除,若存在且大于size,则修改该内存块的信息;若不存在,则对不连续的空间内存块按顺序进行分配,如果空间内存块之和仍小于size,则分配失败。 3)释放内存。将释放的内存块信息插入链表flink,链表flink各节点按前地址从小到大排列。如果释放的内存块与链表中的某个内存块相邻,则将它们合并成一个更大的内存块。 请回答下列问题: (1)初始空间内存块大小为16,进行两次分配和一次释放的过程如下图所示。若继续分配大小为8的内存换, (填写,能/不能)成功。 ①初始化空间内存块,大小为16 ②第1次分配,大小为4,分配后空闲12 ③第2次分配,大小为1,分配后空闲4 ④释放第1次分配的内存,释放后空闲8(不连续) (2)定义如下allocate (flink,head,size)函数,参数flink是空闲内存块链表,head是flink头指针,size为所需内存块大小,函数功能为分配size大小的空间内存块,并返回分配的内存块信息及头指针head,请在划线处填入合适的代码。 def allocate(flink, head, size):     block =[]     pre = head;cur = head     while cur !=-1:         if flink[cur][1]>= size:              break         pre = cur         cur = flink[cur][2]     if cur!=-1 and flink[cur][1]== size:         block.append([flink[cur][0],size])         if pre == cur:             ①         else:             flink[pre][2] = flink[cur][2]     elif cur!=-1 and flink[cur][1]> size:         block.append([flink[cur][0],size])         flink[cur][0]=flink[cur][0]+size         ②     if len(block)==0:         #对不连续的空闲内存块按顺序进行分配,如果空闲内存块之和仍小于size,则分配失败,         #代码省略     return block,head (3)实现模拟过程及内存释放的部分Python程序如下,请在划线处填入合适的代码. def release(flink, head, block):     for i in range(len(block)):         if head==-1:             flink.append([block[i][0],block[i][1],-1])             head=len(flink)-1         else:             pre = head             cur = head             while cur !=-1:                 if flink[cur][0] > block[i][0]:                     break                 pre=cur                 cur =flink[cur][2]             flink.append([block[i][0],block[i][1],cur])             if cur==head:                 pre=len(flink)-1                 head=len(flink)-1             else:                 ①             cur = flink[pre][2]             #合并相邻空闲块             while cur!=-1:                 if flink[pre][0]+flink[pre][1]==flink[cur][0]:                     ②                     flink[pre][2]=flink[cur][2]                     cur =flink[cur][2]                     continue                     pre = cur                 cur =flink[cur][2]     return [[-1,-1,-1]],head     flink= [[0,16,-1]] #初始化空闲内存块链表,0:起始地址,16:长度 head=0 block1,head = allocate(flink ,head, 4) block2,head = allocate(flink, head, 8) block1,head = release(flink,head,block1) 20.某工程包含n个任务(编号为0-n-1),每天可以有多个任务同时进行。某些任务之间有依赖关系,如图a所示,任务4依赖于任务1,任务1依赖于任务2。即任务2完成后才可以开始任务1,任务1完成后才可以开始任务4,不存在一个任务依赖于多个任务,或多个任务依赖于同一个任务的情况。 现已对该工程的依赖关系进行了梳理,结果如图b所示,标记“T”表示依赖关系需保留,标记“F”表示依赖关系需删除。 根据每个任务完成所需的天数和梳理后的依赖关系,编写程序,首先删除标记为“F”的依赖关系,然后计算工程最快完成所需的天数,并以工程最快完成所需的天数为期限,计算每个任务最晚必须开始的时间。 图a                           图b 请回答下列问题: (1)若某工程有6个任务,任务间依赖关系如图a所示,完成任务0~5所需天数分别为2,1,3,5,1,6,则工程最快完成需要 天。 (2)定义如下erase(1st)函数,参数1st列表的每个元素表示一个依赖关系。函数的功能是删除标记为“F”的依赖关系,返回保留的依赖关系的个数。 def erase(lst):     i=0     j=len(1st)-1     while i<=j:         if 1st[i][2]=='T':             i+=1         else:             if lst[j][2]=='T':                 1st[i]=1st[j]                 i+=1               j-=1     return i 若1st列表依次存储图b所示的依赖关系,如1st[0]为[0,5,T],调用erase(lst)的数,则语句 "1st[i]=1st[j]”的执行次数为 。 (3)实现上述功能的部分Python程序如下,请在划线处填入合适的代码。 def proc(n,lst,task):     pr=[0]*n     w=[0]*n                   #w[i]存放任务1最晚必须开始的时间     m=erase(1st)     for i in① :         task[lst[i][1]][1]=1st[i][0]         pr[lst[i][0]]=1     c=[]     days=0              #days存放工程最快完成所需的天数     for I in range(n):         if pr[i]==0:             k=i             s=0             while k!=-1:                 c.append(k)                 s+=task[k][0]               ②             if s>days:                 days=s     for i in range(n-1,-1,-1):         k=c[i]         if task[k][1]==-1:             w[k]=days-task[k][0]+1         else:            ③ #输出days,以及保存在w中的每个任务最晚必须开始的时间,代码略 ``` 工程包含的任务数存入变量n 任务间的依赖关系存入1st列表 1st[0]包含3项,任务1st[i][0]依赖于任务1st[i][1],1st[i][2]存放保留/删除标记,任务数据存入task列表 task[i]包含2项,task[i][0]为完成任务主所需天数,task[i][1]的初值为-1 代码略 ``` proc(n,1st,task) 21.某信息仅包含大写字母,字符数不超过n*n(n*n为密钥矩阵规模,n>0),加密过程如图a所示: 图a 图b (1)已知密钥矩阵按图a中所示,若原文为“OK”,则加密后的密文是 ,若输入的密文是“10,1,24,2,”,则原文是 。 (2)根据上述加密算法编写解密程序,运行界面如图c所示。请在划线①②③处填上合适的代码。 图c def  getmm(x,n):  #获取位置编号x的位置密钥值      row=(x-1)%n     col=(x-1)//n     if① :             row=n-1-row     return key[row][col] #生成规模为n*n的密钥矩阵,存入二维矩阵key中 n=int(input("请输入密钥矩阵规模n:")) key=[[i*n+j+l for j in range(n)] for i in range(n)] #密文解密 p=input("请输入密文: ") mw=[] bmz=[] t=0 for i in range (1en(p)): #依次读取密文字符串中的数值,结果存入到列表mw中 s=p[i] if s!=",": .② else: mw. append (t) t=0 k=len (mw) for i in range(k//2) :  #对密文解密,结果存入列表bmz中 bmz. append (mw [2*i]- ③ yw=" for i in range (k//2):  #转换为字母输出 yw=ywtchr (bmz [i]-1+ord("A")) print("原文为:"+yw) 试卷第1页,共3页 试卷第1页,共3页 学科网(北京)股份有限公司 参考答案: 1.A 【详解】本题考查链表。 该程序功能为,去除链表中的重复数据。通过观察链表图,可知选项A为去除重复。故正确答案为:选项A。 2.C 【详解】本题考查程序分析。(1)当头节点为奇数时,需要更新头节点。则移动头节点。故h=d[h][1]。(2)当p节点为奇数时候,需要删除该节点,将p的后继节点接到p的前驱结点q的下一个节点指针上。故d[q][1]=d[p][1]。故正确答案为选项C。 3.C 【详解】本题考查链表。必须先找到插入位置的前驱节点,再修改前驱节点的指针域,C该选项描述了链表插入操作的正确步骤,需要先定位到插入位置的前驱节点,然后修改其指针指向新节点。故答案为:C。 4.C 【详解】本题考查链表。A选项错误,链表的相邻节点存储时不需要连续空间。B选项错误,该隐藏链表的表头head=1。D选项错误,删除节点“i+1”的代码是“a[i][1]=a[a[i][1]][1]”。故答案为:C。 5.A 【详解】本题考查线性链表。具有链接存储结构的线性表,它用一组地址任意的存储单元存放线性表中的数据元素,逻辑上相邻的元素在物理上不要求也相邻。选项A正确,其它选项错误。故正确答案为选项A。 6.B 【详解】本题考查的是Python数组操作。插入元素需要数组后移操作,且先移最后一个元素,第一次移动a[n-2]到n-1位置,所以开始值为:n-1,选项B正确。 7.D 【详解】本题主要考查链表的操作。通过遍历链表来寻找key,故第一空while循环条件是q!=-1。如果link1[q][0]==key,则删除key所在的节点,p是q的上一个节点,则通过p的指针域指向q的指针域以实现删除q节点,故第二空填link1[p][1]=link1[q][1],故本题选D选项。 8.B 【详解】本题主要考查链表数据结构及Python程序实现。头节点为该链表的第1项,p的初值指向head,q为p的下一个节点,因此每次删除q节点即可,删除之前需要判断q是否为-1,故if判断条件是q!=-1,删除q节点的方法是,p的后继节点指向q的后继节点,即a[p][1]=a[q][1],选项B符合题意,故选B。 9.D 【详解】本题主要考查链表及其Python程序实现。本程序考查的是链表的重新链接,程序实现的效果是 A 1 ->B 2 ->C 3 ->D -1 ->,变为 A 2->C 1 ->B 3 ->D -1 ->,qt 指前一指针,pt 指后一指针,故‘A’要指向‘C’,‘B’要指向‘D’,然后‘C’要指向‘B’,即正确的顺序是,故本题选D选项。 10.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选项。 11.D 【详解】本题主要考查数组特征。同一数组中,每个数组元素的数据类型是相同的;通过数组名和下标可以对数组中任意位置的数组元素进行高效访问;数组的存储空间固定不变;数组是顺序存储结构,故本题选D选项。 12.C 【详解】本题考查的是链表的读取。将字母e插入后,其链接地址如下图: 故,d、e、n的“链接地址”依次是111H、100CH、1014H。选项C正确。 13.D 【详解】本题主要考查数组的赋值。array()函数的作用:返回一个包含数组的Variant(可变的),题干定义了一个容量固定的数组a(Dim a(5) As Integer),故赋值语句a=Array(1,2,3,4,5,6)是错误的,故本题选D选项。 14.C 【详解】本题考查的是VB数据定义。option base在模块级别中使用,用来声明数组下标的缺省下界,option base后面只能是0或者1,由于默认是0,所以是0的时候可以不用option,因此A、B选项错误;DIM    A(6,3  TO  7)定义的是一个35个元素的二维数组,因此C选项正确;数组下标可以是负数,系统只算区间的个数,因此D选项错误。 15. 行优先存储 列优先存储 【详解】本题考查数组。 用二维数组表示的数据在内存中的存储方式也采用顺序存储,主要有行优先顺序(也称为行主序)和列优先顺序(也称为列主序)两种方式。 行优先顺序(Row-major order):在这种方式中,二维数组被视为一组连续的行,每行中的元素连续存储。即,先存储第一行的所有元素,然后是第二行的所有元素,依此类推,直到最后一行。这是大多数编程语言(如C、C++、Java等)中二维数组的默认存储方式。 列优先顺序(Column-major order):在这种方式中,二维数组被视为一组连续的列,每列中的元素连续存储。即,先存储第一列的所有元素,然后是第二列的所有元素,依此类推,直到最后一列。虽然这种方式在某些特定的应用场景(如数学和某些科学计算)中更为直观,但在大多数编程语言中,它并不是默认的二维数组存储方式。不过,某些特定的编程语言或库(如Fortran和一些数学计算库)可能会采用列优先顺序来存储二维数组。 16.链表(或LinkedList) 【详解】本题考查链表。在数据结构中,链表(Linked List)是一种允许在任何位置插入和删除元素的数据结构。链表通过节点(Node)的集合来表示数据集合,每个节点都包含数据部分和指向列表中下一个节点的链接(或指针、引用)。由于这种结构不要求在物理上连续存储数据,因此它允许在链表中的任何位置快速插入和删除节点,而不需要像数组那样重新分配整个数据结构的内存。故正确答案为:链表(或LinkedList)。 17.20 【详解】本题主要考查数组。根据题示,d(3)=6,所以 d(d(3));d(4)=8,因此d(d(3))+d(4)=20 【点睛】 18. 动态 静态 【详解】本题主要考查数组的操作。在程序运行过程中可以改变数组元素个数的是动态数组,不可以改变数组元素个数的是静态数组。 19. 能 head = flink[cur][2] flink[cur][1]=flink[cur][1]-size flink[pre][2]=len(flink)-1 flink[pre][1] = flink[pre][1] + flink[cur][1] 或flink[pre][1] += flink[cur][1] 【详解】本题考查Python程序设计相关内容。本题涉及到链表、自定义函数、二维列表等知识点。 (1)若不存在连续的大于等于size的空间则对不连续的空闲内存块进行分配,故①处答案为:能。 (2)若存在且等于size,则将其从链表flink中删除,删除分两种情况,如果是表头,直接修改表头指针,故①处为:head = flink[cur][2];若存在且大于size,则修改该内存块的信息,故②处应为:flink[cur][1]=flink[cur][1]-size; (3)查找到第一处起始地址大于待释放内存块的节点,并将待释放内存块插入链表pre节点与cur节点之间。若待释放内存块的起始地址大于头节点,则要更改pre节点与cur节点,故①处应为:flink[pre][2]=len(flink)-1;如果释放的内存块与链表中的某个内存块相邻,则将它们合并成一个更大的内存块,故②处应为:flink[pre][1] = flink[pre][1] + flink[cur][1] 或flink[pre][1] += flink[cur][1]。 20. 8 1 range(m)   或range(0,m)   或range(0,m,1)   或range(m-1,-1,-1)或range(erase(1st))   或range(0,erase(1st))   或range(0,erase(1st),1)   或range(erase(1st)-1,-1,-1) k=task[k][1] w[k]=w[task[k][1]]-task[k][0] 或w[k]=w[c[i+1]]-task[k][0]   这里面可以把k换成c[i] 【详解】本题考查数组、链表相关操作。(1)依据题干,将所有任务分为三组:[5,0]需要8天、[4,1,2]需要5天、[3]需要5天,三组任务可以同时进行,取最多的天数即为工程最快完成时间。故工程最快完成需要8天。(2)erase(1st)函数用于删除1st列表中标记为删除的任务。该函数遍历lst列表,通过两个指针i和j,分别指向列表的头部和尾部。当1st[i][2]为T时,表示该任务需要保留,指针i向后移动一位。当1st[i][2]不为'T'时,表示该任务需要删除,将1st[i]替换为1st[j],然后指针i向后移动一位,指针j向前移动一位。最后返回指针i的值,即删除后的列表长度,不管尾元素是否标记为“F”,j都向前移动一个位置。结合图b,可知语句“1st[i]=1st[j]”只在i=1,j=3时执行1次。(3)自定义函数proc(n,1st,task),用于处理任务调度。lst中已经删除了标记为“F”的依赖关系,erase(1st)函数返回值为i赋值给了m,正好代表了剩余的元素个数,所以一空应填写range(m)或等价表达式。对于每个删除后的任务1st[i],将1st[i][0]作为任务的编号,将1st[i][1]作为任务的前置任务编号,将1st[i][0]作为任务的主任务编号。并将pr[lst[i][0]]设置为1,表示该任务有前置任务。空列表c,用于存放可以进行的任务序列。变量days用于存放工程最快完成所需的天数。接下来,遍历任务列表,对于每个任务编号i,如果该任务的前置任务编号为0,则将其作为起始任务,进行任务序列完成时间的计算。在计算过程中,将当前任务编号k添加到列表c中,累加任务的完成时间s,并将当前任务的主任务编号task[k][1]作为下一个任务的前置任务编号k,所以第二空的答案为k=task[k][1]。最后,如果累加完成时间s大于days,则更新days的值。接下来,通过倒序遍历任务列表,计算每个任务的最晚开始时间。对于每个任务编号k,如果该任务没有后续任务(即task[k][1]为-1),则将最晚开始时间w[k]设置为days-task[k][0]+1,表示该任务必须在工程最快完成时间内开始。否则,将最晚开始时间w[k]设置为其后续任务的最晚开始时间减去当前任务完成时间,表示该任务必须在其后续任务完成前开始。所以第三空的答案为w[k]=w[task[k][1]]-task[k][0]。 21. 16,1,15,2, IT col%2==1 或其他等价答案 t=t*10+int(s) 或其他等价答案 getmm(mw[2*i+1],n) 【详解】本题考查的是数组的综合应用。O的编码值为15,位置编号1,其秘钥值1,加密值为15+1=16;K的编码值为11,位置编号2,其秘钥值4,加密值为11+4=15,故若原文为“OK”,则加密后的密文是16,1,15,2,;若输入的密文是“10,1,24,2,”,则第一位的编码值为:10-1=9对应字母为I,第二位的编码值为:24-4=20对应字母为T,故原文是:IT。(2)row表示行号,col表示列号,依据秘钥矩阵图,当列号为奇数时,从下往上访问,故第一空应为:col%2==1 或其他等价答案;读取的字符不为“,”则拼接到数字t后,故第二空为:t=t*10+int(s) 或其他等价答案;列表索引从0开始,故索引号为偶数里存放的是加密值,奇数存放的是位置编号,依据加密原理倒推,可知编码值=加密值-秘钥值。函数getmm(x,n)是获取位置编号x的位置密钥值,故第三空应为:getmm(mw[2*i+1],n)。 答案第1页,共2页 答案第1页,共2页 学科网(北京)股份有限公司 $$

资源预览图

第二章数据与链表同步作业2023—2024学年高中信息技术浙教版(2019)选修1
1
第二章数据与链表同步作业2023—2024学年高中信息技术浙教版(2019)选修1
2
第二章数据与链表同步作业2023—2024学年高中信息技术浙教版(2019)选修1
3
相关资源
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。