资源简介 专题一 求程序运行结果1.有如下VB程序段:For i = 1 To 6 a(i)=Int(Rnd*10)+1Next iFor i = 1 To 5If i Mod 2=1 And a(i)>a(i+1) Then t=a(i):a(i)=a(i+1):a(i+1)=tElse a(i)=a(i)+1End IfNext i执行程序后,a数组各元素可能是( )A.11,11,7,9,3,9 B.6,2,8,10,5,9C.6,9,3,7,8,12 D.3,9,0,8,2,7解析 产生a(i)值的范围是[1,10],排除答案C和D。当i是奇数时,并且a(i)>a(i+1)时交换,也就是说奇数位的数小于等于他后面的数。当奇数位的数小于等于他后面的数,或者是偶数位时,执行a(i)=a(i)+1,此时a(i)有可能等于11。答案 A2.有VB程序段如下:For i = 1 To 6a(i) = Int(Rnd * 20) + 1If a(i) Mod 2 = i Mod 2 Thena(i) = a(i) - 1Elsea(i) = a(i) + 2End IfNext i执行该程序段后,a(1)~a(6)各元素可能的是( )A.13,2,7,12,5,18 B.22,7,0,15,4,19C.20,9,18,23,4,7 D.6,0,4,21,18,17解析 产生a(i)值的范围是[1,20],当i是奇数时,如果a(i)也是奇数,将他减1,成为偶数。当i是偶数时,如果a(i)也是偶数,将他减1,成为奇数。因此奇数位产生的是偶数,偶数位产生的奇数。当产生的最小奇数为1时,减1为0,即最小偶数为0,当产生的最大偶数为20时,加2为22。同理可得奇数的范围是[1,21]。答案 B3.有如下所示VB程序段:str1 = ”ABCDEFGHIJKLMNOPQRSTUVWXYZ”s = ” ”For i = 1 To 4t = Int(Rnd * 10) + 1If t Mod 2 = i Mod 2 Thent = t + 1Elset = t + 2End Ifs = s + Mid(str1, t, 1)Next iList1.AddItem s执行该程序段后,列表框List1中可能显示的内容是( )A.BADC B.BCDY C.DEFG D.CDEF解析 产生t值的范围是[1,10]。当i是奇数时,如果t也是奇数,加1成为偶数,t不是奇数,加2还是偶数,且数的范围是[2,12]。当i是偶数时,如果t也是偶数,加1成为奇数,t不是偶数,加2还是奇数,且数的范围是[3,11]。因此奇数位产生的是偶数,偶数位产生的奇数。答案 C4.有如下VB程序段:i = 1: n = 5Do While i <= nx = Int(Rnd() * 9) + 1If x Mod 2 = 1 Then a(i) = xElse a(n)=x n=n-1End Ifi = i + 1Loop数组元素的初值均为0,执行该程序段后,在下列选项中a(1)至a(5)各元素值不可能的是( )A.7 1 3 9 8 B.3 3 0 8 8C.0 1 0 4 2 D.1 3 5 5 0解析 产生的数[1,9],偶数放在后面,奇数放在前面。A选项,先产生4个奇数,再产生一个偶数。B选项,先产生两个奇数,再产生两个偶数,此时i=4,n=3,不满足条件,退出循环,因此第3个元素为0。C选项,先产生一个偶数,再产生一个奇数,再生产2个偶数,此时n=3,i=5,不满足条件。D选项,先产生4个奇数,此时n=5,条件成立,但产生的数不可能是0。答案 D5.有如下 VB 程序段:a(1) = 3: a(2) = 4: a(3) = 1: a(4) = 2: a(5) = 5k = Int(Rnd * 4) + 1For i = 1 To 5If i <> k ThenIf a(i)End IfNext i执行该程序段后,数组元素 a(1)到 a(5)中的值依次不可能为( )A.5 4 3 2 1 B.3 4 1 2 5C.3 4 2 1 5 D.1 4 3 2 5解析 k的取值范围是[1,4],A选项中只有当i=5,k=1时才能把5换到最前面,但此时又不满足条件a(i)2就不会换,当i=2时k等于任何值,均不会换,当i=3时,k=3,不换。C选项中,3和4互换,D选项2和4互换。答案 A6.有以下VB程序段:a(1) = 2For i = 2 To 3a(i)=a(i-1)-Int(Rnd()*2)If i Mod 2 = 1 Thena(i) = a(i) + 1Elsea(i) = a(i) - 1End IfNext i执行程序后,a(2)和a(3)的值不可能的是( )A.1,1 B.1,0 C.0,1 D.0,0解析 语句a(i)=a(i-1)-Int(Rnd()*2)的功能是让a(i)的值比他前面的小1或相等。即a(2)为1或2,他的值减去1后,值可能为0或1。当a(2)=1时,a(3)的值可能是1或0,加1后的值可以是1或2。当a(2)=0时,a(3)的值可能是-1或0,加1后的值可以是0或1。答案 B7.有如下 VB 程序段:For i = 1 To 6 a(i) = Int(Rnd() * 10) + 1 If a(i) Mod 2 <> i Mod 2 Then i = i - 1Next iFor i = 1 To 5For j = 6 To i + 2 Step -1If a(j) < a(j - 2) Then t=a(j):a(j)=a(j-2):a(j-2)=tEnd IfNext jNext i执行程序后,a 数组各元素可能是 ( )A.1,2,3,4,5,6 B.1,0,3,6,5,8C.3,2,7,6,11,8 D.2,1,4,3,10,9解析 a(i)中产生的是[1,10]之间的随机数,且奇数位为奇数,偶数位为偶数。接下来按奇偶分别进行排序。B选面中不可能产生0,C选项中不可能产生11。答案 A8.有如下 VB 程序段:a(1)=6:a(2)=9:a(3)=3a(4)=7:a(5)=8:a(6)=1t = 2 * Int(Rnd * 3) + 1For i = t To 5k = iFor j = i + 1 To 6If a(j) < a(k) Then k = jNext jIf k <> i Thentemp = a(i): a(i) = a(k): a(k) = tempEnd IfNext i执行该程序段后,a(1)~a(6)各元素的值不可能是( )A.6,1,3,7,8,9 B.6,9,1,3,7,8C.6,9,3,7,1,8 D.1,3,6,7,8,9解析 t的值为1,3,5,D选项属于t=1的情况,A选项属于t=2的情况,即从第2个数开始排序。选项B属于t=3,选项C属于t=5。答案 A9.有如下 VB 程序段:n = 8For i = 1 To nd(i) = Int(Rnd * 10) + 1Next iFor i = 2 To n - 1k = 1For j = 1 To n - iIf d(j)*k>d(j+2)*k Then temp=d(j):d(j)=d(j+2):d(j+2)=tempEnd Ifk = -kNext jNext i执行该程序段后,d 数组各元素可能是( )A.3,10,3,5,4,4,10,1 B.0,3,4,5,6,6,7,8C.2,1,3,4,5,6,8,7 D.6,4,5,6,5,7,1,10解析 当i为偶数时,k=1,偶数位的数实现降序排列,当i为奇数时k=-1,奇数位的数实现升序排列。答案 A10.有如下 VB 程序段:Dim a(1 To 6) As Integer, i As IntegerRandomizeFor i = 1 To 6a(i) = Int(Rnd * 10) + 1If a(i) Mod 2 = 1 Theni = i - 1ElseIf i Mod 2 = 0 Thena(i)=a(i)+a(i-1)End IfNext i最终 a 数组各元素的值可能是( )A.8,14,3,10,2,12 B.2,4,6,10,12,24C.10,16,8,18,8,4 D.6,12,10,20,4,8解析 产生的数在[1,10],如果是奇数,重新产生。奇数位不可能超过10,偶数位上数字是他与他前面数字之和,肯定为偶数,且比他前面的数大。答案 D11.有如下VB程序段:b(1) = a(1):t = 1For i = 2 To 6For j = 1 To tIf a(i) > b(j) Then b(j) = a(i) Exit ForEnd IfNext jIf j > t Then t = t + 1: b(t) = a(i)Next i数组a(1)至a(6)的值分别为15、22、13、134、43、2,执行该程序段后,变量t的值为( )A.2 B.3 C.4 D.5解析 b数组中存储的是较大值,当a(i) > b(j)条件成立时,中途退出内循环,此时不满足j > t。变量t只有在a(i)小于或等于b数组中的值才增加1。i t b(1) b(2) b(3)2 2 22 3 3 134 3 134 5 3 6 3 答案 B 12.有如下 VB 程序段:flag = True : i = 1Do While i <= 6x = Int(Rnd * 100) + 1If flag Or x >50 Then a(i)=x flag = Not flag i = i + 1End ifLoop执行该程序段后,在下列选项中,a(1)~a(6)各元素值不可能的是( )A.52,95,46,74,77,83 B.50,55,46,70,21,97C.62,78,57,61,69,50 D.31,54,48,72,50,82解析 本题考查循环过程中变量的变化规律。通过flag=Not flag语句得知,Flag的值是True和False交替出现的,当i的值为奇数时flag为True,偶数时flag为False。当i为偶数时flag为False,只有x>50成立才会给数组a赋值,即数组a偶数位(a(2)、a(4)、a(6))上的值肯定大于50。C选项a(6)=50不能出现。答案 C13.有如下程序段:Const n = 6Dim a(1 To n) As IntegerDim i As Integer, j As Integer, t As IntegerDo While TrueFor i = 1 To n - 1If a(i) > a(i + 1) Then Exit ForNext iIf i < n ThenFor k = 1 To n j = Int(Rnd * 6) + 1 t=a(j):a(j)=a(i):a(i)=tNext kElseExit DoEnd IfLoop数组中 a(1)到 a(6)的值依次为“56,34,48,87,65,96”,经上述程序段执行后a(1)到a(6)的值依次为( )A.96 87 65 56 48 34B.34 48 56 65 87 96C.选项A和B都有可能D.选项A和B都不可能解析 当条件i=n),退出循环,结束程序。在For循环中,满足条件a(i)>a(i+1)就中途退出循环,此时ia(i+1),因此该数组中的数已经是升序排列。答案 B14.有如下程序段:Sum = 6a(11) = 49For i = 10 To 1 Step -1a(i) = a(i + 1) - 1If a(i) Mod 3 = 0 Then Sum = Sum + a(i)Next iText1.Text = Str(Sum)该程序段运行后,文本框Text1中显示的内容是( )A.174 B.180 C.36 D.42解析 从第10个元素开始,是他后面一个元素值减1,且是3的倍数相加(共有4个数,即a(10)a(7)a(4)a(1)),即48+45+42+39+6。答案 B15.以下VB程序段:n = Val(Text1.Text)Do While n > 0t = n Mod 10If t Mod 2 = 0 Then a(t) = a(t) + 1n = n \10LoopList1.AddItem a(2)若在文本框Text1中输入2686261,程序运行后,在列表框List1中显示的值为( )A.0 B.2 C.3 D.6解析 t是数n的个位数,当t是偶数时,进行计数。因此2的个数有2个。答案 B16.有如下VB程序段:Dim i As Integer, Sum As IntegerDim a(1 To 6) As Integer, b(1 To 6) As IntegerSum = 0a(6) = 18: a(5) = 7: b(6) = 14: b(5) = 16For i = 4 To 1 Step -1 a(i)=a(i+2)-a(i+1) b(i)=b(i+2)-a(i) If b(i) Mod 3 = 0 Then Sum=Sum+b(i)Next iText1.Text = Str(Sum)该程序段运行后,文本框 Text1 中显示的内容是 ( )A.39 B.30 C.-9 D.12解析 采用列表法进行变量跟踪。i a(i) b(i) sum4 11 3 33 -4 20 32 15 -12 -91 -19 39 30答案 B17.有如下VB程序段:s = ” ”For i = 2 To 5For j = i To 5If j Mod i = 0 Then a(j) = a(j) + 1Next jNext iFor i = 1 To 5If a(i) <> 1 Then s = Str(i) & sNext iText1.Text = s若数组a的初始值都为0,则运行该程序段后,Text1中显示的内容为( )A.14 B.235 C.532 D.41解析 如果是大写字母,将他的ASCII值-62,再加上A的ASCII值,表示将该字母加密成该字母后面第3位的字母。小写字母和数字不处理,把加密后的进行反向连接。答案 D18.有如下 VB 程序段:a(1) = 17: a(2) = 16: a(3) = 12: a(4) = 18a(5) = 15: a(6) = 13: a(7) = 17: a(8) = 20i = 2Do While i <= 8If i Mod 2 = 0 And a(i) > a(i - 1) Thent=a(i):a(i)=a(i-1):a(i-1)=tElseIf a(i - 1) Mod 2 = 1 Thena(i-1)=a(i-1)+1End Ifi = i + 1Loop执行程序后,a 数组各元素是( )A.17,16,18,12,16,14,20,18B.18,16,18,12,16,14,20,17C.16,17,18,12,13,16,20,17D.18,16,18,12,14,15,17,20解析 当i=2时,把a(1)加1 ,接着观察奇数位,该位上原来是奇数,加1后是偶数,如果是偶数不操作,因此奇数位肯定是偶数,偶数位上的数字肯定比奇数位上数字小。答案 B19.有如下VB程序段:Dim a(1 to 6) As IntegerSum= 0For i = 1 To 6For j = i+1 To 6 If j Mod i = 0 Then a(j) = 1 - a(j)Next jNext iFor i = 1 To 6Sum = Sum + a(i)Next iText1.Text = Str(Sum)该程序段运行后,文本框Text1中显示的内容是( )A.3 B.4 C.5 D.6解析 语句a(j) = 1 - a(j)的功能是把a(j)中的0改为1,1改为0。当i>=4时,没有j可以除通i。I a(1) a(2) a(3) a(4) a(5) a(6)1 0 1 1 1 1 12 0 1 1 0 1 03 0 1 1 0 1 1答案 B 20.某VB程序段如下:s = 0For i = 2 To 5For j = i To 5 If j Mod i = 0 Then a(j) = a(j) + 1 s = s + a(j) End If Next jNext i数组a中初始值均为0,运行程序段后,变量s的值为( )A.6 B.5 C.4 D.14解析 可以列出表格跟踪变量。i a(1) a(2) a(3) a(4) a(5) s2 0 1 0 1 0 23 0 1 1 1 0 34 0 1 1 2 0 55 0 1 1 2 1 6答案 A21.小王同学编写了一个VB程序段如下所示:a = 7: b = 3: c = 9m = 1: k = 1For i=1 to 3If Abs(a + b) > c Thenk = k + 1If k > m Then m = kElsek = 1End Ifa = a - bb = a + bNext iText1.Text = Str(m)程序运行后,在文本框Text1中显示的结果为( )A.4 B.3 C.2 D.1解析 列出表格,进行变量跟踪。I A b c m k初值 7 3 9 1 11 4 7 9 2 22 -3 4 9 3 33 -7 -3 9 3 1答案 C22.有如下 VB 程序段:Dim a(1 To 7) As Integera(1)=14:a(2)=15:a(3)=0:a(4)=11a(5)=13:a(6)=21:a(7)=17i = 6: flag = TrueDo While i > 1 And flagIf a(i) Mod 3 = 0 And a(i) <> 0 Thent=a(i):a(i)=a(i+1):a(i+1)=tElseIf a(i) = 0 Thenflag = flaseElseIf a(i + 1) Mod 2 = 1 Thena(i)=Abs(a(i)-a(i+1))End Ifi = i - 1Loop执行程序后,a 数组各元素是( )A.14,0,15,4,17,13,21 B.14,15,0,11,4,17,21 C.15,14,0,11,4,17,21 D.14,15,0,11,13,4,17解析 采用列表法。i a(1) a(2) a(3) a(4) a(5) a(6) a(7)初值 14 15 0 11 13 21 176 17 215 4 4 14 15 0 11 4 17 21答案 B23.有如下VB程序段:n=10For k=1 To n\3 p=3*k-2x=pFor t=p+1 To 3*k If a(t) Next t If p<>x Theny=a(p):a(p)=a(x):a(x)=y End IfNext ka(1)到a(10)中的元素依次为8,3,5,9,7,5,7,6,5,4,程序运行结束后,以下数组元素的值错误的是( )A.a(2)=8 B.a(5)=7C.a(7)=3 D.a(10)=4解析 本题考查选择排序算法及程序阅读能力。k的值 1 2 3p的值 1 4 7x的初值 1 4 7t的值 2 to 3 5 to 6 8 to 9内层循环功能:在p开始的3个数中,找到最小数的位置存入x,将最小数与p位置的数交换。程序执行结束后,数组a的值依次是:3,8,5,5,7,9,5,6,7,4。答案 C24.有如下程序段:L = a(1): R = b(1): M = 0For i = 2 To 6If a(i) <= R ThenIf R < b(i) Then R = b(i)ElseIf R - L > M Then M = R - LL = a(i)R = b(i)End IfNext iIf R - L > M Then M = R - LLabel1.Caption = Str(M)数组元素a(1)到a(6)的值依次为“1,2,6,10,15,20”,数组元素b(1)到b(6)的值依次为“6,4,8,15,18,26”,经过该程序段“加工”后,标签Label1上显示的内容为( )A.6 B.7 C.8 D.25解析 i a(i) b(i) L R M初值 1 6 02 2 4 1 6 03 6 8 1 8 04 10 15 10 15 75 15 18 10 18 76 20 26 20 26 8答案 C25.有如下程序段:For i = 2 To 6For j = 1 To i-1If a(j)<=a(i) And d(j)>=d(i) Then d(i)=d(j)+1:pre(i)=jEnd IfNext jNext imax = 0: k = 0For i = 1 To 6If d(i)>max Then max=d(i):k=iNext iDo While k <> 0st = a(k) & ”,” & stk = pre(k)LoopText1.Text = Mid(st,1,Len(st)-1)数组元素a(1)到a(6)的值依次为“2,6,5,9,8,8”,数组d各元素的值初始化为1,数组pre各元素的值初始化为0,经过该程序段“加工”后,Text1中的值是( )A.2,5,9 B.2,6,8,8C.2,5,8,8 D.2,5,6,8,8,9解析 在数组a中,从第2个数开始,往他前面的数进行查找,若找到比较他小的数,且d(j)>=d(i),进行相应操作。i d(1) d(2) d(3) d(4) d(5) d(6) pre(1) pre(2) pre(3) pre(4) pre(5) pre(6)2 1 2 1 1 1 1 0 1 0 0 0 03 1 2 2 1 1 1 0 1 1 0 0 04 1 2 2 3 1 1 0 1 1 2 0 05 1 2 2 3 3 1 0 1 1 2 2 06 1 2 2 3 3 4 0 1 1 2 2 5找到最大值的位置在6,连接a(6),接着把a(5)、a(2)、a(1)连接在前面。答案 B26.有以下VB程序段:a(1) = 68: a(2) = 88: a(3) = 76: a(4) = 60: a(5) = 98a(6) = 100: a(7) = 64: a(8) = 85: a(9) = 99: a(10) = 59For i = 1 To 9b(i)=Abs(a(i+1)-a(i))c(b(i)\10)=c(b(i)\10)+1Next iFor i = 0 To 10If c(i) > 0 Then s = s + ” ” + Str(c(i))Next iLabel1.Caption = s数组c各元素初值为0,执行该程序段,标签Label1上显示的内容是( )A.2 3 2 1 1 B.1 3 2 2 1C.2 3 2 2 1 D.1 3 2 1 2解析 b(1)至b(9)数组中的值分别为20,12,16,38,2,36,21,14,40。而c数组是统计b数组元素中十位上数字的个数。答案 B27.有如下 VB 程序段:For k = 1 To 10f = k Mod 2If f = 0 Then a(k) = 0 Else a(k) = 1For j = 1 To kIf f = 0 Then a(k) = a(k) + 1Else a(k) = a(k) * jEnd IfNext jNext k执行该程序段后,数组元素a(4)的值为( )A.6 B.4 C.2 D.1解析 当k是偶数时,f的初值为0,并进行1至k的计数。当k是奇数时,f的初值为1,并进行1至k的累乘。答案 B28.有如下VB程序段(数组a各元素的初始值均为0)。n = Len(Text1.Text)c = 1For i = 1 To ns = Mid(Text1.Text, i, 1)If s >= ”0” And s <= ”9” Thena(c) = a(c) * 10 + Val(s)ElseIf a(c) > 0 Then c = c + 1End IfNext i在文本框Text中输入 “No1:X:123:Y:680:End”。执行该程序段后,数组a(2)的值为( )A.1 B.2 C.3 D.123解析 a数组存储的是字符串中的数字及个数,第二个数字串是123。答案 D 29.有VB编写的程序如下:Dim a(0 To 9) As Integer,t as Longt = Val(Text1.Text)Do While t <> 0a(t Mod 10) = 1t = t \10LoopFor i = 0 To 9 x = x + a(i)Next iText1中输入10242048则程序执行后x的值为( )A.1 B.2 C.5 D.10解析 t Mod 10的值为t的个位数,a(t Mod 10)=1不是计数语句,指只要出现过,该下标对应的数组元素为1,出现过的数有01248。答案 C30.以下VB程序段:Dim n As Long ,t As IntegerDim a(1 To 9) As Integern = Val(Text1.Text)Do While n > 0t = n Mod 10If t Mod 2 = 0 Then a(t)=a(t)+1n = n \10LoopList1.AddItem a(2)若在文本框Text1中输入26862612,则单击命令按钮Command1后,在列表框List1中显示的值为( )A.2 B.3 C.4 D.7解析 计n各个数字中的偶数,a(2)指2的个数。答案 B31.有如下 VB 程序段:For i = 1 To 10b(i) = 0Next iFor i = 1 To 5For j = 1 To 10If b(i) < a(j) Then b(i)=a(j):t=jNext ja(t) = 0List1.AddItem Str(b(i))Next i其中数组元素a(1)到a(10)的值依次为“25,42,53,66,77,83,98,14,38,99”,执行程序后,在列表框List1中依次输出的数据是( )A.25 42 53 66 77 B.14 25 38 42 53C.99 98 83 77 66 D.83 98 14 38 99解析 找出每趟中的最大值,存储在b数组中,同时把数组a该位置中的值赋值为0。答案 C32.有如下程序段:s = 0For i = 1 To 5If a(i) Mod 2 = 1 Then s = s + 1Next iFor i = 1 To 4If a(i) Mod 2 = 0 ThenFor j = 5 To i + 1 Step -1If a(j) Mod 2 = 1 Then a(6) = a(i): a(i) = a(j): a(j) = a(6) Exit ForEnd IfNext jEnd IfNext iFor i = s + 2 To 5k = i - 1For j = i To 5If a(k) > a(j) Then k = jNext jIf k <> i - 1 Thena(6) = a(i - 1): a(i - 1) = a(k): a(k) = a(6)End IfNext i数组a(1)至a(5)中的数据分别为64,57,22,96,71,运行该程序段,数组a中数据依次为( )A.22, 57, 64, 71, 96 B.71, 57, 22, 96, 64C.71, 57, 22, 64, 96 D.57, 71, 22, 64, 96解析 变量s中存储的是a数组是奇数,因此s=2。当a(i)是偶数时,与最后面第1个奇数互换。数组中值为71,57,22,96,64。接着对后面的偶数采用选择排序进行长序排列。答案 C33.有如下VB程序段:a(1)=1: a(2)=1b(1)=1: b(2)=2For i=3 To 5a(i)=a(i-1)+a(i-2)b(i)=b(i-1)+a(i)Next i执行该程序段后,数组元素b(5)的值为( )A.12 B.8 C.5 D.4解析 当i=3 时,a(3)=2 ,b(3)=3。当i=4 时,a(4)=3 ,b(4)=7。当i=5时,a(5)=5 ,b(5)=12。答案 A34.有VB程序段如下:s = ”2019appreciate”: sum = 0For i = 1 To Len(s)ch = Mid(s, i, 1)If ch >= ”a” And ch <= ”z” Thenm = Asc(ch) - Asc(”a”) + 1a(m) = a(m) + 1End IfNext iFor i = 1 To 10If a(i) > 0 Then sum = sum + 1Next i数组a各元素的初始值都为0,执行该程序段后,则变量sum的值为 ( )A.10 B.7 C.4 D.3解析 表达式Asc(ch) - Asc(”a”) + 1表示小写字母ch在字母表中位置,a(m)表示该位置上字母的个数。只是统计小写字母,且sum是统计a(i)大于0的个数,因此是统计出现几种小写字母。且i只循环了60次。答案 C35.有如下VB程序段:For i = 1 To na(i) = Mid(Text1.Text, i, 1)Next iDo While n > 1If Asc(a(n)) >= Asc(a(n - 1)) Then m = 1 Else m = 2b(m) = b(m) + 1n = n - 1Loop数组b各元素的初始值都为0,文本框Text1的内容为“2019Python”。执行程序后,变量 b(1)的值为( )A.10 B.6 C.5 D.4解析 数组a中存储的是输入的每个字符,从最后一个字母开始,如果大于等于他前面一个,m=1,且统计的次数增加1。答案 C36.有如下VB程序段:Private Sub Command1_Click()Dim s As String, mw As String, ch As StringDim temp As Integers = Text1.Texttemp = 0: mw = ” ”For i = 1 To Len(s)ch = Mid(s, i, 1)If ch >= ”0” And ch <= ”9” Thentemp = temp * 10 + Val(ch)ElseIf ch = ”-” Thenmw = mw + Chr(temp Mod 27 - 1 + Asc(”A”))temp = 0Elsemw = mw + chEnd IfNext iText2.Text = mwEnd Sub在 Text1 里输入“1931-572-185”(不包括双引号),当单击按钮后,文本框 Text2 里的输出结果是( )A.HAD B.NE C.NEW D.ORG-解析 语句temp = temp * 10 + Val(ch)的作用是取出字符串中的数字串。表达式 Chr(temp Mod 27 - 1 + Asc(”A”))的功能是把数字转换成-1至26之间数,再加上字母A的ASCII码值。并将转换后的数字表达为字母表中大字字母。但文本最后没有“一”,因此只输两个字母。答案 B37.有如下 VB 程序段:Private Sub Command1_Click()Dim s As String, a As String, t As Strings = Text1.Text: t = ” ”For i = 1 To Len(s)a = Mid(s, i, 1)If a >= ”0” And a <= ”9” Thent = t + aElseIf a = ”!” Thent = ” ”ElseIf t <> ” ” ThenList1.AddItem tEnd IfNext iEnd Sub执行程序时,在文本框 Text1 中输入“12+34=46!789ok”(不包括双引号),单击按钮 Command1 后,在列表框 List1 中显示的结果是( )解析 当取出的是数字时,连接到t中,当a = ”!”,清空t,其他情况输出t。当a=“+”,先输出12,当a=“=”,先输出1234,当a=“!”,t=””, 当a=“o”和“k”,分别输出789。答案 C38.有如下程序段:st = Text1.Text1x = Len(st)m = 0: k = 1For i = 2 To 1xIf Mid(st,i,1)>Mid(st,i-1,1) Thenk = k + 1If k = 2 Then m = m + 1Elsek = 1End IfNext iText2.Text = Str(m)若在Text1中输入“abcddecaab”,则该程序段运行后,文本框Text2中显示的内容是( ) A.2 B.3 C.4 D.1解析 从第2个字符开始,跟他前面的字符比较,如果连续大于或等于前面的字符2次,则计m加1。有递增序列abcd、de、ab。答案 B39.执行下列程序:s = ”ERROR: Divisor must not be zero!”flag = False: m = 0For i = 1 To Len(s) ch = Mid(s, i, 1)If ch >= ”a” And ch <= ”z” ThenIf Not flag Then m = m + 1 flag = TrueEnd IfElseflag = FalseEnd IfNext iText1.Text = Str(m)则该程序段运行后,文本框Text1中显示的内容是( )A.4 B.5 C.6 D.19解析 如果检测到不是小写字母,则flag为False,一旦小写字母开头,m加1,同时flag为True,第二个小字母时,m不再加1。也就是说小写字母开头的字母有哪些。答案 A40.有如下VB程序段:Ins = Text1.Textn = Len(Ins): Outs = Mid(Ins, 1, 1)i = 2Do While Mid(Ins,i,1)>=Mid(Outs,i-1,1)Outs = Outs + Mid(Ins, i, 1)i = i + 1LoopText2.Text = Outs在文本框Text1中输入“Happy2019”,执行该程序段后,文本框Text2中显示的是( )A.Ha B.Happy C.Happy29 D.Happy2019解析 查找后面的字符大于或等于前面的字符。字符的顺序为数字小于大写字母小于小写字母。答案 B41.有如下VB程序段:s = Text1.Textt = Mid(s, 1, 1)max = 0For i = 2 To Len(s)If Mid(s, i, 1) > Mid(s, i - 1, 1) Thent = t + Mid(s, i, 1)If Len(t) > max Then max = Len(t) ans = t Else t = Mid(s, i, 1)End IfEnd IfNext iText2.Text = ans在文本框Text1中输入“11341358901”,执行该程序段后,文本框Text2中显示的是( )A.13435891 B.01C.3589 D.13589解析 当后面字母大于前面字母,存入变量t中,因此t的长度每次都是在增长的,语句t = Mid(s, i, 1)是不可能执行到的。最终变量ans中存储的是只要后面比前面大的字符串。答案 A42.有如下程序段:Function delStr(S As String, m As Integer) As StringDim n As Integer : n = Len(S)If m < 1 Or m > n Then delStr = ”输入位置有误!”If m = 1 Then delStr=Mid(S,2,n-1)If m < n Then delStr=Mid(S,1,m-1)+Mid(S,m+1,n-m)If m = n Then delStr=Mid(S,1,n-1)End FunctionPrivate Sub Command1_Click()Dim S As String : Dim i As IntegerS = Text1.TextFor i = 1 To 10 Step 2S = delStr(S, i)Next iText2.Text = SEnd Sub文本框Text1中输入Happybirthday,执行该程序段,文本框Text2中显示的是( )A.apybrtda B.apbrhdayC.Happybirhday D.day解析 共调用自定义函数5次,分别删除第1,3,5,7,9个字母,这里的3指删除第1个字母后的第3个,即原来的1,4,7,10,13个字母。答案 A43.有如下 VB 程序:s1 = Text1.TextFor i = 1 To Len(s1)ch = Mid(s1, i, 1)If Asc(ch) >= 65 And Asc(ch) <= 90 Thench = Chr(65 + (Asc(ch) - 62) Mod 26)End Ifs2 = ch + s2Next iLabel1.Caption = s2已知大写字母 A 的 ASCII 码为 65。运行上述程序,若文本框 Text1 中的内容为“A1b2C3”,单击命令按钮 Command1,标签 Label1 中显示的是( )A.A1b2C3 B.3C2b1AC.D1b2F3 D.3F2b1D解析 A的ASCII码为65,Asc(ch)-62表示该字母将后移3位。因此程序的功能是只将其中的大写字母后移3位,大小和数字不变,并将转换的字符反向连接。答案 D44.某个进行素数判断的VB程序段如下:Private Sub Command1_Click()Dim x As Integerx = Val(Text1.Text)Label1.Caption = Str(x) + prime(x, 2)End SubFunction prime(n As Integer, m As Integer) As StringIf n = m Thenprime = ”是素数。”ElseIf n < 2 Or n Mod m = 0 Thenprime = ”不是素数。”Elseprime = prime(n, m + 1)End IfEnd Function在文本框Text1中输入的值是123,并执行程序后,自定义函数prime被执行的次数是( )A.1次 B.2次 C.122次 D.123次解析 本题考核的是递归算法。调用函数prime(123,2), prime(123,2)=prime(123,3),返加函数的值为”不是素数。”,因此调用了2次。答案 B45.有如下 VB 程序段:Dim a(1 to 6)as Stringi = 1Do While i <= 2For j = i To 5 If a(j)>a(j+1) Then t=a(j):a(j)=a(j+1):a(j+1)=t End IfNext jText1.Text = Text1.Text + ” ” + a(i)i = i + 1Loop数组元素 a(1)到 a(6)的值分别为”9”,”121”,”58”,”34”,”78”,”21”,程序运行后,文本框Text1 中显示的内容为( )A.9 34 B.9 21C.121 34 D.121 21解析 比较的对象是字符串变量。分类讨论,当i=1时,把”9”换到最后,当i=2时,把”58”换到”34”的后面。答案 C46.有一个数组,采用冒泡排序,第一遍排序后的结果为:4,10,5,32,6,7,9,17,24那么该数组的原始顺序不可能的是( )A.10,5,32,6,7,9,17,24,4B.10,5,32,6,7,9,4,17,24C.10,5,32,4,6,7,9,17,24D.4,10,5,32,17,9,24,6,7解析 第一趟排序的最值出现在第1个位置,因此是从小到大排序,从后往前冒泡。答案 D47.有如下VB程序段:i = 1Do While i <= 5If i=1 Or a(i-1)<=a(i) Then i = i + 1Else t=a(i):a(i)=a(i-1):a(i-1)=t i = i - 1End IfLoop数组元素a(0)到a(8)的初始值依次为“0,4,7,3,5,1,8,6,2”。执行该程序段后,数组元素a(1)到a(8)的值分别是( )A.1 3 4 5 7 8 6 2B.7 5 4 3 1 8 6 2C.4 7 3 1 2 5 6 8D.4 7 3 8 6 5 2 1解析 该算法是对前5个数进行升序排列。答案 A48.某排序算法的VB程序段如下:For i = 1 To 2For j = 1 To 6-2*iIf a(j) t=a(j):a(j)=a(j+2):a(j+2)=tEnd IfNext jNext i数组元素a(1)~a(6)的初始值依次为“15,13,44,38,26,7”,执行该程序段后,数组a 元素的值分别为( )A.44,38,26,13,15,7 B.44,7,26,13,15,38C.15,38,26,13,44,7 D.44,38,26,15,13,7解析 排了两趟,分别是奇数位和偶数位分别排序,降序。答案 A49.有如下程序段:k = 0 : First = 1Last = 5 : Flag = TrueDo While Flag k = k + 1 p = FalseFlag = False For j = First To Last If a(j)>a(j+1) Then t=a(j):a(j)=a(j+1):a(j+1)=t Last = j : Flag = True If p = False Then First = j :p = True End If End If Next j If First <> 1 Then First = First - 1 Last = Last - 1Loop数组元素a(1)到a(6)的值依次为“3,6,8,5,7,9”,经过该程序段“加工”后,下列说法正确的是( )A.此过程中数据共交换了3次B.此过程中该数组的数据共比较了7次C.变量k的值为2D.数组元素a(1)到a(6)的数未排成有序解析 本题主要考查排序算法的优化。flag表示是否有序的标志,First表示最后一次前面交换的位置,如果前面的有序,下次First的位置开始比较。Last表示后面第一次交换的位置,后面Last+1至n肯定是序的,只要跟Last+1进行比较比较就可以了。变量k表示排序的趟数。第1趟时,8和5及7进行互换,结果为3,6,5,7,8,9,Last=4,First=3,接着在第2和第3个数之间排序,实现5和6互换,Last=2,First=2。第3趟,才发现没有数据交换,退出循环,数组有序。因此共交换了3次,第1趟比较了5次,第2趟比较了2次,最后一趟比较1次,共8次。答案 A50.有如下VB程序段:Dim s(1 To 6) As StringText1.Text =” ”For i = 1 To 5 For j = i + 1 To 6 If s(i)+s(j)t=s(j):s(j)=s(i):s(i)=t End If Next jNext iFor i = 1 To 6Text1.Text = Text1.Text + s(i)Next i如果程序运行,一开始当数组元素s(1)到s(6)的值依次为“4”、“343”、“312”、“12”、“246”、“121”,运行该段代码后,文本框Text1中显示的内容为( )A.434331224612121B.434331224612112C.343312246121124D.121122463123434解析 根据字符串连接进行判断是否交换。当i=1,2,3时,他均比后面的字符串大,因此不交换,“12”和“246”互换,“12”和“121”互换。答案 B51.有如下VB程序段:i = 1: j = 8Key = Text1.Text: f = FalseDo While i <= j And Not fm = Int((i + j) / 2)If a(m) = Key Thenf = TrueList1.AddItem Str(m) + ” is good luck!”ElseIf a(m) > Key Thenj = m - 1List1.AddItem Str(m)Elsei = m + 1List1.AddItem Str(m)End IfLoopIf Not f Then List1.AddItem ”sorry!”a(1)到 a(8)依次为 ”as”、”book”、”can”、”pig”、”see”、”you”、”we”、 ”zero”。当在文本框Text1中输入以下哪个内容时,列表框list1中显示的结果和别的三项不一样 ( )A .pear B.quick C.run D.sad解析 A、B、C、D在数据均没有找到,BCD均处于pig和see,因此输出的结果是一样的。答案 A52.某对分查找算法的VB程序段如下:Key=val(Text1.text)i = 1: j = 10Do While i <= jm = Int((i + j) / 2) If a(m) = key Then Exit Do If key>a(m) Then i =m+1 Else j=m–1 Text2.Text= Text2.Text+Str(a(m))Loop数组元素a(1)到a(10)的值依次为“5,12,20,29,36,40,55,58,66,74”,若在文本框 Text1 中输入数据,执行该程序段,文本框 Text2 中显示的内容为:36,58,40,55,则 key 的值可能是 ( )A.38或45 B.45或56C.56或58 D.57或70解析 采用二叉树分析,如下图所示:最后查找的结点是7号,有3种可能,大于6号但小于7号,等于7号,或大于7号但小于8号。答案 B53.有如下程序段:i = 1: j = 10: key = Val(Text1.Text)Do While i <= j m = (i + j) \'2If key < a(m) Thenj = m - 1ElseIf key > a(m) Theni = m + 1ElseDo While m > 1 And a(m - 1) = key m = m - 1LoopExit DoEnd IfLoop数组中a(1)到a(10)依次为“1,1,2,3,3,3,3,4,4,4”,若在文本框Text1中输入值3,经上述程序段执行后变量m的值为( )A.7 B.6 C.5 D.4解析 当找到一个他前面的,又不是第一个跟key相等的数,继续往前找,即有多个相等的数时,找一个最前面的相等的数。答案 D54.某对分查找算法的VB程序段如下:k = Val(Text1.Text)i = 1: j = 6:f = FalseDo While i <= j And Not fm = (i + j) \2If a(m) = k Then f = TrueIf a(m)>a(i) Then If a(i)<=k And kElse If a(m)End IfLabel1.Caption = Label1.Caption + Str(a(m))Loop数组元素a(1)到a(6)的值依次为“58,66,72,24,35,40”,在文本框Text1中输入的值为35,执行该程序段,标签Label1中显示的值是( )A.72 35 B.24 35C.72 24 35 D.72 24 24 35解析 该数据段前半段和后半段均升序,查找一个数时,要判断处于前半个升序段带是后半个升序段。i J m a(m)1 6 3 722 6 4 243 6 4 244 6 5 35答案 D55.有如下VB程序段:Key = Val(Text1.Text)i = 1: j = 10flag = Falses =” ”Do While i <= j And Not flag mid1 = Int(i+(j-i)/3)mid2=Int(j-(j-i)/3)If Key = a (mid1) Then flag = TrueElseif Key j = mid1 - 1Elseif Key = a(mid2) Then flag = TrueElseif Key >a(mid2) Then i = mid2 + 1Else i = mid1 + 1 j = mid2 - 1End Ifs = s & ” ” & mid1 & ”:” & mid2LoopText2.Text = s已知数组 a(1 To 10)中的数据分别是 12、21、34、45、59、63、72、86、94、100,在文本框Text1中输入34,程序运行后文本框Text2 中显示的内容是( )A.4:7 1:2 B.4:7 1:2 3:3 C.4:7 1:3 3:3 D.4:7 3:3解析 利用列表法变量跟踪。i j mid1 a(mid1) mid2 a(mid2)1 10 4 7 45 721 3 1 2 12 213 3 3 3 34 34答案 B56.数组a为一组正整数,其奇数下标的数组元素是升序排序的奇数,偶数下标的数组元素是升序排序的偶数,依据对分查找思想,设计一个在数组 a 中查找数据 Key 的程序。实现该功能的 VB 程序段如下:Key = Val(Text1.Text): i = 1: j = 10Do While i <= jm = Int((i + j) / 2 + 0.5)If Key Mod 2 + a(m) Mod 2 = 1 Then m = m - 1If a(m) = Key ThenList1.AddItem ”找到了!”: Exit DoElseIf a(m) > Key Thenj = m - 2Elsei = m + 2End IfLoopIf i > j Then List1.AddItem ”未找到此数”如果数组元素 a(1)到 a(10)的数据依次是“1,4,5,6,11,10,23,16,25,20”,key 的值为5,则执行上述程序段,查找的次数为( )A.4 B.3 C.2 D.1解析 依次访问的下标为5,1,3,因此答案为查找3次。答案 B57.有如下 VB 程序段:i = 1: j = 6Key = Text1.Texts = ” ”Do While i <= jm = Int((i + j) / 2 + 0.5)s = s + ” ” + a(m)If Key > a(m) Theni = m + 1Elsej = m - 1End IfLoopText1.Text = s数组元素 a(1)到 a(6)的值分别为”Beijing”、”Guangdong”、”Jiangsu”、”Jiangxi”、”Shanghai”、“Zhejiang”,已按字典序排序。当 key 的值为“Zhejiang”时,单击命令按钮Command1,文本框 Text1 中显示的内容为( )A.Jiangxi ZhejiangB.Jiangsu Shanghai Jiangxi ZhejiangC.Jiangxi Zhejiang ShanghaiD.Jiangsu Shanghai Zhejiang解析 采用列表法。i j m a(m)1 6 4 Jiangxi5 6 6 Zhejiang答案 A58.插值查找。在有序数组中查找值的 VB 程序段如下:Dim a(1 To 10) As IntegerDim i As Integer, j As Integer, m As Integer, flag As BooleanDim key As Integer, n As Integer,c As Integer,d As Integeri=1:j=10:m=0:flag=Falsekey = Val(Text1.Text)Do While i<= j And Not flag If keya(j) Then n=-1 : Exit Do ′未找到退出 If a(i) <> a(j) Thenc=key-a(i):d=a(j)-a(i)m=i+Int(c*(j-i)/d) Elsem = i End If If key = a(m) Then flag=True:n = m If key > a(m) Then i = m + 1 If key < a(m) Then j = m - 1LoopIf flag = False Then n = -1其中数组元素a(1)到a(10)分别为“15,25,37,40,63,70,87,90,92,96”,下列说法错误的是( )A.如在文本框Text1中输入10,程序执行后,变量m取初值0,结果n=-1B.如在文本框Text1中输入25,程序执行后,变量m的值变化为0→2,结果n=2C.如在文本框Text1中输入40,程序执行后,变量m的值变化为0→3→4,结果n=4D.如在文本框Text1中输入78,程序执行后,变量m的值变化为0→6→7,结果n=-1解析 文本框Text1中输入10,不在查找范围。输入25,c=10,d=81,m=2。输入78,m的值变化为0→8→6。答案 D59.有如下程序段:m = 1: n = 12key = Val(Text1.Text)mid = (m + n + 1) \2Do While a(mid) <> key And m <= nIf a(mid) > key Thenn = mid - 1left = left + 1Elsem = mid + 1End Ifmid = (m + n) \2sum = sum + 1Loop数组a(1)至a(12)中的数据分别为2,3,8,16,19,27,29,32,49,64,72,99,在文本框Text1中输入19,运行该程序段,则变量sum和left的值分别为( )A.1 1 B.1 2 C.2 1 D.2 2答案 C60.某对分查找算法的VB程序段如下:Key = Val(Text1.Text) Mod 10Text2.Text = ” ”i = 1: j = 10: f = FalseDo While i <= j And Not fm = (i + j) \2If a(m) \10 = Key Then search = m:f = TrueElseIf a(m) \10 < Key Then i = m + 1Else j = m - 1End IfText2.Text = Str(m) + Text2.TextLoop数组元素a(1)到a(10)的值依次为:8,15,19,23,35,37,42,48,55,68,文本框Text1中输入21,执行该程序段,文本框Text2中显示的是( )A.5 2 B.2 5 C.15 35 D.35 15解析 要找的数是输入数的个位数,但查找的是十位数字,并按升序排列。答案 D61.将6个数据23,45,93,95,95,99依次存放在数组a(1)到a(6)中,在文本框Text1中输入95,运行下列程序段:x=Val(Text1.Text)i=1: j=6: n=6f=FalseDo While (i <= j) And (f=False) m=Int((i+j) / 2) If a(m)=x Then f=True If a(m) < x Then i=m+1 Else j=m - 1LoopIf f=True Then For k=m To n-1a(k)=a(k+1) Next k n=n - 1 Label1.Caption=” ” For k=1 To nLabel1.Caption=Label1.Caption+Str(a(k))+” ” Next kElseLabel1.Caption=”找不到该数”End If程序运行后,Label1中显示的内容是( )A.23 45 93 95 95 95 99 B.23 45 93 95 99C.23 45 93 99 D.23 45 93 95 95 95答案 B62.有如下程序段:n = 0: i = 2: f = TrueDo While i <= 6 And fn = n + 1f = FalseFor j = 6 To i Step -1 If a(j) < a(j - 1) Thent =a(j):a(j)=a(j-1):a(j-1)=tLast = jf = True End IfNext ji = Last + 1Loop数组元素a(1)到a(6)的值依次为“10,16,82,36,51,87”,经过该程序段“加工”后,下列说法不正确的是( )A.变量n 的值为5B.此过程中数据共需比较8次C.此过程中数据共需交换2次D.数组元素a(1)到a(6)的值为升序解析 f是每趟排序是否交换的标志,如果没有交换,则提前退出循环。变量n是排序的趟数。Last是记录每趟最后一次交换的位置。当i=2时,比较5次,交换1次,Last=4。接下来i=5,比较2次,交换1次,Last=5。接下来i=6,比较1次,但未交换,退出循环。排了3趟。答案 A63.有如下 VB 程序段:flag = True : i = 1Do While i <= 6x = Int(Rnd * 100) + 1If flag Or x >50 Thena(i)=xflag = Not flagi = i + 1End ifLoop执行该程序段后,在下列选项中,a(1)~a(6)各元素值不可能的是( )A.52,95,46,74,77,83 B.50,55,46,70,21,97C.62,78,57,61,69,50 D.31,54,48,72,50,82解析 本题考查循环过程中变量的变化规律。通过 flag = Not flag 语句得知,Flag 的值是 True 和 False 交替出现的,当 i 的值为奇数是 flag 为 True,偶数时 flag 为 False。当 i 为偶数时,偶数时 flag 为 False,只有>50 成立才会给数组 a 赋值,即数组 a 偶数位(a(2)、a(4)、a(6))上的值肯定大于 50。C 选项 a(6)=50 不能出现。答案 C64.有如下VB程序段:n=6For i = 1 To 3s = ” ”For j = 1 To n \2s = s + a(j) + ”-” + a(n - j + 1) + ”;”Next jt = a(n)For j = n To 2 Step -1a(j) = a(j - 1)Next ja(2) = tNext i若数组a(1)至a(6)的值分别为”1”、”2”、”3”、”4”、 ”5”、”6”,执行该程序段后,变量s的值为( )A.”1-4;5-3;6-2;” B.”1-5;6-4;2-3;”C.”1-3;4-2;5-6;” D.”1-2;3-6;4-5;”解析 i表示循环次数,共循环了3次。j和n - j + 1是对称位置的关系。第1次s=”1-6;2-5;3-4;”,从最后1个元素开始,直到第2个元素,等于他前面的值,a数组中元素值依次为1、6、2、3、4、5;第2次s=”1-5;6-4;2-3;” 从最后1个元素开始,直到第2个元素,等于他前面的值,a数组中元素值依次为1、5、6、2、3、4;第3次s=”1-4;5-3;6-2;”。答案 A 展开更多...... 收起↑ 资源预览