小王编写一个VB程序模拟数据筛选,功能如下:程序运行时从数据库中读取成绩数据,按升序排序后在列表框List1中显示,在文本框Text1中输入成绩1,在文本框Text2中输入成绩2,单击“筛选”按钮Command1,筛选出大于等于成绩1且小于等于成绩2的记录,并显示在列表框List2中,程序运行界面如图所示。
(1)
运行上述程序,若在文本框Text1中输入75,Text2中输入85,单击“筛选”按钮,则筛选到的记录有条(填数字)。
(2)
实现上述功能的VB程序如下,请在划线处填入合适代码。
Const n = 20
Dim score(1 To n) As Single
Function adj(s As String, n As Integer)
‘此函数功能:在字符串 s 前添加若干个空格,使其长度变为 n。代码略
End Function
Function search_left(key As Integer)
‘此函数功能:返回大于等于 key 的数组元素的起始位置。代码略。
End Function
Function search_right(key As Integer)
Dim i As Integer, j As Integer,
m As Integer
i = 1: j = n
Do While i <= j
If key >= score(m) Then i = m + 1 Else j
= m - 1
Loop
End Function
Private Sub Form_Load()
‘从数据库中读取成绩存数组 score,记录数存 n,并对此数组
score 升序排序,代码略
End Sub
Private Sub Command1_Click()
Dim num1 As Integer, num2 As
Integer, first As Integer, last As Integer
List2.Clear
num1 = Val(Text1.Text): num2 =
Val(Text2.Text)
first = search_left(num1): last
= search_right(num2)
If total <= 0 Then
List2.AddItem "无筛选到的记录!"
Else
List2.AddItem "筛选到" + Str(total) + "条记录!"
List2.AddItem "依次是:"
For i = first To last
List2.AddItem
adj(Str(i), 3) + adj(Str(score(i)), 6)
Next i
End If
End Sub
答案: 【1】8
【1】m = (i + j) \ 2【2】search_right = i – 1 或 search_right = j或search_right = i或search_right = j+1【3】total = last - first + 1或total = last – first或total = last – first