- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 程序设计语言
- 循环结构
- 分支结构
- 顺序结构
- 类、对象、属性、方法、事件和事件处理的概念
- VB应用程序的界面设计与调试
- 基本数据类型
- 常量、变量、数组
- 常用的标准函数
- 基本运算及表达式
- 赋值语句
- + 选择语句
- 循环语句
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
有如下VB 程序段:
Private Sub Commandl_Click()
Dim d(l To 6) As Integer
Dim t As Integer
d(1)=35:d(2)=18:d(3)=63:d(4)=5:d(5)=85:d(6)=47
For i=1 To 3
t=d(j):d(j)=d(j-1):d(j-1)=t
End If
Next i
End Sub .
执行该程序段后,文本框 Textl输出的内容是( )
Private Sub Commandl_Click()
Dim d(l To 6) As Integer
Dim t As Integer
d(1)=35:d(2)=18:d(3)=63:d(4)=5:d(5)=85:d(6)=47
For i=1 To 3
For j=i+1 To 6
If d(j)<d(j-1) Thent=d(j):d(j)=d(j-1):d(j-1)=t
End If
Next j
Textl.Text=Str(d(i))+Text1.TextNext i
End Sub .
执行该程序段后,文本框 Textl输出的内容是( )
A.47 63 85 | B.35 5 18 | C.85 63 47 | D.18 5 35 |
算法设计与程序实现
换钱问题:
要将一张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
换钱问题:
要将一张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
下面程序的功能是:找出10以内的奇数中能被3整除的正整数,并将它们累加起来。为了实现这一目标,请完善下列程序:
x=0
For i=1 to 10 step ____
If _______________________ then x=x+i
Next i
x=0
For i=1 to 10 step ____
If _______________________ then x=x+i
Next i
有如下 VB 程序段:
Private Sub Command1_Click()
Dim i As Integer,s As string
s = ""
For i = 1 To 3 Step 2
s = str(f(i)) + s
Next i
Text1. Text = s
End Sub
Function f(n As Integer) As Integer
If n = 1 Then
f = 2
Else
f = f(n - 1) + n
End If
End Function
则执行该程序段后,s 的值为( )
Private Sub Command1_Click()
Dim i As Integer,s As string
s = ""
For i = 1 To 3 Step 2
s = str(f(i)) + s
Next i
Text1. Text = s
End Sub
Function f(n As Integer) As Integer
If n = 1 Then
f = 2
Else
f = f(n - 1) + n
End If
End Function
则执行该程序段后,s 的值为( )
A.247 | B.27 | C.72 | D.742 |
(加试题)用一个6*5矩阵表示地图,分别用a数组元素表示,第1行从左到右为a(1)到a(6),依次类推,右下角为a(30)。其中数字0表示不通,数字1I表示畅通。现在要从左上角到右下角寻找一条畅通的路径。线路规则如F:
•路线每个位置只能向右或向下
•任何一个岔口优先向右走,右侧不通再向下走
•一条路线中每个位置只能走一次,不能重复
算法思路:探路过程中,记录每个位置坐标到数组lu;遇到岔路口(向右向下都通),则记录路口坐标到数组cha;遇到前方无路时,需要返回到上一个路口,标记路口右侧不通;当前方无路,岔路口数组也退回到0,说明整体不通,否则根据规则走到右下角为止,最后输出整体线路坐标。
实现算法的程序如下,运行结果如图所示。
回答下列问题:
(1)根据规则,如图迷宫矩阵正确路线的第6个位置是a数组的第_________个元素(填数字)

(2)在程序划线处填上合适代码,使程序完整。
Dim a(1 To 50) As Integer
Private Sub Command1_Click()
Dim i As Integer,j As Integer,pos As Integer
Dim cha(1 To 10)As Integer'记录一条路线中各个岔路口
Dim lu(1 To 10) As Integer’记录路线经过的位置
pos=1:j=0:lu(1)=1:i=1
Do While i <=9‘第1个和最后1个固定,中间有9个需要路过的路径点
j=j+1
_____________
End If
pos=pos+1
i=i+1
1u(i)=pos
Else If pos+6 <=30 And a(pos+6)=1 Then’向下畅通
pos=pos+6
i=i+1
lu(i)=pos
Else’坐标退回到上一个岔路口
If j=0 Then Exit Do
Do While lu(i)<>cha(j)
_____________
Loop
a(cha(j)+1)=0’标记此路口右侧不可用
_____________
j=j-1
End If;
Text1.Text=Text1.Text+Str(lu(i))
Next i
Private Sub Form_Load()
•路线每个位置只能向右或向下
•任何一个岔口优先向右走,右侧不通再向下走
•一条路线中每个位置只能走一次,不能重复
算法思路:探路过程中,记录每个位置坐标到数组lu;遇到岔路口(向右向下都通),则记录路口坐标到数组cha;遇到前方无路时,需要返回到上一个路口,标记路口右侧不通;当前方无路,岔路口数组也退回到0,说明整体不通,否则根据规则走到右下角为止,最后输出整体线路坐标。
实现算法的程序如下,运行结果如图所示。
回答下列问题:
(1)根据规则,如图迷宫矩阵正确路线的第6个位置是a数组的第_________个元素(填数字)

