资源简介 一.选择题(共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﹣ielse:return len(a)﹣ia=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,78C.11,8,23,56,78 D.8,11,56,23,784.某数组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.76.有如下程序段:n=int(input(“请输入0﹣10范围内的整数“))a=[56,45,43,34,26,76,90,13,15,21]ans=0for 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+=1print(ans)若输入n的值为8,那么输出的值为( )A.2 B.11 C.4 D.﹣777.某二分查找算法的Python程序段如下:a=[8,17,24,30,36,40,55,58,61,66]key=int(input( ))i,j=0,9res=( )while i<=j:m=(i+j+1)//2if key==a[m]:breakelif key<a[m]:j=m﹣1else:i=m+1res.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]%2B.a[j]%2==a[j﹣1]%2 and a[j]<a[j﹣1]or a[j]%2>a[j﹣1]%2C.a[j]%2==a[j﹣1]%2 or a[j]<a[j﹣1]and a[j]%2<a[j﹣1]%2D.a[j]%2==a[j﹣1]%2 or a[j]<a[j﹣1]and a[j]%2>a[j﹣1]%210.某冒泡排序算法的Python程序段如下:import randoma=[0]*6;i=0while i<6:a[i]=random.randint(1,10)if a[i]%2!=i%2:continuei+=1for 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,7C.2,1,6,1,10,3 D.10,1,8,3,4,711.有1个升序排序的数组a,a[1]﹣a[n],n>=3,从左到右相邻两个元素的差值(后一个元素值减去前一个元素值)先由小到大、再由大到小,且相邻两个差值不相等,为了查找相邻两个元素的最大差值,小李编写的Python程序段如下:i,j=1,nwhile i+1<j:m=(i+j)//2if 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﹣1C.i=m+1 j=m﹣1 D.i=m+1 j=m12.有序数组a中有n元素,用二分查找算法在数组a中查找key值所在的位置,如果有重复元素,则显示最早出现该key值最早出现的位置。相应的Python程序如下:a=[1,2,3,3,3,4,5,6]i,j=0,len(a)﹣1key=3while i<=j:m=(i+j)//2if :j=m﹣1else:i=m+1print( )要使程序实现上述算法,横线处应填入的语句是( )A.key<=a[m]j B.key<a[m]j C.key<=a[m]I D.key<a[m]i13.某二分查找算法的Python程序段如下:import randoma=[3,8,12,14,15,26,27,28]key=random.randint(1,30)+0.5i,j=0,len(a)﹣1c=0while i<=j:m=(i+j)//2if key<a[m]:j=m﹣1c﹣=1else:i=m+1c+=1print(c)执行该程序后,c的值不可能是( )A.﹣3 B.0 C.1 D.414.某二分查找算法的程序段如下:import randomd=[1,3,4,5,7,8,11,13,15,18]key=random.randint(1,10);i=0;j=9;n=0if key>5:key=key+5while i<=j:m=(i+j)//2if key<=d[m]:j=m﹣1;n=n﹣1else:i=m+1;n=n+1执行该程序段后,变量n的值不可能为( )A.﹣2 B.﹣1 C.1 D.215.某二分查找算法的Python程序段如下:d=[11,19,25,33,47,58]i,j=0,5f=Falsekey=int(input( ))while i<=j and f==False:m=(i+j)//2if key==d[m]:f=Trueif key<d[m]:j=m﹣1else:i=m+1运行该程序后输入key值为“33”,运行程序结束后下列说法不正确的是( )A.变量f的值为True B.变量i的值为4C.变量j的值为4 D.变量m的值为316.某算法的python程序段如下:from random import randinta=[23,21,19,18,16,15,14,11]key=randint(0,3)*2+13i,j,c=0,len(a)﹣1,0while i<=j:m=(i+j+1)//2if a[m]>=key:i=m+1else:j=m﹣1c+=1该程序段执行后,下列说法不正确的是( )A.i的值为j+1 B.i的值可能是8C.j的值可能是5 D.c的值一定是317.有如下 Python 程序段:a=[10,15,32,32,45,53,53,65,77,98]k=int(input( ));s=“”;left,right=0,len(a)﹣1while left<=right:m=(left+right)//2if 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=9while i<=j:m=(i+j)//2if a[m]==key:breakif 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.619.有如下程序段:import randoma=[]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 randoma=[4,2,6,5,4,2,9,7]k=random.randint(1,10)i,j=0,len(a)﹣1x=““while i<=j:m=(i+j)//2if 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.RRRR21.某算法的VB程序段如下:key=randint(0,3)*2+13i,j,c=0,len(a)–1,0while i<=j:m=(i+j+1)//2if a[m]>=key:i=m+1else:j=m﹣1c+=1列表a=[23,21,19,18,16,15,14,11],该程序段执行后,下列说法不正确的是( )A.i的值为j+1 B.i的值可能是8C.j的值可能是5 D.c的值一定是322.某手机APP程序为了增加程序热度,采用“签到换积分”的形式来吸引用户,用户的签到记录由“0”和“1”的字符串组成,其中字符“0”表示未签到,字符“1”表示签到,积分计算规则如下:签到 1 天 得 1 分,若连续签到 k 天,则 k 天所得分数为 1+2+…+k﹣1+k分;未签到得0分。例如:某用户的签到记录为“1011000111100111111”,执行上述流程后,输出结果为( )A.10 B.13 C.35 D.4723.小明想要在数字串 s 中寻找连续数字之和为 k 的子串,若有多个子串符合,则输出第一个子串。例如,s=“20220520“,k=7,则符合要求的子串为“205“。实现该功能的部分 python 代码如下:i=0;j=0;sum=0for j in range(len(s)):sum+=int(s[j])while sum>k:c=s[i]①______i+=1if 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 randintlist=[0]*6for 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←tC.t←1 sum←sum+t D.t←0 sum←sum+t26.某 Python程序如下:import randomn=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,2C.7,9,7,4,3,2 D.7,2,7,3,9,427.现有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=0for j in range(7):if cj[p+j]>cj[p+k]:k=jreturn(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=Falsefor j in range(5,i﹣1,﹣1):c+=1if a[j]<a[j﹣1]:a[j],a[j﹣1]=a[j﹣1],a[j]last=j;f=Truei=last+1经过该程序段“加工”后,下列说法不正确的是( )A.变量n的值为5B.此过程中数据共需比较8次C.此过程中数据共需交换2次D.数组元素a(1)到a(6)的值为升序29.有如下python程序段:a=[195,170,65,99,98];f=True;i=5;k=0while i>1 and f:f=Falsefor j in range(0,i﹣1):if a[j]<a[j+1]:t=a[j];a[j]=a[j+1];a[j+1]=tk=k+1;f=Truei=i﹣1该程序执行后,下列说法正确的是( )A.数组a各元素的值是:65,98,99,170,195B.变量k的值为3C.数组元素65在此过程中交换了3次D.变量i的值为330.有如下python程序段:import randoma=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,3C.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 展开更多...... 收起↑ 资源预览