2025届信息技术一轮复习练习:专题11 数组(含答案)

资源下载
  1. 二一教育资源

2025届信息技术一轮复习练习:专题11 数组(含答案)

资源简介

专题11 数 组
知识点一 一维数组
1.有如下Python程序段:
a=[12,8,9,18,2,19,28,6]
for i in range(len(a)-1):
if a[i]a[i],a[i+1]=a[i+1],a[i]
p=len(a)-1
for i in range(len(a)-2,0,-1):
if a[i]>a[p]:
p=i
tmp=a[p];a[p]=a[0];a[0]=tmp
执行该程序段后,a列表的值为(  )
A.[28,9,18,8,19,12,6,2]
B.[12,9,18,8,19,28,6,2]
C.[28,9,18,19,8,12,6,2]
D.[2,9,12,8,18,19,6,28]
2.去除数组a中重复数据,部分程序代码如下
a=[5,6,4,7,5,7,6,5,7,2]
i=0;n=len(a)-1
while i①________
while j<=n:
if a[i]==a[j]:
     if a[i]==a[n]:
       ②________
     else:
       ③________
     n-=1
j+=1
i+=1
print(a[:n+1])
则划线处应填空的内容是(  )
A.①j=i+1 ②a[j]=a[n] ③j-=1
B.①j=i ②j-=1 ③a[j]=a[n]
C.①j=i+1 ②j-=1 ③a[j]=a[n]
D.①j=i+1 ②i-=1 ③a[j]=a[n]
3.以下Python程序段用以实现在列表a下标为K的位置处插入元素X,而不会导致原有数据的丢失。
x=int(input(″请输入插入的数据:″))
k=int(input(″请输入插入位置:″))
a=[10,20,30,40,50,60,70]
a.append(0) #在最后添加一个0,用以插入新数据。
for i in range(len(a)-2,k-1,-1):
①________
a[k]=x
则划线处填入的代码为(  )
A.a[i+1]=a[i] B.a[i]=a[i+1]
C.a[i]=a[i-1] D.a[i-1]=a[i]
4.有如下Python程序段:
a=[1,0,0,0,1,0,1]
for i in range(100,0,-1):
flag=True
m=i
for j in range(len(a)-1,-1,-1):
if m % 2!=a[j]:
    flag=False
m//=2
if flag:
ans=i
break
print(ans)
程序运行后,变量ans的值是(  )
A.46 B.58
C.69 D.81
5.有如下的Python程序段:
a=[3,5,7,9,11,13,15]
p=2
for i in range(p+1,len(a)): a[i-1]=a[i] del a[i] #从列表中删除元素a[i]
则与方框中程序段功能相同的语句是(注:pop()删除列表最后一个元素,del()删除列表指定范围元素)(  )
A.a=a[:p]+a[p+1:] B.a=a[:p]+a[p:]
C.a.pop() D.del a[p:]
6.将一组数保存在列表a中,若a[0]=0,则在列表a中从左到右找到第一个大于零的元素,并与a[0]交换。用Python程序描述,下列选项中不可行的是(  )
A.i=0
while a[i]==0:
 i+=1
a[0],a[i]=a[i],a[0]
B.for i in ranges(5):
if a [i]>0:
break
a[0],a[i]=a[i],a[0]
C.i=0
while True:
if a[i]>0:
break
i+=1
a[0],a[i]=a[i],a[0]
D.for i in a:
if i>0:
break
a[0],a[i]=a[i],a[0]
7.列表a有n(n>=2)个正整数,相邻两数的差值为1,0或-1。求相邻两数具有相同差值的连续子序列中,子序列元素和的最大值。实现该功能的程序段如下,加框处应填写的正确代码是(  )
state=a[1]-a[0]
maxv=t1=t2=a[1]+a[0]
for i in range(2,n):
f=a[i]-a[i-1]
print(maxv)
8.有如下Python程序段:
import random
n=8
a=[random.randint(0,9) for i in range(n)]
for t in range(2):
i=t+1
while iif t % 2==0:
     if a[i-1]a[i+1]:
       i+=2
     else:
       a[i]+=random.randint(0,9)
