- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 算法实例
- 面向对象程序设计 VB开发工具
- + 算法实例的程序实现
- 过程和自定义函数
- 枚举算法及程序实现
- 解析算法及程序实现
- 递归算法及程序实现
- 排序算法及程序实现
- 查找算法及程序实现
- 算法及算法的表示方法
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
有如下所示VB程序段:
If t Mod 2 = i Mod 2 Then
t = t + 1
Else
t = t + 2
End If
s = s + Mid(str1,t,1)
str1 = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”
s = “”
For i = 1 To 4
t = Int(Rnd*10) + 1If t Mod 2 = i Mod 2 Then
t = t + 1
Else
t = t + 2
End If
s = s + Mid(str1,t,1)
Next i
List1.AddItem s
执行该程序段后,列表框Listl中可能显示的内容是( )A.BADC | B.BCDY | C.DEFG | D.CDEF |
二分查找又称折半查找,是一种应用于有序数列的高效查找算法。下列数列中适合二分查找算法的是( )
(1)11 99 5 17 2 39
(2)30 52 63 71 78 81
(3)67 62 68 6 15 15
(4)85 78 59 53 19 18
(1)11 99 5 17 2 39
(2)30 52 63 71 78 81
(3)67 62 68 6 15 15
(4)85 78 59 53 19 18
A.(3)(4) | B.(2)(3) | C.(1)(2) | D.(2)(4) |
数据的有损压缩:对多媒体数据进行有损压缩时,以少量数据丢失作为代价的,比如对某8 bit量化缩为6 bit量化,其算法可简单表示为:逐一删除各个字节的后2 bit,将删除后的6 bit数据首尾相连,然后重新按照8 bit一组构建字节,以十六进制显示。
例如,压缩前的原始数据为:
11111100 010111010 10110000可表示为十六进制:FC 5A B0
删除每字节的后2 bit:
111111 00 010110 10 101100 00
首尾相连构建新的数据:
11 11110101 10101100表示为十六进制:…F5 AC
自此,原数据进行了有损压缩。程序运行界面如下所示,

实现上述算法的VB程序如下,但程序中加框处有误,请改正。
Dim a(1 To 100) As Integer
Const code="0123456789ABCDEF"
Const n=100
Private Sub Form_Load()'以随机数模拟读取原始数据
s=""
Randomize
For i=1 To n
End sub
Private Sub Command1_Click()
For i=1 To n
For j=l To n* 4 Step 8 '每8位一组每8位一组,取前6个字符
For i=1 To 4 *(n-1) Step 4 '每4位一组转为十六进制显示
Text2.Text= Text2.Text +BtoH (Mid(s,1,4))
Next i
End sub
Function HtoB (x As Integer) As String '十六进十六进制转为二进制函数
t=""
m=0
Do While
'②
HtoB=Mid("0000",1,4-m)+t
End Function
Function BtoH (y As String) As String '二进制转为十六进制函数
t1=Val(Mid(y,4,1))
t2=Val(Mid(y,3,1))
t3=Val(Mid(y,2,1))
t4=Val(Mid(y,1,1))
s=t1+t2*+t3*4+t4*8
BtoH= Mid(code,s+1,1)
End Function
(1)①处加框代码应改为________________________________________。
(2)②处加框代码应改为________________________________________。
例如,压缩前的原始数据为:
11111100 010111010 10110000可表示为十六进制:FC 5A B0
删除每字节的后2 bit:
111111 00 010110 10 101100 00
首尾相连构建新的数据:
11 11110101 10101100表示为十六进制:…F5 AC
自此,原数据进行了有损压缩。程序运行界面如下所示,