(2)在程序划线处填上合适代码,使程序完整。
Dim a(1 To 50) As Integer
Private Sub Command1_Click()
Dim i As Integer,j As Integer,pos As Integer
Dim cha(1 To 10)As Integer'记录一条路线中各个岔路口
Dim lu(1 To 10) As Integer’记录路线经过的位置
pos=1:j=0:lu(1)=1:i=1
Do While i <=9‘第1个和最后1个固定,中间有9个需要路过的路径点
If pos Mod 6<>0 And a(pos+1)=1 Then' 向右畅通
If pos+6 <=30 and a(pos+6)=1 Then‘记录岔路口j=j+1
_____________
End If
pos=pos+1
i=i+1
1u(i)=pos
Else If pos+6 <=30 And a(pos+6)=1 Then’向下畅通
pos=pos+6
i=i+1
lu(i)=pos
Else’坐标退回到上一个岔路口
If j=0 Then Exit Do
Do While lu(i)<>cha(j)
_____________
Loop
a(cha(j)+1)=0’标记此路口右侧不可用
_____________
j=j-1
End If;
Loop
If j=0 Then
Text1.Text="没有畅通道路"Else
For i=1 To 10Text1.Text=Text1.Text+Str(lu(i))
Next i
End If
End SubPrivate Sub Form_Load()
‘生成图形矩阵的数组a各个元素,并在列表框显示,代码略
End Sub以下两个VB程序段,其中变量m和n为正整数,下列说法不正确的是( )
程序1: If m<n Then t=m:m=n:n=t End IfDo While m Mod n<>0 r=m Mod n m=n n=r Loop Text1.Text=Str(n) | 程序: 2n2 Do Whife m 程序2 Do While m<>n Do While m>n m=m-n Loop Do While n>m n=n-m Loop Loop Textl.Text=Str(n) |
A.“程序1”和“程序2”中的代码实现相同的功能 |
B.若变量m和n的值为25,35,则“程序1”代码运行后文本框Text1显示“5” |
C.“程序2”中的输出语句改为Textl.Text=Str(m),会影响文本框Textl显示的内容 |
D.若变量m和n的值为11,7,则“程序2”代码运行后文本框Text1显示“1” |
某查找算法的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 |
求最长升序子序列的长度。一个数的序列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
某算法的部分流程图如图所示,若n输入的值为0,则变量n,s的值分别是( )

A.21,85 | B.18,64 | C.24,85 | D.18,46 |
小明编写了一个矩阵转换程序,功能如下:单击“生成”按钮Commandl后,在列表框listl中生成1-16顺序矩阵,单击“转换”按钮Command2后,在列表框list2中生成转换后的矩阵。转换的算法如下:
(1)改变列的位置:原矩阵第3列变为新矩阵的第1列,原矩阵第1列变为新矩阵第2列,原矩阵第4列变为新矩阵第3列,原矩阵第2列变为新矩阵第4列。
(2)改变行的位置:经过(1)处理后的矩阵的第1行和第4行交换,第2行和第3行交换。
实现上面的功能,程序运行界面如图所示。

实现上述功能的程序如下,请在程序划线处填入合适的语句或代码。
Dim sc(1 To 16)As Integer ′生成矩阵
Dim zh(1 To 16)As Integer ′转换矩阵
Private Sub Commandl_Click()
′在列表框 listl 中生成4*4矩阵sc,代码略
End Sub
Private Sub Command 2_Click()
Dim pb As Integer,tmp As Integer,i As Integer,line As String
For i=1 To 16 ′变化列
For i=1 To 8 ′交换行
line=″″
List2.Clear
For i=1 To 16
line=adj(Str(zh(i)-3))
List2.AddItem line
End Sub
Function adj(a As String,n As Integer)As String
′adj函数的功能:在字符串a前加入适当的空格,使得a的长度为n位,代码略。
End Function
(1)改变列的位置:原矩阵第3列变为新矩阵的第1列,原矩阵第1列变为新矩阵第2列,原矩阵第4列变为新矩阵第3列,原矩阵第2列变为新矩阵第4列。
(2)改变行的位置:经过(1)处理后的矩阵的第1行和第4行交换,第2行和第3行交换。
实现上面的功能,程序运行界面如图所示。

实现上述功能的程序如下,请在程序划线处填入合适的语句或代码。
Dim sc(1 To 16)As Integer ′生成矩阵
Dim zh(1 To 16)As Integer ′转换矩阵
Private Sub Commandl_Click()
′在列表框 listl 中生成4*4矩阵sc,代码略
End Sub
Private Sub Command 2_Click()
Dim pb As Integer,tmp As Integer,i As Integer,line As String
For i=1 To 16 ′变化列
If i Mod 4=1 Then
____________________Elself i Mod 4=3 Then
pb=i-2Else
pb=pb+2End If
zh(pb)=sc(i)
Next iFor i=1 To 8 ′交换行
If___________________Then
tmp=zh(i):zh(i)=zh(i+12):zh(i+12)=tmpElse
tmp=zh(i):zh(i)=zh(i+4):zh(i+4)=tmpEnd If
Next iline=″″
List2.Clear
For i=1 To 16
If i Mod 4=1 Then
List2.AddItem lineline=adj(Str(zh(i)-3))
Else
___________________End If
Next iList2.AddItem line
End Sub
Function adj(a As String,n As Integer)As String
′adj函数的功能:在字符串a前加入适当的空格,使得a的长度为n位,代码略。
End Function