- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 算法实例
- 面向对象程序设计 VB开发工具
- 算法实例的程序实现
- 算法及算法的表示方法
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
某查找算法的VB 程序如下:
Private Sub Commandl_Click()
mid 2=j-(j-i)\3
If key=a(midl) Then
flag=True
ElseIf key<a(midl) Then
j=midl-l
ElseIf key=a(mid 2) Then
flag=True
ElseIf key>a(mid2) Then
i=mid2+1
Else
i=mid1+1
j=mid2-1
End If
该程序段执行时,在文本框Text1中输入36,单击命令按钮Command1,程序运行结束后,i和j的值为( )
Private Sub Commandl_Click()
Dim a(1 To 9) As Integer, key As Integer, i As Integer,j As Integer
Dim mid 1 As Integer,mid 2 As Integer
a(1)=4:a(2)=22:a(3)=27:a(4)=32:a(5)=35:a(6)=44:a(7)=56:a(8)=59:a(9)=78
key=Val(Textl.Text)
i=1:j=9
flag=False
Do While i<=j And Not flag
midl=i+(j-i)\3mid 2=j-(j-i)\3
If key=a(midl) Then
flag=True
ElseIf key<a(midl) Then
j=midl-l
ElseIf key=a(mid 2) Then
flag=True
ElseIf key>a(mid2) Then
i=mid2+1
Else
i=mid1+1
j=mid2-1
End If
Loop
If flag Then Labell.Caption=″查找成功!″Else Labell.Caption=″查找失败!″
End Sub该程序段执行时,在文本框Text1中输入36,单击命令按钮Command1,程序运行结束后,i和j的值为( )
A.4,5 | B.6,5 | C.5,6 | D.6,4 |
波波同学一直梦想买彩票中500万大奖,他收集了最近100期“双色球”开奖信息,存储于data. accdb文件中,并使用VB软件编写了“双色球投注建议”程序,程序根据最近100期开奖信息,统计出现概率最低的6个红色球号码和1个蓝色球号码,给出投注建议。如果蓝色球有多个概率最低的号码,则输出多个,红色球不考虑并列概率量低情况。
注:福彩“双色球”玩法;在1-33个红色球影申随机生成6个号码,在1~16个蓝色球号码中随机生成个号码,共计6+1个号码开奖。
程序运行界面如图所示。

(1)实现上述功能的VB程序如下,请完善画线处的代码。
Dim red(l To 600) As Integer '用于存储100*6红色球信息
Dim blue(1 To 100) As Integer '用于存储100*1蓝色球信息
Private Sub Form_Load()
'本过程用于从数据库data. accdb中读取最近100期双色球开奖信息
'将100*6个红色球开奖信息依次存储在数组red()中
'将100*1个蓝色球开奖信息依次存储在数组blue()中
'将最近100期开奖信息格式化后显示在列表框List1中
'本过程代码略
End Sub
Private Sub Command1_Click()
Dim min As Integer
Dim s As string
Dim f(1 To 33)As Integer
'——以下开始处理蓝色球部分——
For b= 1 To 100
f(blue(b))= f(blue(b))+1
Next b
min= 100
For i= 1 To 16
For i=1 To 16
Next i
List2. Additem"蓝色球重点买人:"十s
'——以下开始处理红色球部分——
For r=1 To 600
②_________
Next r
③_________

(2)在某次红球部分处理时,若数组f中的,f(1)至f(33)的值依次为:
结合加虚线框处代码的算法,输出的内容是:
红色球重点买入:________________________.(按输出顺序写出6个红球号码)。
注:福彩“双色球”玩法;在1-33个红色球影申随机生成6个号码,在1~16个蓝色球号码中随机生成个号码,共计6+1个号码开奖。
程序运行界面如图所示。

