Dim m2 As String
Private Sub Command1Click()
Dim flag(1 To 26) As Boolean
Dim num As Integer,t As Integer
Randomize
num = 1
Text3.Text = " "
For i = 1 To 26
flag(i) = False
Next i
Do While num <= 26
x = Int(Rnd * 26) + 97
①
If flag(t) = False Then
m2 = m2 + Chr(x)
num = num + 1
②
End If
Loop
Text3.Text = m2
End Sub
Private Sub Command2Click()
Dim s As String, m As String, result As String
Dim k As String, c As Integer
s = Text1.Text
m = "abcdefghijklmnopqrstuvwxyz"
For i = 1 To Len(s)
k = Mid(s, i, 1)
If k >= "A" And k <= "Z" Then
k = Chr(Asc(k) + 32)
End If
c = 1: continue = True
Do While ③
If k = Mid(m, c, 1) Then
continue = False
End If
c = c + 1
Loop
④
Next i
Text2.Text = result
End Sub
程序①处的代码是
程序②处的代码是
程序③处的代码是
程序④处的代码是

实现上述功能的VB程序如下:
Private Sub Command1_Click()
Dim a(1 To 1000) As String '数组a存储文中出现该指定单词(或字符串)的各个位置
Dim s As String, c As String ,ch As String
Dim n As Integer, max As Integer, i As Integer
s = Text1.Text
c = Text2.Text
n = 0: Max = 0
For i = 1 To Len(s) - Len(c) + 1
ch = ①
If ch = c Then
n = n + 1
a(n) = i
If n >= 2 Then
If a(n) - a(n - 1) - Len(c) > Max Then Max = a(n) - a(n - 1) - Len(c)
End If
End If
Next i
Text3.Text = ②
End Sub
以上程序段运行时,为了实现上述功能,划线处①和②应填入的代码分别为:
① ②
做法是比较中点与当前查找范围第1个数大小关系,用对分法使查找范围逼近拐点;当余下数组只有两个元素时,可根据此二元素大小关系得到拐点的位置。
依据上述描述设计了VB程序,界面如图所示。请回答下列问题:
Dim a(1 To 20)As Integer
Private Sub Command1_Click()
Dim Low As Integer,High As Integer
Low=1
High=20
Do While High>Low
If ① Then
If ② Then
Label1.Caption=“拐点元素为”+Str(a(1))+“,下标为”+Str(1)
Else
Label1.Caption=“拐点元素为”+Str(a(High))+”,下标为”+Str(High)
End If
Exit Do
End If
m=(Low+High)\2
If a(m)>=a(Low)Then
Low=m
Else
③
End If
Loop
End Sub
Private Sub Form_Load()
‘生成循环递增的数组a,代码略
End Sub
① ② ③
i = 1: j = 10
Do While i <= j
m = (i + j) \ 2
If a(m) = Key Then text1.Text = "查找成功": Exit Do
If Key < a(m) Then j = m - 1
If Key > a(m) Then i = m + 1
Loop
步骤1:如果待筛选的玻璃球个数<3,则认定已经找出了这个玻璃球(认定方法参照步骤2中描述),停止筛选,并输出经过的筛选总次数;否则,重复执行步骤2。
步骤2:按编号依次将玻璃球均分成3份,如果有多余的放入第3份中;比较第1、2份的玻璃球重量:
①如果第1份等于第2份的重量,则选取第3份的玻璃球作为下一次筛选的对象;
②如果第1份小于第2份的重量,则选取第1份的玻璃球作为下一次筛选的对象;
③如果第1份大于第2份的重量,则选取第2份的玻璃球作为下一次筛选的对象;
重复执行步骤1。
例如:第1次筛选的小球编号区间是1~100,均分成三份的待称重小球编号分别是1~33、34~66、67~100;第2次则选取以上3份中的一份进行再筛选、再均分……直至找到。
解决上述问题的VB程序功能如下:运行程序,在列表框List1中显示100组数据,分别代表每个编号及对应的小球重量(其中有且只有一个小球的重量与其他小球不同),单击“筛选”按钮Command1,在列表框List2中显示每次筛选的编号区间和完成筛选的总次数。程序运行界面如图。

