- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 算法实例
- 面向对象程序设计 VB开发工具
- 算法实例的程序实现
- 算法及算法的表示方法
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
•将地理上某点经纬度分别转换成二进制编码。例如,对于给定纬度lat(299924099),编码规则为:
•将区间[-90,90]二分为[-90,0),[0,90],称为左、右区间,1at属于右区间[0,90],标记为1;
•将区间[0,90]二分为[0,45),[45,90],lat属于左区间[0,45),标记为0;
•重复上述过程,不断划分区间,lat属于左区间则记录0,属于右区间则记录1。直到达到指定编码长度 length(一般为5的倍数)为止类似地,可对经度lng(120.58552218进行二进制编码。
·Base32编码合成为地理区域字符串。以编码长度 length=10为例,如前述计算得到,鲁迅故里的纬度编码为10101 01010,经度编码为11010 10110。地理区域字符串生成规则:
•生成新串:奇数位放经度,偶数位放纬度,将两串编码组合:110110 11001 10011 01100;
•分组转换:将11100 11001 10011 01100每5位一组转成1个十进制整数,分别对应为28,25,19,12;
•Base32编码:使用数字0~9、小写字母(去掉字母a,i,1,o)这32个字符进行Base32编码(见下表)。十进制整数28,25,19,12对应的编码组合就是“wtmd”,即为该位置的地理区域字符串。

(1)规定编码长度 length为5,经度lng为120.125 082 58,则经度lng的二进制编码为__________。
(2)小沈根据上述描述,设计了一个“利奇马”台风中心途经经纬度转换为地理区域字符串的算法。该算法VB程序实现如下,请在划线处填入合适的代码
Const m=48, length=20'纬度、经度二进制编码长度均为 length
Dim a(1 To 2.* m)As Double
Dim b(1 To m) As string
′读取m个时刻台风中心的经纬度数据并存入数组a,代码略'a(1),a(2)为台风在时刻1的纬度、经度,a(3),a(4)为台风在时刻2的纬度和经度,......
′b(1)保存台风在时刻1的地理区域字符串,b(2)保存台风在时刻2的地理区域字符串,......
Private Sub Command1 _ Click()
′1at为纬度、1ng为经度,code为地理区域编码
Dim lat As double, Ing As Double, code As String
Dim strLat As String, strLng As String, s As String
Dim i As integer, j As Integer, n As Integer
Const base32="0123456789bcdefghjkmnpqrstuvwxyz"
For i=1 To m
lat=a(2*i-1)Ing=a(2*i)
S=""
strLat= DoubleToBits (lat,—90,90) ′纬度转换为二进制
编码
strLng=DoubleToBits(lng,—180,180) ′经度转换为二进制
编码
For j=1 To length
s=①________ ′将两串二进制编码
组合
Next j
n=0: code=""
For j=1 To Len(s)
②___________
If j Mod 5=0 Then
code= code+Mid(base32,n+1,1)
n=0
End If
Next j
b(i)=code
Next i
′输出地理区域编码,代码略
End sub
′函数 Doubletobits根据指定的区间[ lower,upper],计算 value的二进制编码
Function Double ToBits( value As Double,lower As Double, upper As Double) As String
Dim ret As String, i As Integer, middle As Double
ret="":i=1: middle=0
Do While i<= length
middle=(upper+lower)/2
If③_________Then
lower=middleret=ret十"1"
Else
upper=middleret t+"0
End If
i=i+1
Loop
DoubleToBits=ret
End function

(1)要使程序运行时,标签框Labell的ForeColor属性值为vbRed,可在Form_Load事件处理过程中添加语句___________(单选,填字母:
A.Label1. ForeColor= vbRed/ | B.Labell. vbRed= ForeColor/ | C.Fore Color. Label1=vbRed)。 |
Private Sub Command 1_ Click()
Dim n As Long, sum As Long, ans As Long
n= Val(Textl. Text)
sum=1
Do While sum <n
____________
Loop
If n =sum Then
ans=sumElseIf ___________Then
ans=sum/2
Else
ans =sum
End If
Label 1. Caption = Str(ans)
End Sub
(3)若文本框Text1中输入的内容为“24”,单击“查找”按钮,标签框 Label l中显示的内容是______________________。

(1)要使程序启动后,窗体的标题栏显示“纪念品分组”文字,可在 Form Load事件过程中添加语句 (单选,填字母:
A.Form1="纪念品分组"/ | B.Form1.Name="纪念品分组"/ | C.Form1. Caption="纪念品分组"/ | D.Fom1.Text="纪念品分组")。 |
Private Sub Command1 Click()
Dim a(l To 1000), n As Integer, w As Integer,cnt As Integer
Dim i As Integer, j As Integer, t As Integer
Dim s As String, ch As String
Dim p As Integer, q As Integer
S= Textl. Text: w =Val(text2. Text): n=0
For i=1 To Len(s)
ch=Mid(s, i, 1)
If ch="."Then
n=n+1:a(n)=t: t=0Else
t=_________①___________
End If
Next iFor i=n To 2 Step-1
For j=1 To '②
t=a(j):a(j)=a(j+1):a(j+1)=t
End If
Next jNext i
cnt= 0
p=1: q=n
Do While p<q
cnt=cnt+1
If ________③_________ Then
p=p+1:q=q-1
Else
p=p+1End If
LoopIf p=q Then cnt=cnt+1
Label2 Caption- Str(cnt)
End sub
(3)若在文本框Text1中输入“50,30,100,70,80,40,50,20”,文本框Text2中输人“110”,单击“分组”按钮,标签Labe2中显示的内容是____________。
(Ⅰ)如果只有1人过桥,时间为个人过桥时间。
(Ⅱ)如果有2人一起过桥,时间以慢的人为准。
(Ⅲ)如果有3个人a、b、c,时Ta<Tb<Tc,过桥方案为让a和b起过桥,a拿手电筒回来,然后与c一起过桥。
(Ⅳ)如果存在多于3个人过桥,如a、b、…y、z需要过桥,耗时Ta<Tb<…<Ty<Tx,这时有两种可选方案,选择其中用时少的,直至剩余人数少于4人。
①最快的1个将最慢的2个分别送过桥。
a拿手电筒与z过桥,然后a拿手电筒回来与y一起过桥,a再拿手电筒回来与b一起过桥。
②最快的2个先将最慢的2个送过桥。
让a、b拿手电筒先过桥,a拿手电筒回来,让y、z拿手电筒过桥,然后b拿手电筒回来与a一起过桥。
为验证方案,小明设计了相应的VB程序。首先从数据库中获取每个人的过桥时间,并显示在列表框List1中,单击“计算”按钮 Command1,在文本框Text1中输入最短耗时,界面如下图所示。

(1)VB程序代码如下,请在划线处填入合适的代码。
Dim n As Integer ‘存放过河人数
Dim t (1 To 100) As Integer ‘存放每个人单独过桥时间
Private Sub Form _ load()
‘从数据库中读取每个人的过桥时间,显示在列表框List1中,并统计总人数n,代码略
End SubPrivate Sub Command1_Click()
Dim i As Integer, k As Integer, j As Integer, temp As Integer
Dim sum1 As Integer, sum2 As Integer, tsum As Integer
sum1 = 0:sum2 = 0:tsum=0
For i = 1 To n – 1 ‘对每个人的过桥耗时进行升序排序
k = i
For j = i + 1 To n
If ______ Then k = j
Next j
If k <> i Thentemp t(i):t(i) = t(k):t(k) = temp
End if
Next i
i=n
do while i>3
sum1=2*t(1)+t(i-1)+t(i) ‘方案①
sum2=t(1)+2*t(2)+t(i) ‘方案②
if sum1<sum2 then
tsum=tsum+sum2
end if
i=_____
Loop
If n = 1 Then ‘剩下1个人
tsum = tsum + t(1)
ElseIf n = 2 Then ‘剩下2个人
tsum = tsum + t(2)
Else ‘剩下3个人
tsum = _____
End If
Text1. Text = Srt(tsum)
End Sub
(2)如有5个人,他们单独过桥耗时(单位:s)如下图所示,则程序运行后文本框Text2中显示的最短耗时:_________(s)。

小王用VB编写了工资计算程序,当输入连续工作的最后一天的日期后,单击“计算”按钮Command1,程序自动计算工资总额,其运行界面如图所示。

实现上述功能的VB程序如下,请回答下列问题:
(1)下列选项中,属于鼠标“单击”事件的是_______。(单选,填字母:
A.DblClick/ | B.Load/ | C.Click) |
①__________
②__________
(3)加框处的代码有错误,请改正。
__________
Private Sub Command1_Click()
Dim i As Integer,j As Integer,k As Integer
Dim m As Integer,d As Integer,n As Integer
Dim md As String,sum As Integer
md = "312831303130313130313031"
n = 0
m = Val(Text1.Text)
d = Val(Text2.Text)
For i = 1 To m - 1
n = ①
Next i
n = n + d
i = 0:j = 0
sum = 0:k = 1
Do While i < n
sum =

j = j + 1
If ② Then
j = 0
k = k + 1
End If
i = i + 1
Loop
Text3.Text = Str(sum)
End Sub

(1)分析程序代码,如图里“选课组合”序号为30的组合名称为:___________________。
(2)请在划线处填入合适的代码。请回答下列问题:
Dim zh(1 To 16) As String, zrs As Integer
Dim xk(1 To1000) As String'存放同学的选课科目组合,已知学生人数少于1000人
Dim zh2(1 To 35) As String'存放35种选课科目组合
Dim rstj(1 To 35) As Integer'存放各种选课组合选课人数
Private Sub Form_ Load()
‘本过程从数据库中读取学生的选课情况数据,存放在数组xk中,学生的总人数存放在变量zrs。’代码略
End Sub
Private Sub Command l_ Click( )
Dim i As Integer,j As Integer, m As Integer, n As Integer, k As Integer
Dim km(1 To 7)As String
Listl.Clear
List1. AddIton“序号”+“” +“组合名称”
km(1)= “物”:km(2)= “化”:km(3)= “生”km(4)= “政”
km(5)= “史”km(6)= “地”:km(7)= “技”
m= 1
For i= 1 To 5
For k= i+1 To 6
zh(m)=km(i)+ km(k)
m= m+ 1
Next kNext i
j= 3:n= 1:y= j
For i= 1 To m
For k= y To 7
zh2(n)=___________________________________If n< = 9 Then
Listl. AddItem n &""&" "& zh2(n)
Else
Listl. AddItem n &" "& zh2(n)
End If
n= n+ 1
Next k
y= y+ 1
If y=8 Then
j= ___________________________ :y= j
End IfNext i
End sub
Private Sub Command2_ Click( )
Dim i As Integer
List2. Clear
List2. Additon"组合名称"+""+"选课人数”
For i= 1 To 35rstj(i)=_____________________________
List2 AddItem zh2(i)+" "+ Str (rstj (i))Next i
End Sub
Function tj (zhmc As String) As Integer'统计某种选课组合的选课人数
Dim i As Integer, rs As Integer
rs= 0
For i= I To zrs
If zhmc = xk(i) Then
rs= rs+ 1End If
Next itj= rs
End Function

(1)要使程序运行时,文本框 Text1 的文字大小 FontSize 属性值设置为 12,可在 Form_Load 事件过程中添加语句__________________(单选,填字母:
A.FontSize = 12 / | B.Text1. FontSize =12 / | C.FontSize. Text1=12)。 |
Private Sub Command1_Click()
Dim a As Long, n As Integer, s As Long
Dim s1 As String, t As Long
a =Val(Text1. Text)
n =Val(Text2. Text)
If a < 1 Or a > 9 Then
List1. AddItem "输入 a 的值无效"
ElseIf n < 1 Or n > 9 Then
List1. AddItem "输入 n 的值无效"
Else
s = a: t = a
s1 =Str(t)
List1. AddItem s1 +"=" + Str(s)
i = ①__________
Do While i <= n
②__________
s = s + t
s1 = s1 + "+" +Str(t)
List1. AddItem s1 + "=" + Str(s)
③__________
Loop
End If
End Sub

现上述功能的 VB 程序如下,请回答下列问题:
(1)学生选课的编码数据存储在数据表中,其字段名为__________________。
(2)请在划线处填入合适的代码。
Dim ach(1 To 500) As String '存储各学生选课编码
Dim bno(1 To 10) As Integer '存储各科目编号
Dim bname(1 To 10) As String '存储各科目名称
Dim bnum(1 To 10) As Integer '存储各科目被选次数
Dim bmc(1 To 10) As Integer '存储各科目被选的名次
Dim n As Integer, num As Integer
Private Sub Command1_Click()
Dim i As Integer, km As String
km = "物理化学生物政治历史地理技术"
Dim cn As New ADODB. Connection, rs As New
ADODB. Recordset, sql As String
cn. Open "provider=Microsoft. Jet. oledb. 4. 0;Data Source =" + App. Path + " \students. mdb"
rs. Open "select ∗ from choose", cn
Do While Not rs. EOF
n = n + 1 : ach(n) = rs. Fields("subject") : rs. MoveNext
Loop
rs. Close: cn. Close
Set rs = Nothing
Set cn = Nothing
For i = 1 To 7
bno(i) = i: bname(i) = Mid(km, (i - 1) ∗2 + 1, 2)
List2. AddItem Str (bno (i)) + " - - -" +bname(i)
Next i
End Sub
Private Sub Command2_Click()
Dim i As Integer, j As Integer, k As Integer
Dim c As String, per As Integer
For i = 1 To n
If check(ach(i)) =True Then
For j = 1 To 3
c = Mid(ach(i), j, 1)
bnum(Val(c)) = ①_________
Next j
num = num + 1
End If
Next i
i = 1
Do While i <= 7 '该循环得到各学科被选人数的名次
bmc(i) = 1
For j = 1 To 7
If bnum(j) > bnum(i) Then ②__________
Next j
i = i + 1
Loop
For i = 1 To 7
For j = 1 To 7
If ③_________Then
per = Int(bnum(j) ∗ 100 / num ∗ 100)/ 100
List3. AddItem Str(bno(j)) + "---" +bname(j) + "---" + Str(per) + "%"
End If
Next j
Next i
End Sub
Function check(s As String) As Boolean
'代码略,若学生选科代码有效,函数返回 True,否则返回 False
End Function

请回答下列问题
(1)要使程序运行后,命令按钮 Command1的 Caption属性值自动变为“排序”,可在_____(单选,填字母:
A.Text1 Cick()/ | B.Fom_Load()/ | C.Command1_Cick())事件过程中添加语句:Command1 Caption=“排序”。 |
Const n = 10
Dim a(1 To n) As Integer
Private Sub Form Load ()
‘数组初始化,生成1~20之间的随机整数并赋值给数组a
Randomize '随机数初始化
For i=1 To n
a(i) =①_______
Next i
End Sub
Private Sub Command1 _Click()
Dim 1 As Integer, j As Integer, t As Integer
Dim bottom As Integer
bottom = n
For i=1 To bottom -1
For j = bottom To i + 1 Step -1
If ②_______ Then
t = a(j):a(j) = a(i):a(i) = t
ElseIf a(j) = a(i) Then
③_______
bottom = bottom -1
End if
Next j
Next i
Text2. text = ""
For i=1 to bottom
Text2. Text = Text2. Text + str(a(i))
Next i
End sub
换钱问题:
要将一张100元的钞票,换成等值的5元、2元、1元一张的钞票共50张。其中一种换法如下:
5元:3张
2元:38张
1元:9张
求出所有的换钱方案。
(算法设计)
x表示5元的张数:1≦x≦20;
y表示2元的张数:1≦y≦50;
z表示1元的张数:1≦z≦100。
(参考程序)
Dim x AsInteger
Dim y AsInteger
Dim z As Integer
For x=1 To20
For y=1To 50
Forz=1 To 100
If ______________Then
Print x;y;z ’x y z 之间以分号分隔
End If
Nextz
Next y
Next x
根据上述回答下列问题:
(1)本题采用的算法是_____________(填:解析法/枚举法/排序法/递归法)。
(2)程序代码中空白处应填写的条件是_______________(填写字母:A/B/C/D)。
A 5x + 2y + z=100 Or x+ y + z = 50
B 5x + 2y + z=100 And x + y + z = 50
C 5*x + 2*y + z=100 Or x + y + z = 50
D 5*x + 2*y + z=100 And x + y + z = 50