(1)实现上述功能的VB程序如下,请完善画线处的代码。
Dim red(l To 600) As Integer '用于存储100*6红色球信息
Dim blue(1 To 100) As Integer '用于存储100*1蓝色球信息
Private Sub Form_Load()
'本过程用于从数据库data. accdb中读取最近100期双色球开奖信息
'将100*6个红色球开奖信息依次存储在数组red()中
'将100*1个蓝色球开奖信息依次存储在数组blue()中
'将最近100期开奖信息格式化后显示在列表框List1中
'本过程代码略
End Sub
Private Sub Command1_Click()
Dim min As Integer
Dim s As string
Dim f(1 To 33)As Integer
'——以下开始处理蓝色球部分——
For b= 1 To 100
f(blue(b))= f(blue(b))+1
Next b
min= 100
For i= 1 To 16
If f(i)< min Then min f(i)
Next iFor i=1 To 16
If f(i)= min then s= ①_______
f(i)=0Next i
List2. Additem"蓝色球重点买人:"十s
'——以下开始处理红色球部分——
For r=1 To 600
②_________
Next r
③_________

(2)在某次红球部分处理时,若数组f中的,f(1)至f(33)的值依次为:
f(1)-f(11): | 6 | 8 | 20 | 25 | 16 | 21 | 14 | 20 | 24 | 28 | 26 |
f(12)-f(22): | 1 | 30 | 8 | 1 | 10 | 10 | 33 | 28 | 32 | 20 | 6 |
f(23)-f(33): | 4 | 34 | 29 | 18 | 25 | 30 | 4 | 13 | 30 | 20 | 6 |
结合加虚线框处代码的算法,输出的内容是:
红色球重点买入:________________________.(按输出顺序写出6个红球号码)。
有如下VB程序段:
a(1)=91:a(2)=5:a(3)=65:a(4)=8;a(5)=78:a(6)=13:a(7)=29:a(8)=18
For i=2 To 5
If tmp <=a(M) Then R= M-1 E lse L= M+1
j=j-1
执行上述代码后,数组a中的元素分别是( )
a(1)=91:a(2)=5:a(3)=65:a(4)=8;a(5)=78:a(6)=13:a(7)=29:a(8)=18
For i=2 To 5
tmp= a(i)
L=1
R=i-1
Do While l<= R
M= Fix(L+ R)/2)If tmp <=a(M) Then R= M-1 E lse L= M+1
Loop
j=i-1
Do While j>=L
a(j+1)=a(j)j=j-1
Loop
a (L)= tmp
Next i执行上述代码后,数组a中的元素分别是( )
A.5 8 13 18 29 65 78 91 | B.5 8 65 78 91 13 29 18 |
C.91 78 65 29 18 13 8 5 | D.91 78 65 8 5 13 29 18 |
有如下ⅤB程序段:
For i=1 To 10
num=0
Fori=0 To 9
数组b各元素初始值为0,数组元素a(1)到a(10)的值依次为“68,17,24,30,36,40,55,58,61,66”,执行该程序段,num的值为( )
For i=1 To 10
b(a(i) Mod 10)= b(a(i) Mod 10)+1
b(a(i)\10)=b(a(i)\10)+1
Next inum=0
Fori=0 To 9
If b(i>num Then num b(i)
Next i数组b各元素初始值为0,数组元素a(1)到a(10)的值依次为“68,17,24,30,36,40,55,58,61,66”,执行该程序段,num的值为( )
A.2 | B.3 | C.4 | D.5 |
对用户输入的字符串进行解密的VB程序段如下:
s = Text1.Text
For i = 1 To Len(s)
ch = Mid(s, i, 1)
nk = Asc(ch) - i
If nk < 0 Then nk = nk + 127
Text2.Text = Text2.Text + Chr(nk)
已知大写字母A的ASCII码值为65,小写字母a的ASCII码值为97,在文本框Text1中输入内容“yhT5”,执行程序段后,文本框Text2显示的内容为( )
s = Text1.Text
For i = 1 To Len(s)
ch = Mid(s, i, 1)
nk = Asc(ch) - i
If nk < 0 Then nk = nk + 127
Text2.Text = Text2.Text + Chr(nk)
已知大写字母A的ASCII码值为65,小写字母a的ASCII码值为97,在文本框Text1中输入内容“yhT5”,执行程序段后,文本框Text2显示的内容为( )
A.YHt5 | B.xgS4 | C.zjW9 | D.xfQ1 |
随机产生集合{-1,1}中任意一个数的VB表达式是( )
A.Int(Rnd*2)-1 |
B.Int(Rnd*3)-1 |
C.Int(Rnd *3)\2-1 |
D.Int(Rnd *2)*2-1 |
求最长升序子序列的长度。一个数的序列bi,当b1<b2<…<bS的时候,我们称这个序列是升序的。对于给定的一个序列(al,a2,…,aN),我们可以得到一些升序的子序列(ail,ai2,…,aiK),这里1<=il<i2<……<iK<=N。比如,对于序列(1,7,3,5,9,4,8),有它的一些升序子序列,如(1,7),(3,4,8)等等。这些子序列中最长的长度是4,比如子序列(1,3,5,8),小王设计VB程序用于求最长升序子序列的长度,在文本框Text1中输入n个各不相同的数据(各数据之间以逗号隔开),单击“求解”按钮Command1后在标签Labell中输出最长升序子序列的长度,运行界面如图所示。

具体算法描述如下:
①将文本框Text1中的n个数据依次读取到数组a中;
②构造一个数组b(j),j表示升序子序列的长度,b(j)的值表示所有j长度升序序列中最小的末尾元素值。例:序列(2,6,4,5),长度为2的子序列有(2,6),(2,4),(2,5),(4,5),则b(2)=4;
③从第1个元素开始,依次处理到第i(1≤i≤n)个元素为止,b数组所能达到的最大下标值maxlen,处理过程分两种情况:
a)a(i)>b(maxlen),则最长升序子序列的长度增加;
b)a(i)<b(maxlen),则在数组b中逆序查找到第一个b(j)>a(i)(maxlen-1≤j<1),更新数组b中升序子序列长度为j+1时所存储的元素值。
以图中数据为例:

④数组b的最大下标值即为最长升序子序列的长度。
实现上述过程的VB程序如下,请回答下列问题:
(1)若在文本框Text1中输入的序列为(4,7,9,8,6),则数组元素b(2)的值为_____________。
(2)请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim a(1 To 100)As Integer存储原序列
Dim b(1 To 100)As Integer存储各长度序列的最小末尾元素
Dim s As String
Dim n As Integer,i As Integer,j As Integer,maxlen As Integer
S=Text1.Text
n=1:j=1
For i=1 To Len(s)
n=n+1
j=i+1
End If
Next i
①______
maxlen=1:b(1)=a(1)
For i=2 To n
If a(i)>b(maxlen) Then
maxlen=maxlen+1
b(maxlen) =a(i)
Else
j=maxlen-1:flag=True
Do While j>=1 And flag
If a(i)>b(i)Then
②______
flag = False
End If
j=j-1
Loop
If③______Then b(1)=a(i)
End If
Next i
Label1.Caption="最长升序子序列的长度为:"+Str(maxlen)
End Sub

具体算法描述如下:
①将文本框Text1中的n个数据依次读取到数组a中;
②构造一个数组b(j),j表示升序子序列的长度,b(j)的值表示所有j长度升序序列中最小的末尾元素值。例:序列(2,6,4,5),长度为2的子序列有(2,6),(2,4),(2,5),(4,5),则b(2)=4;
③从第1个元素开始,依次处理到第i(1≤i≤n)个元素为止,b数组所能达到的最大下标值maxlen,处理过程分两种情况:
a)a(i)>b(maxlen),则最长升序子序列的长度增加;
b)a(i)<b(maxlen),则在数组b中逆序查找到第一个b(j)>a(i)(maxlen-1≤j<1),更新数组b中升序子序列长度为j+1时所存储的元素值。
以图中数据为例:

④数组b的最大下标值即为最长升序子序列的长度。
实现上述过程的VB程序如下,请回答下列问题:
(1)若在文本框Text1中输入的序列为(4,7,9,8,6),则数组元素b(2)的值为_____________。
(2)请在划线处填入合适的代码。
Private Sub Command1_Click()
Dim a(1 To 100)As Integer存储原序列
Dim b(1 To 100)As Integer存储各长度序列的最小末尾元素
Dim s As String
Dim n As Integer,i As Integer,j As Integer,maxlen As Integer
S=Text1.Text
n=1:j=1
For i=1 To Len(s)
c=Mid(s,i,1)
If c=","Then
a(n)=Mid(s,j,i-j)n=n+1
j=i+1
End If
Next i
①______
maxlen=1:b(1)=a(1)
For i=2 To n
If a(i)>b(maxlen) Then
maxlen=maxlen+1
b(maxlen) =a(i)
Else
j=maxlen-1:flag=True
Do While j>=1 And flag
If a(i)>b(i)Then
②______
flag = False
End If
j=j-1
Loop
If③______Then b(1)=a(i)
End If
Next i
Label1.Caption="最长升序子序列的长度为:"+Str(maxlen)
End Sub
如果一个整数是另一个整数的平方,则称该数是“完全平方数”。例:4=2*2,9=3*3,所以4,9是完全平方数。下列表达式能判断整数m为完全平方数的是( )
①(Sqr(m))^2=m
②Int(Sqr(m))=Sqr(m)
③m/Int(Sqr(m))=m\Int(Sqr(m))
④Int(Sqr(m))^2=m
①(Sqr(m))^2=m
②Int(Sqr(m))=Sqr(m)
③m/Int(Sqr(m))=m\Int(Sqr(m))
④Int(Sqr(m))^2=m
A.①② | B.②③ | C.②④ | D.③④ |
有如下VB程序段:
a(1)=0:a(2)=1:a(3)=0:a(4)=1:a(5)=0
i=1
Do While i<= 2
i=i+1
执行程序段后,当前a(1)~a(5)各元素的值不可能是( )
a(1)=0:a(2)=1:a(3)=0:a(4)=1:a(5)=0
i=1
Do While i<= 2
n=Int(Rnd()*5+1)
If n > i Then
t=a(i): a(i)=a(n):a(n)=ti=i+1
End if
Loop执行程序段后,当前a(1)~a(5)各元素的值不可能是( )
A.1,0,1,0,0 | B.1,0,0,1,0 | C.0,0,1,0,1 | D.0,0,1,1,0 |
数组a为一组正整数,其奇数下标的数组元素是升序排序的奇数,偶数下标的数组元素是升序排序的偶数依据对分查找思想,设计一个在数组a中查找数据key的程序。实现该功能的VB程序段如下:
key=Val(Textl. Text):i=1:j=10
Do While i <=J
m=Int(i+j)/2+0.5)
If key Mod 2+ a(m) Mod 2= 1 Then m=m-1
If a(m)= key Then
List 1. AddIton"找到了!": Exit Do
ElseIf a(m)> key Then
j=m-2
Else
i=m+2
End If
Loop
If i>j Then List1. AddItem "未找到此数"
如果数组元素a(1)到a(10)的数据依次是“1,4,5,6,11,10,23,16,25,20”,key的值为1,则执行上述程序段,变量m依次被赋值为( )
key=Val(Textl. Text):i=1:j=10
Do While i <=J
m=Int(i+j)/2+0.5)
If key Mod 2+ a(m) Mod 2= 1 Then m=m-1
If a(m)= key Then
List 1. AddIton"找到了!": Exit Do
ElseIf a(m)> key Then
j=m-2
Else
i=m+2
End If
Loop
If i>j Then List1. AddItem "未找到此数"
如果数组元素a(1)到a(10)的数据依次是“1,4,5,6,11,10,23,16,25,20”,key的值为1,则执行上述程序段,变量m依次被赋值为( )
A.5 3 2 1 | B.6 3 2 1 | C.5 2 1 | D.6 5 2 1 |