第②空,冒泡升序排序优化即每一趟排序记录下最后一个数据交换的位置,那么下一趟排序时就不需要对该位置前面的数据进行比较了。
因此把每一趟的最后一个数据交换的位置定义为下一趟排序时的结束位置,所以start=j。
第③空,列表框中输出排序好的数组a,同时注意列表框输出结果是字符串类型。
14.查找最接近的数。
编写一个查找最接近的数的VB程序:
程序运行时,在文本框Text1中输入产生随机数的个数(1到100之间),单击命令按钮“产生随机数并升序排列”后,在列表框List1中显示已经按升序排列后的随机整数。
然后在文本框Text2中输入要查找的整数,单击命令按钮“查找”后,在标签Label3中显示随机整数序列中与待查找数最接近的整数(当最接近的数有2个时,输出较大的一个)。
程序运行效果如图所示。
实现上述功能的VB代码如下,请在横线处填入合适代码。
DimnAsInteger’存储随机数的个数
Dimf(1To100)AsBoolean’f(i)为true时表示随机整数i已经产生过
Dima(1To100)AsInteger’依次存放升序排序后的n个随机数
PrivateSubCommand1_Click()’命令按钮“产生随机数并升序排列”的单击事件
DimiAsInteger
Randomize
Fori=1To100
f(i)=False
Nexti
n=Val(Text1.Text)
Fori=1Ton
t=Int(Rnd*100+1)
DoWhilef(i)=True
t=Int(Rnd*100+1)
Loop
①
Nexti
j=0
Fori=1To100实现排序并输出
Iff(i)=TrueThen
②
a(j)=i
List1.AddItemStr(i)
EndIf
Nexti
EndSub
PrivateSubCommand2_Click()命令按钮“查找”的单击事件
DimkeyAsInteger
key=Val(Text2.Text)
Ifkey<=a
(1)ThenLabel3.Caption=Str(a
(1)):
ExitSub
Ifkey>=a(n)ThenLabel3.Caption=Str(a(n)):
ExitSub
L=1:
R=n
DoWhileL<=R找到与key较为接近的两个数a(R)和a(L)
m=(L+R)\2
Ifkey<=a(m)Then
R=m-1
Else
L=m+1
EndIf
Loop
If ③ Then在a(R)和a(L)中选出更接近key的数
Label3.Caption=Str(a(R))
Else
Label3.Caption=Str(a(L))
EndIf
EndSub
答案 ①f(t)=True②j=j+1③Abs(a(R)-key)解析 ①处根据题干可知该处为产生不重复的随机数,产生之后将对应的f数组内的值改为True,标记该数字已产生,故①f(t)=True,②将产生的数依次输出,故②j=j+1,③通过对分查找到二个数a(R)、a(L),判别更接近key的数。
故③Abs(a(R)-key)15.有100个大小形状一样的玻璃球,其中有1个玻璃球的重量轻于其