- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 程序设计语言
- 循环结构
- 分支结构
- 顺序结构
- 类、对象、属性、方法、事件和事件处理的概念
- VB应用程序的界面设计与调试
- 基本数据类型
- 常量、变量、数组
- 常用的标准函数
- 基本运算及表达式
- 赋值语句
- 选择语句
- + 循环语句
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
程序执行过程如下:程序运行后,先从数据库中获取单词,然后单击“分析单词”按钮,查找出由相回字母组成的英多单词保留下来显示,例如:获取的英文单词有:tea,pea,eta,eat,help,three,there。通过分析得知tea,eta和eat是由相同字母组成的英文单词,three和there是由相同字母组成的英文单词,则这五个英文单词保留下来,显示在label1中。如图所示:

VB部分程序如下,请将程序补充完整:
Dim wordcharsort (1 To 3000)As String'存储每个英文单词字母排序后的内容
Dim words (1 To 3000) As string'存储由相同字母组成的英文单词
Dim wordscount As Integer
Dim Getwords (1 To 3000) As String
Private Sub Form_Load()
'从数据库中获取3000个英文单词存储到数组 Getwords中,代码略
End Sub
Private Sub Command1_ Click()
Dim key As Integer
For i=1 To 3000
Wordcharsort(i)=rank(Getwords(i))Next i
For i=1 To 3000-1
k=iFor j=i+1 To 3000
If wordcharsort(j)<wordcharsort(k) Then k=j
Next j
If i<>k Then
t1= wordcharsort(i):wordcharsort(i)= wordcharsort(k):wordcharsort(k)=tl
___________
End if
Next i
For key=1 To 3000
wordscount= search( wordcharsort(key),key, wordscount)
Next key
For i=1 To wordscount
Label1. Caption= Labell. Caption+" "+words(i)
Next i
End sub
'查找相同字母组成的英文单词,存储在 words数组中
Function search(a As String, b As Integer, c As Integer)As Integer
For i=1 To 3000
flag=False
If a=wordcharsort(i) And______ ThenFor j=1 To c
If words(j)=Getwords(b) Then flag=True
Next j
If flag=False Then
Words(c)=Getwords(b)
__________
End if
End If
Next i
search=c
End function
'对英文单词中的字母进行排序
Function rank(s As String)As String
Dim c(l To 45) As String
wordscount=1
For xk=1 To 45
c(xk)=" "Next xk
For j=1 To Len(s)
c(j)= _______Next j
For k=1 To Len (s)-1For kk=Len(s) To k+1 Step-1
If Asc(c(kk))<Asc(c(kk-1))Thentmp=c(kk):c(kk)=c(kk-1):c(kk-1)=tmp
End if
Next kk
Next k
For j=1 To Len(s)
rank -rank & c(i)
Next j
End function
in=1;j=n
Do While(1)
m=(i+j)\2
If a(m)=m Then
(2)
Else(3)
End IfLoop
Labell.Caption="相邻重复两数的前、后位置余别是:"+str(i)+"和"Stri(j)"
上述程序段3个划线处(1),(2),(3)的代码分别为( )
A.(1)i+1<=j (2)i=m (3)j=m |
B.(1)i+1<j (2)i=m (3)j=m |
C.(1)i+1<j (2)i=m+1 (3)j=m-1 |
D.(1)i=j (2)i=m+1 (3)j=m-1 |
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 |
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 |

具体算法描述如下:
①将文本框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
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 |
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 |
a(1)=20: a(2)=3: a(3)=21: a(4)=37
a(5)=62: a(6)=20: a(7)=13: a(8)=33
k=Abs(a(2)-a(1))
For i=3 To 8
If Abs(a(i)- a(i-1))>k Then k= Abs(a(i)-a(i-1))
Next
执行该程序段后,变量k的值为( )
A.7 | B.17 | C.25 | D.42 |
(1)如果“-”号右边的字符按照ASCI码的顺序大于左边字符,输出时,用连续递增的字母或数字串替代其中的“-”号,例如:“c-g”输出为“cdefg”,“3-7”输出为“34567”。

(2)如果“-”号右边的字符按照 ASCII码的顺序小于或等于左边字符,输出时,保留中间的“-”号,例如:“a-a”输出为“a-a”,“4-1”输出为“4-1”。
(3)如果“-”号右边的字符恰好是左边字符的后继,则删除中间的“-”号,例如“d-e”应输出为“de”,“3-4”应输出为“34”。
某同学按照上述算法,编写了VB程序,功能如下:在文本框 Text 1中输入简写字符串,单击“展开”按钮 Command 1,程序进行字符串展开处理并显示在文本框Text 2中。程序运行界面如图所示。
(1)如果输人的简写字符串为“abs-w-Y1234-5S-4z”,则展开后的字符串为___________________。
(2)实现上述功能的VB程序如下,请在画线处填入合适代码。
Private Sub Command1_Click()
Dim stl As String, st2 As String, i As Integer
st1=Text1. Text
n=Len(st1)
st2=""
For i=1 To n
If pos(stl, i)Then<> "-" Then
st2=st2-+pos(stl, i)Else
If pos(stl, i-1)<pos(stl, i+1) ThenFor j=Asc(pos(stl, i-1))+1 To Asc(pos(stl, i+1))-1
_______________
Next j
Else
st2=st2+"-"
End If
End If
Next iText2. Text=st2
End Sub
Function pos(s As String, x As Integer) As String '返回字符串s中x位置的字符
__________________
End Function
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.j=m-1 i=m+1 a(k+1)=a(k) |
B.j=m-1 i=m+1 a(k)=a(k-1) |
C.i=m+1 j=m-1 a(k+1)=a(k) |
D.i=m+1 j=m-1 a(k)=a(k-1) |