实现上述算法的VB程序如下,但程序中加框处有误,请改正。
Dim a(1 To 100) As Integer
Const code="0123456789ABCDEF"
Const n=100
Private Sub Form_Load()'以随机数模拟读取原始数据
s=""
Randomize
For i=1 To n
a(i)=Int (Rnd()*16)
Text1.Text=Text1.Text+ '①
End sub
Private Sub Command1_Click()
For i=1 To n
t=t+HtoB(a(i))
Next iFor j=l To n* 4 Step 8 '每8位一组每8位一组,取前6个字符
s=s+Mid(t,j, 6)
Next jFor i=1 To 4 *(n-1) Step 4 '每4位一组转为十六进制显示
Text2.Text= Text2.Text +BtoH (Mid(s,1,4))
Next i
End sub
Function HtoB (x As Integer) As String '十六进十六进制转为二进制函数
t=""
m=0
Do While

r=x Mod 2
m=m+1
t= Trim(r)+t 'trim()用于删除前导空格
x=x\2
LoopHtoB=Mid("0000",1,4-m)+t
End Function
Function BtoH (y As String) As String '二进制转为十六进制函数
t1=Val(Mid(y,4,1))
t2=Val(Mid(y,3,1))
t3=Val(Mid(y,2,1))
t4=Val(Mid(y,1,1))
s=t1+t2*+t3*4+t4*8
BtoH= Mid(code,s+1,1)
End Function
(1)①处加框代码应改为________________________________________。
(2)②处加框代码应改为________________________________________。
某对分查找算法的VB程序如下:
c=0:i=1:j=8
key=Val(Text1.Text)
f= False
Do While i<=j And Not f
m=Fix((i+j)/2+0.5)
c=c+1
If key=d(m) Then
Loop
数组元素d(1)到d(8)的值依次为“97,79,68,48,35,23,18,10”,若运行该程序段后,c的值为2,则文本框Text1中输入的值是( )
c=0:i=1:j=8
key=Val(Text1.Text)
f= False
Do While i<=j And Not f
m=Fix((i+j)/2+0.5)
c=c+1
If key=d(m) Then
f= True
Else If key>d(m) Thenj=m-1
Elsei=m+1
End IfLoop
数组元素d(1)到d(8)的值依次为“97,79,68,48,35,23,18,10”,若运行该程序段后,c的值为2,则文本框Text1中输入的值是( )
A.68或18 | B.68或23 | C.79或23 | D.79或18 |
某查找算法的VB程序段如下:
i=1:j=7:n=0
Key=Val (Text l. Text)
Do While i <=j
数组元素d(1)到d(7)存放的数值依次为6,45,23,36,78,58,12,若该程序段运行结束后,n的值为2,则Key的值是( )
i=1:j=7:n=0
Key=Val (Text l. Text)
Do While i <=j
n=n+1
m=Int ((i+j)/2)
If Key=d(m) Then Exit Do
If Key <d(m) Then j= m-1 Else i =m+ l
Loop数组元素d(1)到d(7)存放的数值依次为6,45,23,36,78,58,12,若该程序段运行结束后,n的值为2,则Key的值是( )
A.58 | B.6或12 | C.45或58 | D.23或78 |
已知数组a(1)到a(6)的原始数据为“118”,“36”,“98”,“15”,“88”,“2”,对该数组进行排序操作,某同学编写了以下VB程序:
For i=1 To 3
For j=6 To i+1 Step-1
If a(j)<a(j-1) Then
t=a(j):a(j)=a(j-1):a(j-1)=t
End if
Next j
Next i
则程序运行之后,数组a(1)到a(6)的值依次为( )
For i=1 To 3
For j=6 To i+1 Step-1
If a(j)<a(j-1) Then
t=a(j):a(j)=a(j-1):a(j-1)=t
End if
Next j
Next i
则程序运行之后,数组a(1)到a(6)的值依次为( )
A.“118”,“15”,“2”,“36”,“88”,“98” |
B.“118”,“15”,“36”,“88”,“98”,“2” |
C.“2”,“15”,“36”,“118”,“88”,“98” |
D.“2”,“15”,“36”,“88”,“98”,“118” |
a(1)=17:a(2)=16:a(3)=12:a(4)=18:a(5)=15:a(6)=13:a(7)=17:a(8)=20
i=2
Do While i <=8
If i mod 2=0 and a(i)>a(i-1)then
t=a(i):a(i)=a(i-1):a(i-1)=t
Else If a(i-1) mod 2=1 then
a(i-1)=a(i-1)+1
End If
i=i+1
Loop
执行程序后,a数组各元素是( )
i=2
Do While i <=8
If i mod 2=0 and a(i)>a(i-1)then
t=a(i):a(i)=a(i-1):a(i-1)=t
Else If a(i-1) mod 2=1 then
a(i-1)=a(i-1)+1
End If
i=i+1
Loop
执行程序后,a数组各元素是( )
A.17,16,18,12,16,14,20,18 |
B.18,16,18,12,16,14,20,17 |
C.16,17,18,12,13,16,20,17 |
D.18,16,18,12,14,15,17,20 |
数组a中存放着1到20的正整数,要求对其中的元素进行分段排序,在Text2中输入每段元素的个数,在文本框Text3中显示每段降序排序后的数据,其中多余的元素不做处理,具体界面如图所示:

实现该功能的VB程序如下,请回答下列问题:
(1)要使程序运行时,窗体Form1标题显示“数组分段排序”,可在Form_Load事件过程中添加语句_______________(单选,填字母:
(2)程序代码中的加框处有错误,请改正。
__________________________
(3)请在划线处填入合适的程序代码。
①________________________
②________________________
Dim a(0 To 100) As Integer
Const high = 16
Private Sub Form_Load()
For i = 1 To high
Randomize
a(i) = Int(Rnd ∗ 20) + 1
Text1.Text = Text1.Text + Str(a(i))
Next i
End Sub
Private Sub Command1_Click()
Dim p As Integer, q As Integer, t As Integer,m As Integer, n As Integer, k As Integer
m = Val(Text2.Text)
For i = 1 To ①
c = ""
For j = 1 To m
p=j '改错
q = i ∗ m
k = sort(p, q)
If a(k) <> a(p) Then
t = a(p): a(p) = a(k): a(k) = t
End If
c = c + Str(a(p))
Next j
Text3.Text = Text3.Text + "" + c
Next i
End Sub
Function sort (f As Integer, g As Integer)As Integer
s = f
For i = f To g
If a(i) > a(s) Then
②
End If
Next i
sort = s
End Function

实现该功能的VB程序如下,请回答下列问题:
(1)要使程序运行时,窗体Form1标题显示“数组分段排序”,可在Form_Load事件过程中添加语句_______________(单选,填字母:
A.Form1. Caption=“数组分段排序”/ | B.Form1. Text=“数组分段排序”/ | C.Text1. Text=“数组分段排序”)。 |
__________________________
(3)请在划线处填入合适的程序代码。
①________________________
②________________________
Dim a(0 To 100) As Integer
Const high = 16
Private Sub Form_Load()
For i = 1 To high
Randomize
a(i) = Int(Rnd ∗ 20) + 1
Text1.Text = Text1.Text + Str(a(i))
Next i
End Sub
Private Sub Command1_Click()
Dim p As Integer, q As Integer, t As Integer,m As Integer, n As Integer, k As Integer
m = Val(Text2.Text)
For i = 1 To ①
c = ""
For j = 1 To m
p=j '改错
q = i ∗ m
k = sort(p, q)
If a(k) <> a(p) Then
t = a(p): a(p) = a(k): a(k) = t
End If
c = c + Str(a(p))
Next j
Text3.Text = Text3.Text + "" + c
Next i
End Sub
Function sort (f As Integer, g As Integer)As Integer
s = f
For i = f To g
If a(i) > a(s) Then
②
End If
Next i
sort = s
End Function
查找最短26个字母字符串: 在文本框Text1中输入任意一串仅包含小写字母的字符串(长度n>=26),要求找到长度最小的一段区间,能够包含全部26个小写英文字母。小王设计了VB程序用于搜索最短字符串,单击“查找”按钮 Command1,若无解,则在标签 Label1中输出“无解!”,反之程序在标签 Labell中输出该最小区间的长度以及字符的开始位置,并在文本框Text2中输出相应的最短字符串,程序界面如图所示。
查找最短26个字母字符串的算法可描述为:
1)确定初始右边界: 从第1个字符开始,向右搜索到包含全部26个字母的子串,并因此而确定右边界,同时记录每个字母在子串中出现过的次数。
2)调整子串左边界: 若左边界有重复的字母则表明该子串可缩短,故左边界可右移1位,……直到找到一个符合条件的子串并记录,然后子串左边界再右移1位。
3)调整子串右边界: 子串右边界继续右移,在新子串符合条件后,记录并进行比较。重复2)各调整步骤,直至遍历完整个字符串,获得并输出满足条件的最小长度字符串。
实现上述功能的VB程序如下,请回答下列问题:
(1)对于字符串“ qbwcadsgeqbdatcy”,包括字母 abcde的最短字符串长度为___________(填数字)
(2)请在划线处填入合适的代码。
Const n=200
Dim i As Integer, k As Integer, length As Integer, L As Integer
Dim pos As Integer, sl As String, res As String
Dim f(1 To 26) As Integer '数组f记录每个小写英文字母的出现次数
Dim s(1 To n)As Integer '数组s记录每个输入字符在字母表中的位置
Private Sub Command1_ Click
Next i
k=0: pos=1: length=n
For i=1 To 26
f(i)=0
Next i
For i=1 To Len(sl)
If f(s(i))=0 Then k=k+1
f(s(i))=f(s(i))+1
Do While___________
f(s(pos))=f(s(pos))-1
If______________Then
k=k-1
If i-pos+1<length Then
length=i-pos+1
res=Mid (sl, pos, length)
L=pos
End If
End If
pos=pos+1
Loop
Next i
If res<>""Then
查找最短26个字母字符串的算法可描述为:
1)确定初始右边界: 从第1个字符开始,向右搜索到包含全部26个字母的子串,并因此而确定右边界,同时记录每个字母在子串中出现过的次数。
2)调整子串左边界: 若左边界有重复的字母则表明该子串可缩短,故左边界可右移1位,……直到找到一个符合条件的子串并记录,然后子串左边界再右移1位。
3)调整子串右边界: 子串右边界继续右移,在新子串符合条件后,记录并进行比较。重复2)各调整步骤,直至遍历完整个字符串,获得并输出满足条件的最小长度字符串。