Const maxn=100
Dim a(1 To maxn) As Integer
Dim w(1 To 2) As Integer ‘数组w用来存储第1份和第2份小球的重量
Private Sub Form Load()
‘此处代码用来模拟产生100个小球的重量,分别存储在数组元素a(1)~a(100)中;
‘其中只有1个小球的重量为8,随机存储在数组a的某元素中,其余重量均为10;
‘此处代码略
End Sub
Private Sub Command1_Click()
Dim left As Integer, right As Integer ‘left 为起始编号,right 为结束编号
Dim s As Integer, c As Integer ‘s为每次查找的区间长度
left=1: right=maxn
c=1: s=right: i=0
List2. AddItem Str (i+1)+“--->”+Str(maxn)
Do While right-left > 3
w(1)=0: w(2)=0: k=1
i=left
s=
Do While i<=(s \ 3) * 2+left-1 ‘Do语句用于将待筛选的数据进行区域划分
w(k)=w(k)+a(i)
If i=(s \ 3) * k+left-1 Then k=k+1
i=i+1
Loop
If w(1)=w(2) Then
left=left+(s \ 3) * 2
Elself w(1) < w(2) Then
Else
right=left+(s \ 3) *2-1
left=s \ 3+left
End If
List2. AddItem Str(left) &“--->” & Str(right)
Loop
List2. AddItem “经过” +Str (c)+“次后找到”
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, m As Integer
Dim s As String
i = 1: j = 6
Key = Text1.Text:s = ""
Do While i <= j
m = Int((i + j) / 2 + 0.5)
s = s + " " + a(m)
If Key > a(m) Then
i = m + 1
Else
j = m - 1
End If
Loop
Text1.Text = s
End Sub
| 1 | 5 | 7 | 9 |
| 4 | 6 | 10 | 15 |
| 8 | 11 | 12 | 19 |
| 14 | 16 | 18 | 21 |
已知数据逐行存储在数组a中,在杨氏矩阵数组中查找某数字是否存在的VB程序段如下:
cz = False : i = 1 : j = n
Do While j >= 1 And i <= n
If key < a(s) Then
⑵
ElseIf key > a(s) Then
⑶
Else
cz = True:Exit Do
End If
Loop
方框中的代码由以下三部分组成:
①j = j - 1
②s = (i - 1) * n + j
③i = i + 1
代码顺序正确的选项是( )
Private Sub Command1_Click()
Dim a(1 To 6) As Integer, b(1 To 6) As String, i as integer, j as integer
Dim c As String, k As Integer, tmp1 As Integer, tmp2 As String
s=text1.text
i = 1: k = 1: tmp1 = 0: tmp2 = ""
Do While i <= Len(s)
c = Mid(s, i, 1)
If c = "," Then
a(k) = tmp1: b(k) = tmp2
tmp1 = 0: tmp2 = ""
①
Else
If
Then
tmp2 = tmp2 + c
Else
tmp1=tmp1*10+val(c)
End If
End If
i = i + 1
Loop
For i = 1 To 5
For j = 1 To 6 - i
If a(j) > a(j + 1) Then tmp1 = a(j): a(j) = a(j + 1): a(j + 1) = tmp1
If Len(b(j)) > Len(b(j + 1)) Or ② Then
tmp2 = b(j): b(j) = b(j + 1): b(j + 1) = tmp2
End If
Next j
Next i
For i = 1 To 6
List1.AddItem Str(a(i)) + b(i)
Next i
End Sub
① ②

实现该功能的VB程序如下:
Private Sub Command1_Click()
Dim a(1 To 100) As Integer
Dim sum As Intcger
Const t= 50
‘将50个学生的信息技术和通用技术成绩依次存储在数组a(1)~a(100),代码略
Key = Val(Text2.Text)
i= 1
j= 100
m=(i+j)\2
Do While ① And m>1
If m Mod 2=1 Then m= m- 1
sum = a(m)+ a(m- 1)
If ② Then
j=m-2
Else
![]()
End If
m=(i+j)\2
Loop
Label2.Caption "大于等于"& Key & "分的人数为: "+ Str(t-j\2)
End Sub
① ②
i=1: j=8: t=0
Key=Int (rnd( )*20)+10
Do While i<m=j
m=Int((i+j)/2)
t=t+1
If a(m)=Key Then
Exit Do
Else If a(m)> Key Then
j=m-1
Else
i=m+1
End If
Loop
数组元素a(1)到a(8)的值依次为“2,11,14,15,18,19,25,32”,该程序段运行结束后,变量t的最大值可能是( )
数组元素f(1)到(9)赋初值为0,代码略
a(1)= 1
For i=2 To 9
a(i)=a(i-1)+ Int(Rnd* 2)+1
Next i
Key= Val(Text1. Text)
i=1: j=9
Do While i<=j
m=(i+j+1)\ 2
f(m)= 1
If a(m) > Key Then
j=m-1
Else
i=m+1
End If
Loop
在文本框Text1中输入待查找数,执行该程序段后,下列选项中,f(1)到f(9)各元素值不可能的是( )
Key=Val(Text1.Text)\10
Text2.Text=""
i=1:j=9:f=False
Do While i<=j And Not f
m=(i+j)\2
If a(m)Mod 10=Key Then
search=m:f=True
ElseIf a(m)Mod 10>Key Then
i=m+1
Else
j=m-1
End If
Text2.Text=Text2.Text+Str(m)
Loop
Dim a(1 To 10) As Integer
Randomize
n = 0
i = 1: j = 10
Key = Int(Rnd * 25) * 2 + 1
Do While i <= j
m = Int((i + j) / 2)
If Key = a(m) Then Exit Do
If Key > a(m) Then
i = m + 1: n = n * 2 + 1
Else
j = m - 1: n = n * 2 - 1
End If
Loop
数组元素a(1)到a(10)的值依次为“5,8,11,18,23,29,33,42,45,51”。执行该程序段后,n的值不可能的是( )

