Const n=3500 ’存储单词的总数
Dim a(1 To n)As String ’依次存储每个英语单词
Dim b(1 To n) As Strin9 ’依次存储每个英语单词的中文含义
Private Sub Command1_Click()
Dim Conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQL As String
conn.ConnectionString=“Provider=Microsoft.ACE.OLEDB.12.0;Data source=”&App.Path&“\dictionary1.accdb”
strSQL=”select*from list”
conn.Open
Set rs.ActiveConnection=conn
rs.Open strSQL
num=0
Do While Not rs.EOF
num=num+1
a(mum)=rs.Fields(“英语单词”)
b(num)=rs.Fields(“中文含义”)
rs.MoveNext
Loop
rs.Close
conn.Close
Set rs=Nothing
Set conn=Nothing
For i==1 To n
List1.AddItem a(i)+“ ”+b(i)
Next i
End Sub
Private Sub Command2_Click()
Dim s As String
S=Text1.Text
If search(s)=-1 Then
Text2.text=“找不到该单词”
Else
Text2.Text= ①
End If
End Sub
Function search(key As String)As Integer
Dim i,j As Integer
Dim mid1,mid2 As Integer
i=1:j=n
search=-1
Do While i<=j
mid1=Int(j+(j—i)/3)
mid2=Int(j-(j-i)/3)
If key=a(mid1)Then
search=mid1
Exit Do
ElseIf key<a(mid1)Then
j=mid1-1
ElseIf key=a(mid2)Then
search=mid2
Exit Do
Elself key>a(mid2)Then
i=mid2+1
Else
i=mid1+1
②
End If
Loop
End Function
① ②
若存在和为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
① ② ③
按钮Command1,则在文本框Text2中显示该金额的大写,程序运行界面如下图所示:
Private Sub Command1_Click()
Dim dx As String, dw As String
Dim s As String, c As String
Dim ch As String
Dim i As Integer
dx = "零壹贰叁肆伍陆柒捌玖拾"
dw = "亿仟佰拾萬仟佰拾元"
s = Text1.Text
If Len(s) > 9
Text2.Text = "输入的数据超出所能转换的范围"
Else
For i = 1 To Len(s)
ch =
c = c + Mid(dx, Val(ch) + 1, 1) + Mid(dw, 9 - Len(s) + i, 1)
Next i
Text2.Text = c + "整"
End If
End Sub
删数的算法如下:
⑴如果k>0,则从前往后检测相邻字符,否则,转⑶;
⑵①若所有相邻字符都已非降序,则将串尾k个字符删去,k值置0,转⑴;
②若相邻两数存在逆序(即前一个数>后一个数),则将前一个数删除,k值变化,然后回到⑴;
⑶去掉串首的0,输出结果。
按照上述算法思路,编写了VB程序,功能如下:在文本框Text1中输入数字串,在文本框Text2中输入删数的个数,单击“处理”按钮Command1,在文本框Text3中显示最小的整数。程序运行界面如图所示。
delete函数说明:delete(st,x,y)为自定义函数,功能为在字符串st中删除x位置开始的y长度的子串。
Private Sub Command1_Click()
Dim s As String, k As Integer, i As Integer, j As Integer, n As Integer
s = Text1.Text
k = Val(Text2.Text)
n = Len(s)
Do While k > 0
i = 1
Do While i < n And
i = i + 1
Loop
If i = n Then
n = n - k
k = 0
Else
s = delete(s, i, 1)
n = n - 1
End If
Loop
i = 1
Do While n > 1 And Mid(s, 1, 1) = "0"
s = delete(s, 1, 1)
i = i + 1
n = n - 1
Loop
Text3.Text = s
End Sub
Function delete(st As String, x As Integer, y As Integer) As String
delete = Mid(st, 1, x - 1) + Mid(st, x + y) 'mid函数第3个参数省略,则截取从开始位置向右到字符串结尾的所有字符
End Function
Private Sub Command1_ Click( )
Dim n As Integer, i As Integer
Dim a(1 To 50) As Integer
Randomize
For i=1 To 5
①
List1 AddItem Str(a(i))
Next i
If a(1) < a(2) Then
firstmin=a(1)
secondmin =a(2)
Else
firstmin=a(2)
secondmin=a(1)
End if
For i=3 To 50
If a(i) < secondmin Then
If ② then
Secondmin = firstmin
firstmin = a (i)
Else
③
End If
End If
Next i
Label1. Caption = "第二小的数是" str(secondmin)
End Sub
① ② ③
Key = Val(Text1.Text)
i = 1: j = 100
Do While i <= j
m = (i + j) \ 2
If (1) Then m = m - 1
Sum = (2)
If Key = Sum Then Exit Do ‘Exit Do表示退出循环
If (3) Then
i = m + 2
Else
j = m - 2
End If
Loop
If i > j Then Text2.Text = "没有找到!" Else Text2.Text = Str(m)
实现该功能,则上述程序段3个方框处的表达式分别为( )
李同学设计了一个用来求两座岛屿之间相连所需桥的数量的VB程序,点击“生成矩阵”按钮Command1,随机产生一个关系矩阵,并在列表框List1中显示。在文本框Text1和Text2中输入岛屿的编号(1~9),点击“求解”按钮Command2,在Labell中输出两座岛屿之间相连所需桥的数量。VB程序运行界面如图所示。
对无桥相连的两座岛屿p1,p2之间相连的算法思想如下:
①p1岛屿所在行开始,将与其相连的岛屿依次添加到数组b中。
②若数组b中未出现岛屿p2,则依次查找与其相连岛屿的所在行,将新出现的相连的岛屿添加到数组b中。
③在查找过程中同时记录查找步数。
数组b内全部搜索完毕,若p2还是未出现,则两座岛屿之间无法相连,反之输出桥的数量。请回答以下问题:
Const n = 9 ‘岛屿的数量
Dim a(1 To n * n) As Integer
Private Sub Command1_Click()
Dim s As String List1.Clear
For i = 1 To n
For j = i To n
If j = i Then
a((i - 1) * n + j) = 0 ‘对角线为0
Else
a((i - 1) * n + j) = Int(Rnd * 2)
① ‘矩阵对称
End If
Next j Next i
For i = 1 To n
s = ""
For j = 1 To n
s = s + Str(a((i - 1) * n + j))
Next j
List1.AddItem s Next i
End Sub
Private Sub Command2_Click()
Dim b(1 To n) As Integer
Dim qiao(1 To n) As Integer ‘记录相连岛屿之间桥的数量
Dim find(1 To n) As Boolean ‘记录某岛屿是否被添加到数组b中
Dim p1 As Integer, p2 As Integer, cur As Integer, k As Integer, q As Integer
p1 = Val(Text1.Text)
p2 = Val(Text2.Text)
cur = p1: k = 1: q = 0
find(cur) = True
Do While find(p2) = False
For i = 1 To n
If a((cur - 1) * n + i) = 1 And find(i) = False Then
b(k) = i: k = k + 1
find(i) = True
②
End If
Next i
q = q + 1
If q = k Then Exit Do Else ③
Loop
If find(p2) = True Then
Label1.Caption = "需要经过" + Str(qiao(p2)) + "座桥"
Else
Label1.Caption = "无桥相连"
End If
End Sub
① ② ③
a(1)=2: a(2)=6: a(3)=8: a(4)=9: a(5)=12
a(6)=15: a(7)=17: a(8)=18: a(9)=22: a(10)=30
k=Val(Text1.Text)
i=1: j=10
Do While i<=j
m=(i+j)\2
If a(m)<=k Then
i=m+1
Else
j=m-1
End If
Loop
Text2.Text=Str(a(i))+"←→"+Str(a(j))
程序运行时,若在文本框Text1中输入5,则文本框Text2中显示的内容是( )
Key = Int(Rnd * 49) * 2 + 1
s = 0: i = 1: j = 10
Do While i <= j
m = (i + j) \ 2
If Key = a(m) Then Exit Do
If Key < a(m) Then
j = m - 1: s = s * 2
Else
i = m + 1: s = s * 2 + 1
End If
Loop
数组元素a(1)到a(10)的值依次为“3,13,15,20,28,35,45,52,63,97”,执行该程序段后,s的值不可能为( )
Key=Val(Text1.Text)
i=1:j=6
n=0:f=False
flag=False
Do While i<=j And Not f
n=n+1
m=Int((i+j)/2)
If key=a(m)Then f=True
If key <a(m)Then j=m-1 Else i=m+1
Loop
若数组元素a(1)到a(6)的值依次为“3,9,12,17,28,39”,在文本框Text1中输入17后运行该程序,则以上程序段运行结束后,下列说法不正确的是( )
Const n = 9
Dim a(1 To n) As Integer,i As Integer, j As Integer
Private Sub Form_Load()
Dim s As String, k As Integer
a(1) = 9: a(2) = 13: a(3) = 11: a(4) = 3: a(5) = 20
a(6) = 6: a(7) = 18: a(8) = 15: a(9) = 8
For i = n To 2 Step -1
k = i
For j =
If a(j) < a(k) Then t = a(j): a(j) = a(k): a(k) = t
Next j
'③改错
Next i
Label1.Caption = s End Sub
Private Sub Command1_Click()
Dim L As Integer, R As Integer, m As Integer, key As Integer
key = Val(Text1.Text)
For i = 1 To n - 1
L = 1: R = n
Do While L <= R
m = (L + R) \ 2
If a(i) + a(m) = key Then
Label2.Caption = Str(a(i)) & Str(a(m))
Exit For
ElseIf Then
L = m + 1
Else
R = m - 1
End If
Loop
Next i
If L > R Then Label2.Caption = "没有找到数对"
End Sub
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
要使程序实现上述功能,则方框①②③中的语句分别是( )
a(1) |
a(2) |
a(3) |
…… |
a(n-2) |
a(n-1) |
a(n) |
3 |
25 |
38 |
…… |
55 |
31 |
12 |
依据对分查找思想,设计一个在数组a中查找数据key 的程序,实现该功能的VB程序如下,但加框处代码有错,请改正。
Private Sub Command1_Click()
Const n = 6
Dim a(1 To n) As Integer, flag As Boolean
Dim i As Integer, j As Integer, m As Integer, key As Integer
‘读取一组正整数,按上述规则存入数组a中,代码略
key = Val(Text1.Text)
i = 1
j = (n + 1) \ 2
flag = False
Do While And Not flag ‘⑴
m = (i + j) \ 2
If key = a(m) Then
flag = True
ElseIf key < a(m) Then
j = m - 1
Else
i = m + 1
End If
Loop
If Not flag And j > 0 Then
m = ‘⑵
If key = a(m) Then flag = True
End If
If flag Then
Text2.Text = Str(m)
Else
Text2.Text = "找不到"
End If
End Sub
⑴⑵
Dim s1 As String, s2 As string, maxstr As string
Dim len1 As Integer, len2 As Integer, maxlen As Integer
Function Min (a As Integer, b As Integer) As Integer
If a >=b Then min = b else min = a
End Function
Function Search (m As Integer, n As Integer) As Integer
Dim c As Integer
c = 1
Do While c<= Min (len1 -m, len2 - n)
If Mid (s1, m+ c, 1) = Mid(s2,n+c,1) Then
Else
Exit Do 'Exit Do的作用是退出Do循环
End if
Loop
Search = c -1
End function
Private Sub Command1_Click()
s1 = Text1. Text
s2 = Text2. Text
len1 = Len (s1)
len2 = Len (s2)
maxlen = 0: maxstr = ""
Dim i As Integer, j As Integer, k As Integer
For i=1 To len1
For j=1 To len2
If Mid(s1, i, 1) = Mid(s2,j,1) Then
k = 'k用于记录连续公共子串的长度
If (k> maxlen) Then
maxlen = k
maxstr =
End if
End If
Next j
Next i
Labe13. Caption= "最长连续公共子串为:"& maxstr
Labe14. Cantion = "该子串长度是:"& str (maxlen)
End sub
i=1:j=7
f=False
key=Val(Text1. Text)
Do While i<=j And Not f
m=(i+j)\2
If a(m)=key Then f=True
If a(m)>key Then i=m-1 Else i=m+1
Loop
List1. AddItem Str(i)+Str(j)+Str(m)
数组元素a(1)到a(7)的值依次为"23,42,58,66,77,83,98",运行上述程序段后,列表框List1中
显示的结果为"5 4 5",则文本框Text1中输入值的范围是( )
算法说明:
1)英语单词存放在数组words中。
2)如果在数组words中找到要查找的单词,则在标签Label4中显示“查找成功!”,并显示单词在数组words中出现的次数,如果未找到则显示“无此单词,请重输!”。
实现上述功能的VB程序如下,请在程序划线处填入合适的语句。
Dim n As Integer
Dim words(1 To 100) As String
Private Sub Command1_Click()
Dim key As String, i As Integer, times As Integer
key = Text1.Text
times = 0
For i = 1 To n
If key=words(i) Then
Next i
If times > 0 Then
Label4.Caption=“查找成功!共找到”+ +“个”
Else
Label4.Caption = “无此单词,请重输!”
End If
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim word As String
word = Text1.Text
If KeyAscii = 13 Then
n = n + 1
List1.AddItem Str(n) + “:” + word
Text1.Text = “ ”
End If
End Sub
i=1: j = 5: k=0: s =""
key = Int (Rnd * 100)
Do While i<=j
k=k+1
m=(i+j)\2
s = s+Str(a(i))
If key = a(m) Then
Exit Do ‘ExitDo表示退出循环
Elself key < a(m) Then
j =m-1
Else
i=m+1
End If
Loop
Text1. Text = s
数组元素a(1)到a(5)的值依次为“6,18,25;37 ,49”。若该程序段执行后,k的值为3,则key的值不可能为( )
i =1 : j=8 : x=27 : mark = False
Do While i <= j And Not mark
m=(i+j+1)\2
If a(m) = x Then mark = True
If a(m)>x Then j=m-1 Else i=m+1
Text1. Text = Text1. Text+Str(m)
Loop
执行该程序段,文本框Text1中显示的是( )