实现上述功能的VB程序如下,请回答下列问题:
(1)对于字符串“ qbwcadsgeqbdatcy”,包括字母 abcde的最短字符串长度为___________(填数字)
(2)请在划线处填入合适的代码。
Const n=200
Dim i As Integer, k As Integer, length As Integer, L As Integer
Dim pos As Integer, sl As String, res As String
Dim f(1 To 26) As Integer '数组f记录每个小写英文字母的出现次数
Dim s(1 To n)As Integer '数组s记录每个输入字符在字母表中的位置
Private Sub Command1_ Click
res=" "
s1=Textl. Text
For i=1 To Len(s1)
s(i)= _____________Next i
k=0: pos=1: length=n
For i=1 To 26
f(i)=0
Next i
For i=1 To Len(sl)
If f(s(i))=0 Then k=k+1
f(s(i))=f(s(i))+1
Do While___________
f(s(pos))=f(s(pos))-1
If______________Then
k=k-1
If i-pos+1<length Then
length=i-pos+1
res=Mid (sl, pos, length)
L=pos
End If
End If
pos=pos+1
Loop
Next i
If res<>""Then
Text2 Text=res
Labell. Caption="最短长度: "+Str( length)+"开始位置: "+Str(L)Else
Labell. Caption="无解!"
End if
End Sub星期天,小杰来到动物园游玩,园内共有 N 个景点,每个景点都有一个标号,标号为 1 至 N。现在只知道每个景点均有一条路连接下一个景点。小杰想知道,根据这些道路信息,从其中一个景点出发,最后再回到出发景点,最多能游玩多少个景点。
例如,共有 N=5 个景点,每个景点连接的下一个景点分别是2,4,5,5,2,
则他可以从 2 号景点出发,最多可以游玩 2号、4号、5号三个景点。