else:
     if a[i-1]>a[i] and a[i]       i+=2
     else:
       a[i] -=random.randint(0,9)
print(a)
运行后,数组a中的值可能是(  )
A.[8,8,3,5,4,7,3,5]
B.[5,11,10,18,8,9,0,2]
C.[1,2,1,4,0,10,-1,7]
D.[7,12,5,17,9,19,-10,8]
9.下列Python程序段功能为:列表lst中存放的是无重复的正整数,找出其中的最大值max1和次大值max2。
max1=max2=0
for i in range(len(lst)):
if lst[i]>max1:
   ____(1)____
   ____(2)____
elif lst[i]>max2:
   ____(3)____
print(″最大值是:″+str(max1)+″,次大值是:″+str(max2))上述程序段中划线处可选语句为:
①max1=lst[i] ②max1=max2 ③max2=max1 ④max2=lst[i]
则(1)、(2)、(3)处语句依次可为(  )
A.③①④ B.①③②
C.③①② D.①③④
10.有Python代码如下:
a=[6,3,7,5]
b=[0,1,2,3]
for i in range(3,0,-1):
if a[b[i]]>a[b[i-1]]:
b[i],b[i-1]=b[i-1],b[i]
print(b)
则运行结果是(  )
A.[3,2,1,0] B.[1,3,0,2]
C.[2,0,3,1] D.[2,0,1,3]
11.有如下Python程序段:
a=[9,1,7,3,8,4]
key=5
pmin=a[0]
for i in range(1,len (a)):
if keypmin=a[i]
print(pmin)
执行该程序段后,输出的结果是(  )
A.1 B.4
C.7 D.9
12.有如下Python程序,程序执行,输入数据k之后输出的结果不正确的是(  )
L=[8,10,9,14,13,4,9,13,10]
k=int(input('请输入k值:'))
j=0
for i in range(8):
if L[i]<=k:
L[j]=L[i]
j=j+1
print(L[:j])
A.k=8输出:[8,4]
B.k=9输出:[8,9,4,9]
C.k=10输出:[8,10,9,4,9,10]
D.k=13输出:[8,10,9,13,4,9,13]
13.有如下Python程序:
a=[43,23,87,67,80]
queinfo=[]
for item in a:
k=0
while kif item>=queinfo[k][-1]:
     break
k+=1
if k==len(queinfo):
queinfo.append([item])
else:
queinfo[k].append(item)
print(len(queinfo))
执行该程序段后,输出的结果是(  )
A.1 B.2
C.3 D.4
14.某学校要组建年级学生会,共有cla个班级,n个人报名,每班报名人数大于等于1人,招募m个人(其中m>cla),录取规则如下:每班必须有一人录用(取综合评分最高),剩余人数按报名学生的综合评分由高到低录取。程序运行的界面如图所示:
输入要挑选的人数:12 切分线为:95 李疏铜 98 董奥雪 95 李中山 97 舒恺臣 99 罗梓尹 92 谢邹逸涵 97 方政 95 陶佳怡 99 陈果儿 97 周文琅 96 陈余雄 95 潘文博 91 王志豪 96 一共挑选人数:13
(1)实现上述功能的Python程序如下,请在划线处填入合适的代码。
(2)程序中加框处代码有错,请改正。
def search(x): #查找x班级最高分学生的下标
amax=-1;p=-1
for i in range(len(score)):
if ①________:
     amax=score[i]
    p=i
return p
def qfx(m): #查找得分最高的前m个人的得分
b=[0]*101
for i in range(n):
if not in f[i]:
    b[score[i]]+=1