Dim a(1 To 10) As Integer, b(1 To 10) As Integer
Private Sub Command1_Click( )
Dim i As Integer, time As Integer, k As Integer
Dim c(1 To 20) As Integer, nc As Integer
c(1)=a(1):nc=1
For i=1 To 9 '删除起点重复数据后添加到数组c
If a(i)<>a(i+1) Then
nc=nc+ 1
End If
Next i
For i=1 To 10 '删除终点重复数据后添加到数组c
k=nc
Do While b(i) < c(k)
k=k- 1
Loop
If Then '非重复数据( 新停靠楼层)添加到数组c
For j=nc Tok+ 1Step-1
c(j+1)=c(j)
Next j
nc=nc+ 1
c(j+1)=b(i)
End If
Next i
time= (c(nc)-c(1))* 3+ nc* 8
Text1.Text="总时间-" + Str(time)+"秒"
End Sub
Private Sub Form_ Load( )
'生成10批人的起止楼层,分别给数组a和b,并在列表框list1输出,代码略。
For i=1 To 9
For j=10 To i+1 Step-1
If a(j)<a(j- 1) Or Then
t=a(j):a(j)=a(j-1):a(j- 1)=t
t=b(j):b(j)=b(j-1):b(j- 1)=t
End If
Next j
Next i
For i=1 To 10
List2.Addtem Str(a(i)+Str(b(i))
Next i
End Sub
Key= Val(Text1.Text)
i=1: j=10: n=0
Do While i<=j
m=(i+j)\2
n=n+1
If a(m) : > Key Then
j=m-1
Else
i=m+ 1
End If
Loop
Text2.Text=str(n)
数组元素a(1)到a(10)的值依次为“2,3,5,8,9,10,13,17,19,25”。在文本框Text1中输入待查找的整数,执行该程序段,则文本框Text2中显示3,待查找数不可能是( )
Key = Int(Rnd * 5) * 2 + 10
i = 1: j = 8: n = 0
Do While i <= j
m = (i + j + 1) \ 2
If a(m) >= Key Then i = m + 1 Else j = m - 1
n = n + 1
Loop
数组元素a(1)~a(8)的值为“22,21,18,17,16,15,14,10”。若该程序段执行后,下列说法错误的是( )
i = 1: j = 8: k = 4
Randomize
Key = (Int(Rnd * 4)+20)*4
Do While i <= j
m = (i + j) \ 2
If Key = a(m) Then
Exit Do
ElseIf Key < a(m) Then
j = m - 1: k = k / 2
Else
i = m + 1: k = k * 2
End If
Loop
数组元素a(1)到a(8)的值依次为“80,82,84,86,88,90,92,94”,执行该程序段后,变量k的值可能是( )
arr[M]和待查找数据Key比较
①arr[M]=Key,返回M的值
②若M位置的右侧有序,当待查找数据在右侧,则下次在右侧查找,否则在M左侧查找
③若M位置的左侧有序,当待查找数据在左侧,则下次在左侧查找,否则在M右侧查找
Function Search (key As Integer, L As Integer, R As Integer) As Integer
Do While L <=R And Search=- 1
M=(L+ R)\2
If arr(M)= key Then
Search= M
Else
If Then
If arr(L)<=key And key <arr(M) Then
R=M-1
Else
L=M+1
End If
Else
If Then
L=M+1
Else
R=M- 1
End If
End If
End If
Loop
End Function
程序界面如下图所示,程序运行时,在文本框Text1中输入一段文本,在文本框Text2中输入查找的字符串,在文本框Text3中输入替换为的字符串,单击“查找替换”按钮Command1,则在文本框Text4中输出替换后的文本,在标签Label6中显示替换的次数。
实现上述功能的VB程序如下,请在程序划线处填入合适的代码。
Private Sub Command1_Click()
Dim st1 As String, st2 As String
Dim i As Integer, n As Integer, count As Integer
Dim st3 As String, ch As String, result As String
result = “ ”
st1 = Text1.Text
st2 = Text2.Text
st3 = Text3.Text
len1 = Len(Text2.Text)
result = “ ”
i = 1
Do While i <= n
If ch = st2 Then
result = result + st3
count = count + 1
i = i + len1
Else
i = i + 1
End If
Loop
Text4.Text = result
Label6.Caption = Str(count)
End Sub