程序代码如下:
Private Sub Command1_Click()
Dim a(1 To 100) As Integer , d(1 To 100) As Integer '数组 a 存放下一景点号
Dim jd As String, m As String,c As Integer,I As Integer
Dim s As Integer, p As Integer,k As Integer,ans As Integer
jd=Text1. Text+","
s=0 : c=0
For i=1 To Len(jd)
m=Mid(jd,i,1)
If m<>"," Then
s=s∗10+Val(m)
Else
c=c+1 :a(c)=s : s=0 '含义
End If
Next i
ans=0:k=0
For i=1 To c '枚举游览起点
For k=1 To c
d(k)=0
Next k
If d(i)=0 Then
p=i
Do While p<=c
If d(p)=0 Then
k=k+1 :d(p)=k
Else
y= ① '填空
If y>ans Then ans=y
k=0
Exit Do
End If
'改错
Loop
End If
Next i
Text2. Text=Str(ans)
End Sub
(1)若要实现显示“景点连接情况:”的 Text1 在程序运行时默认为空,则需要将 Text1 的_________________属性设置为空。
(2)若有 7 个景点,且每个景点的连接情况为 6,3,7,2,7,5,4,那么小杰最多可以游玩的景点数是_________________。
(3)程序代码中,有下划线的语句“a(c)= s”代表的含义为___________________________。
(4)程序代码中,在①处填空:y=_____________________。
(5)程序代码中,加框处代码有错,请改正:__________________________________。
例如,共有 N=5 个景点,每个景点连接的下一个景点分别是2,4,5,5,2,
景点号 | 1 | 2 | 3 | 4 | 5 |
下一景点号 | 2 | 4 | 5 | 5 | 2 |
则他可以从 2 号景点出发,最多可以游玩 2号、4号、5号三个景点。

程序代码如下:
Private Sub Command1_Click()
Dim a(1 To 100) As Integer , d(1 To 100) As Integer '数组 a 存放下一景点号
Dim jd As String, m As String,c As Integer,I As Integer
Dim s As Integer, p As Integer,k As Integer,ans As Integer
jd=Text1. Text+","
s=0 : c=0
For i=1 To Len(jd)
m=Mid(jd,i,1)
If m<>"," Then
s=s∗10+Val(m)
Else
c=c+1 :a(c)=s : s=0 '含义
End If
Next i
ans=0:k=0
For i=1 To c '枚举游览起点
For k=1 To c
d(k)=0
Next k
If d(i)=0 Then
p=i
Do While p<=c
If d(p)=0 Then
k=k+1 :d(p)=k
Else
y= ① '填空
If y>ans Then ans=y
k=0
Exit Do
End If

Loop
End If
Next i
Text2. Text=Str(ans)
End Sub
(1)若要实现显示“景点连接情况:”的 Text1 在程序运行时默认为空,则需要将 Text1 的_________________属性设置为空。
(2)若有 7 个景点,且每个景点的连接情况为 6,3,7,2,7,5,4,那么小杰最多可以游玩的景点数是_________________。
(3)程序代码中,有下划线的语句“a(c)= s”代表的含义为___________________________。
(4)程序代码中,在①处填空:y=_____________________。
(5)程序代码中,加框处代码有错,请改正:__________________________________。