i=100
while b[i]0:
i-=1
b[i]+=b[i+1]
②________
cla=6
#读取n个人班级、姓名和综合得分,分别存储数组bj、xm和score中,代码略
m=int(input(″输入要挑选的人数:″))
f=[False]*n #是否选入的标志
for i in range(cla):
t=search(i+1) #1班对应的索引号为0
f[t]=True
fsx= #计算剩下人的切分线
print(″切分线为:″,fsx)
for i in range(n):
if ③________:
f[i]=True
nc=0
for i in range(n):
if f[i]:
nc+=1
#输出挑选人员名单和人数,代码略
知识点二 二维数组
1.在一个6行8列的二维数组a中,每个元素所占空间大小为8个字节,从首地址SA开始连续存放在存储器内。该数组按行优先存储时,元素a[3][4]的起始地址为(  )
A.SA+224 B.SA+216
C.SA+192 D.SA+176
2.有如下Python程序:
a=[[i+1 for i in range(4)] for j in range(3)]
for i in range(3):
for j in range(4):
a[i][j]=a[i][j]+4*i
则程序执行后,a[2][2]的值为(  )
A.2 B.6
C.8 D.11
3.有如下Python程序段:
n=4
a=[[i*n+j+1 for j in range(n)]for i in range(n)]
for i in range(n//2):
for j in range(1,n,2):
a[i][j],a[n-i-1][n-j-1]=a[n-i-1][n-j-1],a[i][j]
则程序执行后,a[1][1]和 a[2][0]的值分别为(  )
A.6和9 B.8和9
C.11和9 D.11和8
4.有如下Python程序段:
n=4
a=[[j*n+i+1 for i in range(n)]for j in range(n)]
for i in range(1,n,2):
for j in range(n//2):
a[i][j],a[i][n-j-1]=a[i][n-j-1],a[i][j]
则程序执行后,a[1][1]和a[2][1]的值分别为(  )
A.6和10 B.7和10
C.6和11 D.7和11
5.用Python程序对分辨率为500*500的白色背景图像文件white.jpg(如图所示)进行处理,代码如下:
white.jpg
from PIL import Image
im=Image.open(″white.jpg″)
pix=im.load()
width=im.size[0] #获取图像宽度值
height=im.size[1] #获取图像高度值
for x in range(height):
for y in range(width):
if x<=width//2 and y<=height//2:
     if x%50==0 or y%50==0:
       pix[x,y]=(0,0,0)
elif y> width //2:
     if x==y or width-x-1==y:
       pix[x,y]=(0,0,0)
im.show()
程序执行后的图像效果是(  )
6.货轮在装载货物时,不相容的物品不能装在一只箱子中。比如酸类腐蚀物品不宜和碱类腐蚀物品混装,否则容易造成事故。物品不相容关系用下表表示:
每一种货物用一个整数编号表示,如第i物品和第j物品不相容,则表第i行j列和第j行i列的值均为1。如1号物品和3号物品不相容,则表中第1行第3列,第3行第1列的值均为1。小明设计了一个Python程序检查n张货物装箱清单是否合理(检查每张装箱单中是否有不相容的物品)。列表a依次存储各装箱清单中的物品编号(1-m之间的整数),每张清单的物品数量依次存储在列表b中。如b[0]=3,表示第1张装箱清单有3件物品。程序运行的部分结果如图所示。
请回答下列问题:
第1张清单[5,4,6,3,1] 第2张清单[4,3,5] 第3张清单[2,5,1] 第1张清单不合理! 第2张清单不合理!
(1)如物品不相容关系如表所示,有3张装箱清单,b[0]=3,b[1]=3,b[2]=4,列表a的值依次是6,2,3,1,4,3,4,2,5,1,则不合理的清单数量是________(填数字)。
(2)实现上述功能的Python程序如下,请在划线处填入合适的代码。
f=[[int(s[i*6+j]) for j in range(6)]for i in range(6)]
def Check(f,t):
for i in range(len(t)-1):
for j in range(①________):
     if f[t[i]-1][t[j]-1]==1:
       return False
return True
a=[5,4,6,3,1,4,3,5,2,5,1]
m=6
b=[5,3,3]
p=0;k=0;h=[]
for i in b:
c=Check(f,②________)
print(″第″,k+1,″张清单″,a[p:p+i])
if c==False:
h.append(″第″+str(k+1)+″张清单不合理!″)
k+=1
p=p+i
for ③________:
print(i)
7.编写“矩形面积”程序,实现如下功能:按一定比例随机生成a(1)至a(100)数组元素的值:0或1(0多1少);将这100个数组元素,按行依次转化为10×10的二维阵列;当数组元素的值为0时表示没有障碍物,当数组元素的值为1时有障碍物。寻找阵列中构造出的最大面积的矩形面积和起点坐标。程序运行界面如图所示。
(1)实现上述功能的Python程序如下,请在划线处填入合适的代码。
(2)程序中加框处代码有错,请改正。
实现上述功能的Python代码如下:
def Check(a,x,y): #在数组a中从点x,y开始向右向下查找最大矩形面积
i=x;maxx=0;n=10;jn=10
while iif ①________:
     break
j=y+1;s=0
while j     j+=1
②________
jn=j #更新右边界,从该位置开始,右边的区域不能计算面积
if s>maxx:
     maxx=s
i+=1
return maxx
#产生一个10*10的初值为0的二维数组a,并随机产生若干个障碍物,将数组a中的值修改为1,如图所示,代码略
n=0;maxx=0;px=0;py=0;t=0
for i in range(n):
for j in range(n):
if :
     ③________
if t>maxx:
     maxx=t
     px=i+1
     py=j+1
print(″构成的最大面积是:″,maxx,″。起点坐标为:″,px,py)
8.BMP图片能压缩的一个原因是图片本身存在空间冗余,即一幅图像像素之间往往存在着连贯性。如图a所示,假设此图为256色位图图像,第一行为16个白色像素,每个像素颜色用一个“FF”表示,存储信息用十六进制描述为“FF,FF,FF,……FF”(16个“FF”)。压缩后可以用两个字节“10FF”来表示,第一个字节“10”表示数量,第二个字节“FF”表示颜色,存储空间为原来的1/8。
现在对256色位图图像信息进行压缩,算法描述如下:
①像素用十六进制编码;
②对像素压缩用两个字节为一个单元存储,第一个字节存储连续相同像素的个数,第二字节存储此像素的颜色编码;
③连续相同像素超过255个,用多个单元存储该连续像素。
小刘根据上述描述设计了如下Python程序:
f=open(″图片代码.txt″,″r″)
list1=[];line=f.readline()
while line:
data=line.split()
list1=list1+data
line=f.readline()
print(″原始数据信息″)
print(list1)
print(″---------″)
f.close()
def dtoh(n):
tmp=″″
while n>0:
r=n % 16;n=n//16
if r>9:
     tmp=①________
else:
     tmp=str(r)+tmp
tmp=″0″+tmp #保证转换结果至少为两位十六进制数
return tmp[-2:]
n=len(list1) ;ans=[]
list1.append(″OV″)
key=list1[0];pos=1
while poscount=1
while poscount+=1
pos+=1
tim=count//255
rem=count % 255
for i in range(tim):
②________
if rem>0:
ans.append(dtoh(rem)+key)
③________
pos+=1
print(″压缩数据信息″)
print(ans)
阅读上述代码,请回答下列问题:
(1)图像数据片段“ABABAAAAAAAAAAAAA AAAAAAAD9”经过该程序压缩后的数据是________。
(2)请在划线处填入合适的代码。
9.生成m颗(m<=30)地雷随机放置在10×10的方格中,方块中出现地雷用#表示,出现数字,则表示在其周围相邻的方块中共有多少颗地雷,中间位置有8个方块相邻,边上位置有5个方块相邻,角上位置有3个方块相邻。程序运行的结果如图所示:
实现上述功能的Python程序如下,请在划线处填入合适的代码。
def Check(a,x,y): #统计第x行第y列四周雷的个数
count=0
for i in range(x-1,x+2):
for j in range(y-1,y+2):
     if ①________:
       if a[i][j]==9:
        count+=1
return count
import random
n=10
a=[[0 for j in range(10)]for i in range(10)]
m=int(input(″输入地雷的个数″))
i=0
while ix=random.randint(0,9)
y=random.randint(0,9)
if a[x][y]==0:
a[x][y]=9
②________
for i in range(n):
for j in range(n):
if a[i][j]!=9:
    ③________
for i in range(n):
s=″″
for j in range(n):
if a[i][j]==9:
     s=s+″# ″
else:
     s=s+str(a[i][j])+″ ″
print(s)
专题11 数 组
知识点一
1.A [第一个循环实现从第1个数据开始与他相邻的数据进行比较,如果他后面的数小就进行交换,结果为[12,9,18,8,19,28,6,2]。第2个循环的功能是最大值的初始位置在最后,若找到比最大值大的,更新最大值的位置,因此最大值位置为5,再将最大值与第一个数进行交换。]
2.C [变量i从0开始遍历,程序的功能是让[0,i]这个区间内数据不会重复,因此指针j需从i后面的第1个位置i+1开始遍历,若有重复(a[i]和a[j]相等),将最后一个数据a[n]覆盖a[j],数据个数n将减少一个。但a[n]也可能等于a[i],即a[i]和新的a[j]相等,只是将个数减少一个,j重新遍历一次。]
3.A [需从原数组最后一个位置开始,将数据向后移动,即把当前位置值赋值给他后面位置。]
4.C [一个数除2的余数分别等于列表a从后向前的数,那么就将列表a看成二进制数各个位上数字,转换成十进制数后为69。]
5.A [框中程序相当于把索引P位置以后字符依次前移一个位置,然后把最后一个元素删除,答案A实现同样功能。B内容不变,C只删除了最后一个元素,D则把P及以后元素全部删除了。]
6.D [本题考查循环结构。D选项中变量i已经是列表a中的元素,无法实现两个位置数据交换。]
7.D [state是两个数的差值,当两个差值不相等时进行最值比较,由于循环了n-2次,最后一次的最值在循环时没有比到,在循环结束后需再一次进行最值比较。]
8.C [本题考查Python循环与数组的应用。a数组初始有8个[0,9]元素。中间元素比两边元素大时往后移动两个位置,否则重新产生a[i]的值,也就是索引1、3、5位置上的值都是比两边相邻元素大。第二次循环中间元素比两边小时才往后移两个位置,否则重新产生a[i]的值,也就是索引2、4、6位置上的值都是比两边相邻元素小。]
9.A [本题考查最值查找。找到一个最大值,原最大值为现在次大值。若lst[i]大于max2,需更新次大值。]
10.D [遍历数组b中数据,如果数组b作为索引下标,其对应数组a中值大于前面的值,进行交换,即向后入前遍历,升序排列后并交换索引。]
11.C [找一个比key大的最小值。]
12.C [本题考查循环和分支结构的综合应用。综合分析程序可得for循环用循环变量i作为位置来遍历列表L的前八位元素,当相应位置上的值不大于输入的的k值时,将i位置上的元素赋值到j位置上,并且更新j的的值,若是i位置上的值大于输入的的k值,则不做任何处理,因此可以大致得到该程序的作用是将列表L前八位元素中不大于k的值依次前移并且输出新列表。C选项中最后一个10的索引值为8,访问不到,因此错误。]
13.B [queinfo初值为空,语句queinfo.append([item])是将一个列表添加到queinfo,因此他是一个二维数组。遍历列表a,在queinfo数组从第0个元素开始,与每个元素最后一个数据项进行比较,如果大于等于元素最后一个数据项,结束比较,此时j肯定在0至len(queinfo)-1之间,若j的值为len(queinfo),说明该元素比queinfo中每个元素的最后一个值均小,则新成一组。queinfo的值为[[43,87],[23,67,80]]。]
14.(1)①score[i]>amax and bj[i]==x ②return I ③not f[i] and score[i]>=fsx (2)qfx(m-cla)
解析 本题考查自定义函数的应用。(1)①search函数查找x班级最高分学生的下标,因此比较的关键有x班,且该班学生的得分两个条件。②qfx函数查找得分最高的前m个人的得分。在for i in range(n)循环中,统计每个分数的人数。从100分向下枚举,如果得分前面的得分总人数和小于m人,继续向下查找,当前面的人数累加和等于m时,表示正好有m个人符合条件,累加和大于m时,表示最低分数有多个相同的人。因此返回的切分线为i。③前面已经挑选了cla个人,将找出剩下m-cla个人,因此条件是f的值为False且分数线大于等于切分线。(2)前面已经选了cla个人,将找出剩下m-cla个人,因此将计算m-cla个人的切分线。
知识点二
1.A [本题考查二维数组空间相关知识点。元素a[3][4]的起始地址为SA+8*(24+4)=SA+224。]
2.D [创建一个每行均为1,2,3,4的3行二维数组,遍历每行每列,对每个数据项加上4*i,因此a[2][2]原值为3,再加8,值为11。]
3.D [创建一个[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]的二维数组,遍历前2行,对其中偶数列按对称行和对称列进行交换。a[1][1]是原a[2][2]的值,a[2][0]是原a[1][3]的值。]
4.B [本题考查二维数组。先生成一个1-4,5-8,9-12,13-16的4行4列的矩阵。外循环for i in range(1,n,2)表示对偶数行进行操作,j和n-j-1表示两个列坐标,且是左右对称的,行坐标保持不变,因此程序的功能是偶数行的数据进行左右水平翻转,奇数行保持不变。]
5.B [条件x<=width//2 and y<=height//2成立,表示坐标x,y位于左上角4分之1区域。若条件x==y or width-x-1==y成立,表示下半部分的两条对角线坐标,将这些区域的值赋值为黑色。]
6.(1)2 (2)①i+1,len(t) ②a[p:p+i] ③i in h
解析 本题考查二维数组的相关性质。(1)第2张中1和3不相容。(2)①第i物品和第j物品,为了避免组合重复,j从i+1到最后。②p的初值为0,表示第1张订单的开始位置,订单数量存储在数组b中,那么订单的结束位置为p+i-1。③从语句h.append(″第″+str(k+1)+″张清单不合理!″)来看,列表h中存储的是不合理的订单情况。
7.(1)①a[i][y]==1 ②s=(i-x+1)*(j-y) ③t=Check(a,i,j) (2)a[i][j]==0
解析 本题考查二维数组的性质。(1)①变量i从当前行开始,先向右遍历列,若碰到障碍物,语句jn=j是为了更新右边界,从该位置开始,右边的区域不能计算面积。接着再向下遍历,如果碰到i行的第1列就是障碍物,要结束循环,因此第i行第y列是障碍物。②面积是行和列构成。③调用自定义函数来计算最大面积t=Check(a,i,j)。(2)从第0行第0列这个点开始遍历,如果该点不是障碍物,开始寻找最大面积。
8.(1)02AB0AAA01D9 (2)①chr(r+55)+tmp ②ans.append(″FF″+key)或ans+=[″FF″+key] ③key=list1[pos]
解析 (1)对像素压缩用两个字节为一个单元存储,第一个字节存储连续相同像素的个数,第二字节存储此像素的颜色编码。(2)①大于9的转换成A-F之间的字母。②将压缩代码添加到ans中。③更新下一个连续字母key。
9.①0<=i解析 本题考查二维数组的相关性质。① Check函数统计第x行第y列四周雷的个数,变量i,j表示从他上一行前一列到下一行的后一列区域,但这些区域要在矩阵的范围内。②变量i表示雷的个数,每增加一个雷,x的值将增加1。③若当前位置不是雷,调用函数统计四周雷的个数a[i][j]=Check(a,i,j)。

展开更多......

收起↑

资源预览