若存在和为key的数对,输出该数对包含的两个整数,小的在前,大的在后;
若存在多个数对满足条件,则输出最先找到的数对;
若找不到符合要求的数对,则输出“没有符合条件的数对”。
根据上述算法,小黄编写了一个VB程序,功能如下:程序加载时,自动生成50个互异的、按升序排列的随机正整数,依次存入数组a中,并显示在列表框List1中。在文本框Text1中输入key的值,单击“查找”按钮Command1,查找结果在列表框List2中输出。程序运行界面如图所示。
Dim a(1 To 50)As Integer
Const n As Integer=50
Private sub form_load()
‘生成50个互异的、被升序排序的随机正整数,依次存人数组a中
‘代码略
End Sub
Private Sub Command1=_Click()
Dim M As Integer,L As Integer,R As Integer
Dim key As Integer,flag As Boolean
flag=false:key=Val(Text1.Text)
For i=1 To n-1
L=i+1:R=n
Do While ①
M= ②
If a(i)+a(M)<key Then
L=M+1
Else lf a(i)+a(M):>key Then
R=M-1
Else
List2.AddItem Str(a(i))+””+ ③
flag=True
End If
Loop
If Not flag Then List2.AddItem”没有符合条件的数对!”
End Sub
① ② ③
Dim a(1 To 10) As Integer
Dim i As Integer, j As Integer, m As Integer
Dim key As Integer
i = 1: j = 10: key = Val(Text1.Text)
Do While i <= j
m = (i + j) \ 2
If key < a(m) Then
j = m - 1
ElseIf key > a(m) Then
i = m + 1
Else
Do While m > 1
If a(m - 1) = key Then
m = m - 1
Else
Exit Do
End If
Loop
Exit Do
End If
Loop
数组中a(1)到a(10)依次为“1,1,2,3,3,3,3,4,4,4”,若在文本框Text1中输入值3,经上述程序段执行后变量m的值为( )
Private Sub Command1_Click()
Dim s As String, c As String
Dim i As Integer, n As Integer, num As Integer
s = Text1.Text: num = 0
n =
i = 1
Do While i <= n
c = Mid(s, i, 1)
If Then
num = num + 1
End If
i = i + 1
Label1.Caption = Str(num)
End Sub
实现上述功能的VB代码如下,但加框处代码有错,请改正。
Dim a(1 To 20) As Integer ’用于保存n(n<=20)个按从小到大顺序排列的整数
‘Form_Load事件过程产生n个整数,按升序保存在数组a中,并在Text1中显示
Private Sub Form_Load()
‘代码略
End Sub
Private Sub Command1_Click()
Dim i , j , m , k As Integer
Dim x As Integer,f As Boolean ’变量f用于标记是否在数组中找到x
x = Val(Text2.Text)
i=1 :j=n : f=False
Do While i<=j And f=False
m = Fix((i+j)/2)
If a(m)=x Then f=True
If Then i=m+1 Else j=m-1 ‘(1)
Loop
If f = True Then
For k = m To n-1
‘(2)
Next k
n = n - 1
Text3.Text = ""
For k = 1 To n
Text3.Text = Text3.Text+Str(a(k))+","
Next k
Else
Text3.Text = "该数没有找到!"
End If
End Sub
以上程序段运行时,为了实现上述功能,加框处代码应改正为:
⑴;⑵。
a(1)=2
For i=2 to 7
a(i)=a(i-1)*2-1
Next i
i = 1 : j = 7
Do While i <= j
m =(i + j)\ 2
If a(m)= Key Then Exit Do
If Key < a(m) Then j = m - 1 Else i = m + 1
Loop
若key的值为15,则程序执行结束后,j的值为( )
步骤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
Function s(n As Integer) As Integer
If n=1 Then
s=1
Else
s=s(n-1)+n
End If
End Function
Private Sub Form_Click()
Dim x As Integer
x=s(4)
Print x
End Sub
程序运行时,单击窗体后,变量x的值为( )
key=Val(Text1.text)
i=1:j=10
Text2.text=””
Do While i<=j
m=Int((i+j)/2+0.5)
If key=a(m) Then Exit Do `Exit Do表示退出循环
If key<a(m) Then j=m-1 Else i=m+1
Text2.text=Text2.text+Str(a(m))
Loop
数组元素a(1)到a(10)的值依次为“8、17、24、30、36、40、55、58、61、66”,文本框Text1中输入的值是30,执行该程序段,文本框Text2中显示的是( )
i=1:j=8:k=0
key=15
Do While i<=j
k=k+1
m=Int((i+j)/2)
If key<a(m)Then j=m-1 Else i=m+1
Loop
数组元素a(1)到a(8)的数据依次是“14,15,15,17,28,30,37,40”,该程序执行完毕后,下列各变量的值不正确的是( )
i=1:j=10:k=0
key=Val(Text1.Text)
Do While i<=j
k=k+1
m=(i+j+1)\2
If a(m)<key Then
i=m+1
Else
j=m-1
End If
Loop
数组元素a(1)到a(10)的值依次为10,12,14,17,19,20,20,27,29,32。在文本框Text1中输入12,执行该程序段后,以下变量值正确的是( )。
a = "access": b= "col": s =””
For i=1 To Len(b)
L=1:R=Len(a)
Do While L<=R
m=(L+R)\2
If Mid(a, m, 1)>Mid(b, i, 1) Then R=m- 1 Else L=m+1
Loop
a = Mid(a, 1, R) + Mid(b, i, 1) + Mid(a, L, Len(a) -L+ 1)
s =s+Str(L)
Next i
上述程序执行后,变量s的值为( )
key = Val (Text1. Text)
i =0:j=9:n=0
Do While i<= j
m=(i+j)\2
n=n+1
If key <= a(m) Then
j=m-1
Else
i=m+1
End If
Loop
s=i
Do While i<9 And a(i)= a (i+1)
i=i+1
Loop
Label2.Caption = Str(n) +“:”+ Str(i + 1-s)
数组元素a(0~9)的值依次为“3,4,7,8,8,8,8,9, 10,12”。在文本框Text1中输入“8”,点击“查找”按钮后,Labe12 中输出的结果是( )
i=1: j=10
Do While i<=j
m=(i+j)\2
If key <= a(m)Then
①
Else
②
End If
Loop
For k=10 To i Step-1
③
Next k
a(i)=key
要使程序实现上述功能,则划线处①②③中的语句分别是( )
key=Val(Text1.Text)
s=" "
i=1 : j=10
Do While i<=j
m=(i+j)\2
s=s+Str(a(m))
If a(m)> key Then j=m-1 Else i=m+1
Loop
Text 2.Text =s
数组元素a(1)到a(10)的值依次为“2,3,5,8,9,10,13,17,19,20”。在文本框Text l中输人待查找的数,执行该程序段,则文本框Text 2中显示的内容可能的是( )