一.选择题(共30小题)
1.采用冒泡排序算法,对某数组数据进行排序,经过一轮后的结果是“2,3,9,5,6,7”,那么下列说法不正确的是( )
A.这轮排序,有可能没发生数据交换
B.这轮排序,有可能只发生了1次数据交换
C.排序结束后,数据是升序的
D.完成全部排序后,数据交换的次数和冒泡的方向无关
2.有如下python程序:
def count(a,i):
for j in range(i+1,len(a)):
if a[j]<a[j﹣1]:
return j﹣i
else:
return len(a)﹣i
a=list(map(int,input( ).split( )))#将输入的字符串按照空格符进行分割后转换为整型列表
b=[1]*len(a)
for i in range(len(a)﹣1):
b[i]=count(a,i)
运行该程序,若输入数据为‘1 2 2 4 7 6’,则b[1]的值为( )
A.1 B.5 C.3 D.2.
3.数组a中的元素依次为[56,23,78,11,8]
for i in range(0,2):
for j in range(0,4﹣i):
if a[j+1]<a[j]:
a[j],a[j+1]=a[j+1],a[j]
执行上述Python程序段后,数组a中的元素依次为( )
A.8,11,23,56,78 B.23,11,8,56,78
C.11,8,23,56,78 D.8,11,56,23,78
4.某数组d中的数据依次是[8,12,15,28,28,32,36,39],要查找某个元素是否在数组中,下列说法正确的是( )
A.数组中有相同数据28,所以只能使用顺序查找
B.使用二分查找数据时,第1次查找的数据是d[3]
C.使用二分查找任何查找键时,查找的次数最少3次
D.使用二分查找数据时,第2次查找的数据可能是d[1]或d[6]
5.有100个有序数据,使用二分查找查找键key,最多查找( )次后查找结束。
A.4 B.5 C.6 D.7
6.有如下程序段:
n=int(input(“请输入0﹣10范围内的整数“))
a=[56,45,43,34,26,76,90,13,15,21]
ans=0
for i in range(n﹣1):
for j in range(n﹣1,i,﹣1):
if a[j]>a[j﹣1]:
a[j],a[j﹣1]=a[j﹣1],a[j]
ans+=1
print(ans)
若输入n的值为8,那么输出的值为( )
A.2 B.11 C.4 D.﹣77
7.某二分查找算法的Python程序段如下:
a=[8,17,24,30,36,40,55,58,61,66]
key=int(input( ))
i,j=0,9
res=( )
while i<=j:
m=(i+j+1)//2
if key==a[m]:
break
elif key<a[m]:
j=m﹣1
else:
i=m+1
res.append(a[m])
print(res)
执行该程序段,当输入的值为30时,程序输出结果为( )
A.[40,24] B.[40,24,36] C.[24,36] D.[36,17,24]
8.已知字符串数组a的原始数据为['128','26','9','61','15','2','318'],为了对该数组进行排序操作,小美编写了如下Python程序:
for i in range(3):
for j in range(6,i+1,﹣1):
if a[j]<a[j﹣1]:
a[j],a[j﹣1]=a[j﹣1],a[j]
则程序运行之后,数组a的值为( )
A.['128','15','2','26','318','61','9']
B.['128','15','26','9','61','2','318']
C.['128','15','2','26','9','61','318']
D.['128','15','2','26','318','9','61']
9.使用冒泡排序算法对数组排序,要求奇数和偶数各自按升序排序,其中奇数在前,偶数在后。例如,将数组a=[4,5,2,9,6,7,10,3,8,1],排序后a=[1,3,5,7,9,2,4,6,8,10]。如下Python程序能实现相关功能,则横线处应填入的代码为( )
a=[4,5,2,9,6,7,10,3,8,1]
for i in range(len(a)):
for j in range(len(a)﹣1,i,﹣1):
if:
a[j],a[j﹣1]=a[j﹣1],a[j]
A.a[j]%2==a[j﹣1]%2 and a[j]<a[j﹣1]or a[j]%2<a[j﹣1]%2
B.a[j]%2==a[j﹣1]%2 and a[j]<a[j﹣1]or a[j]%2>a[j﹣1]%2
C.a[j]%2==a[j﹣1]%2 or a[j]<a[j﹣1]and a[j]%2<a[j﹣1]%2
D.a[j]%2==a[j﹣1]%2 or a[j]<a[j﹣1]and a[j]%2>a[j﹣1]%2
10.某冒泡排序算法的Python程序段如下:
import random
a=[0]*6;i=0
while i<6:
a[i]=random.randint(1,10)
if a[i]%2!=i%2:
continue
i+=1
for i in range(0,4):
for j in range(5,i+1,﹣1):
if a[j]<a[j﹣2]:
a[j],a[j﹣2]=a[j﹣2],a[j]
执行该程序后,a数组中的元素可能是( )
A.3,4,5,8,9,10 B.0,1,8,3,10,7
C.2,1,6,1,10,3 D.10,1,8,3,4,7
11.有1个升序排序的数组a,a[1]﹣a[n],n>=3,从左到右相邻两个元素的差值(后一个元素值减去前一个元素值)先由小到大、再由大到小,且相邻两个差值不相等,为了查找相邻两个元素的最大差值,小李编写的Python程序段如下:
i,j=1,n
while i+1<j:
m=(i+j)//2
if a[m+1]﹣a[m]>a[m]﹣a[m﹣1]:
else:
print(“最大差值为:“,a[j]﹣a[i])
上述程序段两个横线处的语句分别为( )
A.i=m j=m B.i=m j=m﹣1
C.i=m+1 j=m﹣1 D.i=m+1 j=m
12.有序数组a中有n元素,用二分查找算法在数组a中查找key值所在的位置,如果有重复元素,则显示最早出现该key值最早出现的位置。相应的Python程序如下:
a=[1,2,3,3,3,4,5,6]
i,j=0,len(a)﹣1
key=3
while i<=j:
m=(i+j)//2
if :
j=m﹣1
else:
i=m+1
print( )
要使程序实现上述算法,横线处应填入的语句是( )
A.key<=a[m]j B.key<a[m]j C.key<=a[m]I D.key<a[m]i
13.某二分查找算法的Python程序段如下:
import random
a=[3,8,12,14,15,26,27,28]
key=random.randint(1,30)+0.5
i,j=0,len(a)﹣1
c=0
while i<=j:
m=(i+j)//2
if key<a[m]:
j=m﹣1
c﹣=1
else:
i=m+1
c+=1
print(c)
执行该程序后,c的值不可能是( )
A.﹣3 B.0 C.1 D.4
14.某二分查找算法的程序段如下:
import random
d=[1,3,4,5,7,8,11,13,15,18]
key=random.randint(1,10);i=0;j=9;n=0
if key>5:
key=key+5
while i<=j:
m=(i+j)//2
if key<=d[m]:
j=m﹣1;n=n﹣1
else:
i=m+1;n=n+1
执行该程序段后,变量n的值不可能为( )
A.﹣2 B.﹣1 C.1 D.2
15.某二分查找算法的Python程序段如下:
d=[11,19,25,33,47,58]
i,j=0,5
f=False
key=int(input( ))
while i<=j and f==False:
m=(i+j)//2
if key==d[m]:
f=True
if key<d[m]:
j=m﹣1
else:
i=m+1
运行该程序后输入key值为“33”,运行程序结束后下列说法不正确的是( )
A.变量f的值为True B.变量i的值为4
C.变量j的值为4 D.变量m的值为3
16.某算法的python程序段如下:
from random import randint
a=[23,21,19,18,16,15,14,11]
key=randint(0,3)*2+13
i,j,c=0,len(a)﹣1,0
while i<=j:
m=(i+j+1)//2
if a[m]>=key:
i=m+1
else:
j=m﹣1
c+=1
该程序段执行后,下列说法不正确的是( )
A.i的值为j+1 B.i的值可能是8
C.j的值可能是5 D.c的值一定是3
17.有如下 Python 程序段:
a=[10,15,32,32,45,53,53,65,77,98]
k=int(input( ));s=“”;left,right=0,len(a)﹣1
while left<=right:
m=(left+right)//2
if a[m]<k:
left=m+1;s=s+“R“
else:
right=m﹣1;s=s+“L“
该程序运行后,变量s的值可能是( )
A.“LR“ B.“LRL“ C.“LRR“ D.“RLR“
18.某二分查找算法的python程序段如下:
key=int(input( ));s=““;i=0;j=9
while i<=j:
m=(i+j)//2
if a[m]==key:break
if key<a[m]:
j=m﹣1;s=s+“L“
else:
i=m+1;s=s+“R“
按非降序排序的整型数组a的值依次为“11,23,31,39,44,52,60,x,69,89”。输入66,执行该程序段后s值为“RRL”,则x的可能值的个数为( )
A.3 B.4 C.5 D.6
19.有如下程序段:
import random
a=[]
for i in range(6):
a.append(random.randint(10,99))
for i in range(1,3):
for j in range(0,6﹣i):
if a[j]%10>a[j+1]%10:
a[j],a[j+1]=a[j+1],a[j]
执行该段程序后,数组a中的元素不可能为( )
A.[73,85,55,55,86,16] B.[81,32,64,98,59,59]
C.[10,68,89,27,82,96] D.[10,71,46,64,27,38]
20.有如下Python程序段:
import random
a=[4,2,6,5,4,2,9,7]
k=random.randint(1,10)
i,j=0,len(a)﹣1
x=““
while i<=j:
m=(i+j)//2
if k<=a[m]:
j=m﹣1;x=x+“L“
else:
i=m+1;x=x+“R“
print(x)
执行该程序后,输出结果不可能是( )
A.LLL B.LRL C.RLR D.RRRR
21.某算法的VB程序段如下:
key=randint(0,3)*2+13
i,j,c=0,len(a)–1,0
while i<=j:
m=(i+j+1)//2
if a[m]>=key:
i=m+1
else:
j=m﹣1
c+=1
列表a=[23,21,19,18,16,15,14,11],该程序段执行后,下列说法不正确的是( )
A.i的值为j+1 B.i的值可能是8
C.j的值可能是5 D.c的值一定是3
22.某手机APP程序为了增加程序热度,采用“签到换积分”的形式来吸引用户,用户的签到记录由“0”和“1”的字符串组成,其中字符“0”表示未签到,字符“1”表示签到,积分计算规则如下:签到 1 天 得 1 分,若连续签到 k 天,则 k 天所得分数为 1+2+…+k﹣1+k分;未签到得0分。例如:
某用户的签到记录为“1011000111100111111”,执行上述流程后,输出结果为( )
A.10 B.13 C.35 D.47
23.小明想要在数字串 s 中寻找连续数字之和为 k 的子串,若有多个子串符合,则输出第一个子串。
例如,s=“20220520“,k=7,则符合要求的子串为“205“。实现该功能的部分 python 代码如下:
i=0;j=0;sum=0
for j in range(len(s)):
sum+=int(s[j])
while sum>k:
c=s[i]
①______
i+=1
if sum==k:
print(“符合要求的子串为:“,②______)
break
划线①②处的语句是( )
A.①sum=sum+int(c) ②s[i:j+1]
B.①sum=sum﹣int(c) ②s[i﹣1:j+1]
C.①sum=sum+int(c) ②s[i:j]
D.①sum=sum﹣int(c) ②s[i:j+1]
24.有如下 python 程序段:
from random import randint
list=[0]*6
for i in range(6):
list[i]=randint(10,99)
for i in range(2):
for j in range(5﹣i):
if list[j]//10+list[j]%10>list[j+1]//10+list[j+1]%10:
list[j],list[j+1]=list[j+1],list[j]
print(list)
该程序段运行后,列表list的值不可能为( )
A.[54,17,26,40,73,85] B.[10,36,81,60,84,69]
C.[33,81,15,46,19,69] D.[10,22,31,67,72,99]
25.某手机APP程序为了增加程序热度,采用“签到换积分”的形式来吸引用户,用户的签到记录由“0”和“1”的字符串组成,其中字符“0”表示未签到,字符“1”表示签到,积分计算规则如下:签到1天得1分,若连续签到k天,则k天所得分数为1+2+…+k﹣1+k分;未签到得0分。例如:
实现上述功能的流程图如图所示,则图中①、②标记处应填入的内容分别是( )
A.t←1 sum←t B.t←0 sum←t
C.t←1 sum←sum+t D.t←0 sum←sum+t
26.某 Python程序如下:
import random
n=random.randint(1,4);a=[7,2,7,3,9,4]
for i in range(1,n):
for j in range(0,6﹣i):
if a[j]<a[j+1]:a[j],a[j+1]=a[j+1],a[j]
执行该程序段后,数组a中的元素不可能为( )
A.9,7,7,4,3,2 B.7,7,3,9,4,2
C.7,9,7,4,3,2 D.7,2,7,3,9,4
27.现有n个学生的 7 门学科成绩已存入一维数组 cj 中。某 python 程序代码段如下:
cj=[96,83,91,85,86,77,88,98,93,94,82,96,87,99]
def f(x):
p=x*7;k=0
for j in range(7):
if cj[p+j]>cj[p+k]:
k=j
return(k)
km=“物化生政史地技“;n=2;s=““
for i in range(n):
s+=km[f(i)]
print(s)
运行后,输出的结果为( )
A.物技 B.地政 C.物生 D.技物
28.有如下python程序段:
n=0;i=1;f=True;c=0;a=[10,16,82,36,51,87]
while i<=5 and f:
n=n+1;f=False
for j in range(5,i﹣1,﹣1):
c+=1
if a[j]<a[j﹣1]:
a[j],a[j﹣1]=a[j﹣1],a[j]
last=j;f=True
i=last+1
经过该程序段“加工”后,下列说法不正确的是( )
A.变量n的值为5
B.此过程中数据共需比较8次
C.此过程中数据共需交换2次
D.数组元素a(1)到a(6)的值为升序
29.有如下python程序段:
a=[195,170,65,99,98];f=True;i=5;k=0
while i>1 and f:
f=False
for j in range(0,i﹣1):
if a[j]<a[j+1]:
t=a[j];a[j]=a[j+1];a[j+1]=t
k=k+1;f=True
i=i﹣1
该程序执行后,下列说法正确的是( )
A.数组a各元素的值是:65,98,99,170,195
B.变量k的值为3
C.数组元素65在此过程中交换了3次
D.变量i的值为3
30.有如下python程序段:
import random
a=random.sample(range(1,100),6)
for i in range(0,1):
for j in range(5,i,﹣1):
if a[j]%3>a[j﹣1]%3:
t=a[j];a[j]=a[j﹣1];a[j﹣1]=t
执行上述程序段后,下列选项中,数组元素a的值不可能的是( )
A.2,1,4,3,6,7 B.5,2,1,7,8,3
C.7,7,6,3,3,2 D.8,7,4,3,3,2
参考答案与试题解析
一.选择题(共30小题)
1.【解答】解:冒泡排序,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。由于题目没有说明排序是升序还是降序,所以经过一轮排序,有可能没发生数据交换,如果为升序,因为最小值2在最前面,所以选项A符合题意。
故选:A。
2.【解答】解:当i=1时,b[1]=count(a,1),在函数count(a,1)中j的取值为range(i+1,len(a)),即range(2,6),当j取2时,a[2]<a[1]的条件不满足,则返回len(a)﹣i,即6﹣1=5,此时循环结束,count(a,1)=5,即b[1]=5。故选B。
3.【解答】解:当i=0时,j值范围为range(0,4),冒泡排序后a=[23,56,11,8,78],78排到了最后面;当i=1时,j值范围为range(0,3),冒泡排序后a=[23,11,8,56,78],56排到了倒数第2位;此时循环结束故选B。
4.【解答】解:数组d中的数据是有序的,可以用二分查找法进行查找,故选项A是错误的;第一次查找时,m=3,即定位到的数据是d[3],故B选项是正确的。如果第一次查找时的数据恰好是要查找的数据,那么查找次数最少是1次,故选项C是错误的;第二次查找时,d[3]左边是3个元素,定位到d[1],右边是4个元素,定位到d[5],故选项D是错的。故选B。
5.【解答】解:根据公式,当n=100时,得出a=6,b=7,二分查找法最多查找7次。故选D。
6.【解答】解:n的值为8,外循环i的取值范围为[0,6],内循环中range的范围为range(7,i,﹣1),冒泡排序从a[7]=90开始往前比较排序。当外循环i=0时,内循环j值范围为[7,1],因90是最大数,所以往前比较6次都进行数值交换,此时ans的值为6;当外循环i=1时,内循环j值范围为[7,2],此时a[7]=76是第二大的数,所以往前比较5次都进行数值交换,此时ans的值增加5为11;当外循环i=2时,内循环j值范围为[7,3],此时a[7]=26,从26往前的数值恰好都是按照降序排列的,所以往前比较时都不进行数值交换,ans值不变为11;当外循环i取其它值时,列表a的元素不再发生位置变化,ans值不变为11。故选B。
7.【解答】解:key=30;第一次循环:m=5,a[m]=40,而key<40,剩余查找范围为列表中40之前的元素,此时i=0,j=m﹣1=4,res=[40];第二次循环:m=2,a[m]=24,而key>24,剩余查找范围为列表中30和36,此时i=m+1=3,j=4,res=[40,24];第三次循环:m=4,a[m]=36,而key<36,剩余查找范围为列表中30,此时i=3,j=m﹣1=3,res=[40,24,36];第四次循环:m=3,a[m]=30,而key=30,循环因break中断,a[m]不再追加到列表res中,此时res=[40,24,36]故选B。
8.【解答】解:当i=0时,j值范围为range(6,1,﹣1),冒泡排序后a=['128','15','26','9','61','2','318'],字符串15排到了第2位;当i=1时,j值范围为range(6,2,﹣1),冒泡排序后a=['128','15','2','26','9','61','318'],字符串2排到了第3位;当i=2时,j值范围为range(6,3,﹣1),冒泡排序后a=['128','15','2','26','318','9','61'],字符串318排到了第5位;此时程序循环结束。故选D。
9.【解答】解:从程序中可以看出,利用冒泡排序法从列表a最后面的元素往前进行排序。当比较这2个元素的时候,存在2种情况要把这2个数的位置对调:(1)这2个元素同是奇数或者偶数且后面的数小于前面的数,即a[j]%2==a[j﹣1]%2 and a[j]<a[j﹣1];(2)这2个元素分别是偶数和奇数,即a[j]%2>a[j﹣1]%2。
故选B。
10.【解答】解:初始值a=[0,0,0,0,0,0];第一步:在while循环中对于a[i]%2!=i%2的都进行continue跳过,即a[i]%2=i%2的才符合,最终a[0]a[2]a[4]的数一定是偶数,a[1]a[3]a[5]一定是奇数。第二步:双重for循环是对偶数和奇数按照升序进行冒泡排序。答案A选项中第1位应是偶数,故排除掉;答案B选项中0不在[1,10]这个范围中,故排除掉;答案D选项中偶数位排序是倒序的,不符合,故排除掉。
故选C。
11.【解答】解:采用二分查找法,第一次查找时,定位到m位置,若a[m+1]﹣a[m]>a[m]﹣a[m﹣1],说明价差是增大的,那么要找的那个数一定在从m开始往右这个范围区间当中,因为m位置的数有可能是要找的数,所以不能排除掉,故第1个空要填i=m。同样的道理,如果a[m+1]﹣a[m]<a[m]﹣a[m﹣1],说明价差是减小的,那么要找的那个数一定在从m开始往左这个范围区间当中,因为m位置的数有可能是要找的数,所以不能排除掉,故第2个空要填j=m。这样经过多次二分查找后,最终找到m位置的数就是a[j],则最大数就是a[j]﹣a[i]。故选:A。
12.【解答】解:程序中j=m﹣1,说明key值在左边的范围之中,则第一个空要填写的条件就是key<=a[m],因为要查找的是重复元素第一次出现的位置,则条件中必须要有key=a[m],这里有2种情况可能出现:第一种情况是往左查找时存在key值的元素,则最终查找到该元素时,j值减1后小于i结束循环,i值就是key值在数组中出现的位置;第二种情况是往左查找时不存在key值,则循环后最终查找到key值在数组中左边的那个元素,此时i值增加1后大于j值结束循环,i值就是key值在数组中出现的位置。所以第二个空要填写i。故选C。
13.【解答】解:把key值分为2种情况,第一种情况是当key<27时,循环3次就结束了,则c值的范围为[﹣3,3],只有当key<3的时候,c值才会连续减1到循环结束,此时c值为﹣3,其它key值时,c值不会连续减1或者加1到循环结束,故c值只能取到﹣3、﹣1、1这几个数。第二种情况是当key>27时,key值为27.5时,循环到第四次时与列表中28比较,c值减1变为2就结束了,而key值大于列表中28的数时c值连续加1到循环结束,此时c值为4,故c值只能取到2、4这几个数。所以c值只能取﹣3、﹣1、1、2、4这几个数。故选B。
14.【解答】解:第一次循环:二分查找0到9这10个数,对半定位到m=4,则d[4]=7,key值为1比d[4}小,n值减1后为﹣1;key值为10的数增加5,变为15,大于d[4],n值加1后为1;第二次循环:按照二分查找分别定位在d[1]=3和d[7]=13位置,key值为1小于d[1],n值减1变为﹣2;key值为15大于d[7],n值加1变为2;第三次循环:key值为1只剩下跟d[0]比较了,因等于d[0],则n值加1,变为﹣1,循环结束;key值为15与定位在d[8]的数15相等,n值加1变为3;第四次循环:key值为15与d[9]比较,小于d[9],n值减1变为2.所以key值为1时n值为﹣1,key值为10时n的值为2,n的取值范围为【﹣1,2】。故选:A。
15.【解答】解:初始值i=0,j=5,f=False,key=33。第一次循环:m=2,d[2]=25,key>25,则i=m+1=3,j值不变为5第二次循环:m=4,d[4]=47,key<47,则i值不变为3,j=m﹣1=3第三次循环:m=3,d[3]=33,key=33,则f=True,i=m+1=4,j值不变为3,循环结束。故选:C。
16.【解答】key=randint(0,3)*2+13,可知key依次取的值是0、15、17、19,第一次查找,m=4,a(4)=16,如果向右查找,则i=m+1=5,进行第二次查找m=6,a(6)=14,若key=0,则i=7,此时进行第三次查找,m=8,a(8)=11,11仍然大于0,更新i=m+1=9,故i的值不可能是8。
故选:B。
17.【解答】该查找过程用二叉树表示如下,分析程序可知,当遍历左子树时,执行 s=s+“R“;当遍历右子树时,执行 s=s+“L“。结合二叉树以及选项可知,程序运行后,变量s的值可能是“LRL“,。
故选:B。
18.【解答】x的取值范围应该为60到69,再考虑到要查找的key的值为66,执行该程序段后s的值为“RRL”,因此由此可以判断出查找的中值m的顺序分别为5,8,9,而x的位置是8,也就是说,以key=66为关键字进行第二次查找后继续右偏,这说明x的值肯定比66小(不可能等于66,若等于66则退出查找),因此可以将x的取值范围缩小为60到65之间的整数,即60、61、62、63、64、65这6个整数。
故选:D。
19.【解答】分析程序可以看到最后的两个循环语句是进行降序排序算法。外循环进行了两次循环,a数组中的最后两个元素是个位数最大的两个数值。四个选项中不满足这个条件的是C选项。故选C。
20.【解答】输入的内容可分为四种情况,(﹣∞,2],[3,5],[6,9][10,∞),故可能产生四种不同的 s 的值['LLL','LRL','RRL','RRRR'],则输出的结果不可能出现的是RLR。
故选:C。
21.【解答】key=randint(0,3)*2+13,可知key依次取的值是0、15、17、19,第一次查找,m=4,a(4)=16,如果向右查找,则i=m+1=5,进行第二次查找m=6,a(6)=14,若key=0,则i=7,此时进行第三次查找,m=8,a(8)=11,11仍然大于0,更新i=m+1=9,故i的值不可能是8。
故选:B。
22.【解答】由图可知,只要中断签到,再签就从1开始,某用户的签到记录为“1011000111100111111”,所以该用户得分为1+3+10+21=35分。
故选:C。
23.【解答】本题是寻找字符串中连续数字(全部都是1位数)之和为k的子串,s=“20220520“,k=7,则符合要求的子串为“205“。第一空结合语句sum=sum+int (ch1)需要将s[j]转化为字符,故填写为chl=s[j];当sum>k时,ch2=s[i],此时需要计算sum的值,故写sum=sum﹣int (ch2);第三空打印的是符合要求的字符串,故写print(s[i:j+1])。
故选:D。
24.【解答】分析程序可知,该程序实现比较相邻的两个数,若j的个位数与十位数的和大于j+1的个位数与十位数的和,则交换j与j+1,外循环2次,即a(6)是6个两位正整数中个位数与十位数和最大的数,a(5)其次,结合选项,不可能的是10,22,31,67,72,99。
故选:D。
25.【解答】如果坚持去签那么进行累加,否则签到积分为0,故①处输入t=0。签到1天得1分,若连续签到k天,则k天所得分数为1+2+…+k﹣1+k分,执行累加的积分为sum=sum+t,D选项符合题意。
故选:D。
26.【解答】n=random.randint(1,4),1<=n<=4,外循环for i in range(1,n),从i=1开始循环,内循环for j in range(0,6﹣i):从a[0]开始遍历数组比较和交换,if a[j]<a[j+1]:a[j],a[j+1]=a[j+1],元素值小的交换到数组下标大的位置,即最小的值排在数组的最后面,数组最小值是2,从A,B,C,D四个选项看D选项数组的值是4所以数组中的元素不可能为D选项。故选:D。
27.【解答】通过分析题干和代码,可以知道程序的作用是找出每个学生7门功课中,分数最高的科目。前7个数据中最高为96,后7个数据最高分是99。对应的科目分别是物和技。故选A。
28.【解答】f是每趟排序是否交换的标志,如果没有交换,则提前退出循环。变量n是排序的趟数。Last是记录每趟最后一次交换的位置。当i=2时,比较5次,交换1次,Last=4。接下来i=5,比较2次,交换1次,Last=5。接下来i=6,比较1次,但未交换,退出循环。排了3趟。
故选:A。
29.【解答】阅读程序可知,本程序实现的是数组的降序排序,变量k的值为2,数组元素65在此过程中交换了2次,变量i的值为3。
故选:D。
30.【解答】阅读程序可知,外循环i只执行一次,所以一次循环后,数组中a[j]%3余数最大的值,应该在列表的最前端,阅读选项可知,选项C最为不可能,因为余数最大的是2,却在末尾。
故选:C