第4章数组和字符串
五、与数组相关的几个函数
六、控件数组
七、数组应用举例
八、字符串应用
五、与数组相关的几个函数
1.Array()函数
格式:Array(arglist)
功能:对数组整体赋值,但此时只能声明Variant 的变量或仅由括号括起的动态数组。赋值
后的数组大小由赋值的个数决定。
说明:arglist 参数是一个用逗号隔开的值表,这些值用赋给数组的各个元素。
例子:Dim A As Variant
A = Array(10,20,30)
B = A(2)
创建一个Variant变量A,将一个数组赋给变量A ,将数组的第二个元素的值赋给变量B。
例12:Array函数使用的例子。
例
12
2. Ubound函数
格式:UBound(arrayname[, dimension])
功能:返回一个Long 型数据,其值为指定的数组维可用的最大下标。
说明:arrayname-必选项,数组变量的名称.
dimension-可选项,指定返回哪一维的上界。1表示第一维,2表示第二维,以此类推。如果省略dimension,就认为是1。
例子:Dim A(1 To 100, 0 To 3, -3 To 4) 语句返回值
UBound(A, 1)100
UBound(A, 2)3
UBound(A, 3)4
3. Lbound函数
格式:LBound(arrayname[, dimension])
功能:返回一个Long型数据,其值为指定数组维可用的最小下标。
说明:arrayname-必需的。数组变量的名称。
Dimension-可选的,指定返回哪一维的下界。1表示第一维,2表示第二维,以此类推。如果省略dimension,就认为是1。
例子:Dim A(1 To 100, 0 To 3, -3 To 4) 语句返回值
LBound(A, 1)1
LBound(A, 2)0
LBound(A, 3)-3
3. Split函数
格式:Split(字符串,[分隔符],[分解个数])
功能:以指定字符为分隔符,将字符串分解为若干个子字符串,并保存在一个下标从0开始的一维数组中。说明:在使用Split函数之前,要先定义一个动态数组用以存放该函数的返回值。
例子:Private Sub Command1_Click()
Dim a() As String
Dim b As Variant
a = Split("a*b*c*d*e*f", "*", 3)
For i = 0 To UBound(a)
Print a(i)
Next i
b = Split("a b
c
d
e f")
For i = 0 To UBound(b)
Print "b("; i; ")="; b(i)
Next i
End Sub例13
例14:在窗体上添加一个命令按钮和一个文本框,在文本框中输入用“,”号隔开的一组数,如:1,2,3,4,5,6,7,8,9,10
在命令按钮的单击事件中编写一段程序,将文本框中的数据依次向右移位,移位次数由键盘输入。如移位2次,则输出结果为:
9,10,1,2,3,4,5,6,7,8
例14
六、控件数组
1.控件数组的定义
控件数组是由一组相同类型的控件组成。它们共用一个控件名,绝大部分的属性也相同,但有一个属性不同,即Index属性的值不同。当建立控件数组时,系统给每个元素赋一个唯一的索引号(Index),通过属性窗口的Index属性,可以知道该控件的下标是多少,第1个元素下标是0。
控件数组最大的特点是:控件数组共享同样的事件过程。所以适用于若干个控件执行的操作相似的场合。
2.控件数组的建立
(1)在设计时建立,步骤为:
?在窗体上画出某个控件,可以进行控件名的属性设置,这是建立的第一个元素;
?选中该控件,进行copy和paste操作,系
统会提示:
“已有了命名的控件,是否要建立控件数组”
单击Yes按钮后,就建立了一个控件数组元素,进行若干次Paste操作,就建立了所需要的控件
数组;
Dim a(1 To 12) As Integer
Private Sub Command1_Click(Index As Integer)Select Case Index
Case 0
'产生12个数,在Text1(0) 中显示Case 1
'求最大值Case 2
'求最小值Case 3
'求平均值Case 4
'退出End Select
End Sub
例15:随机生成12个数,求这组数中的最大值、最小值及平均值。要求使用控件数组。
例15
(2)运行时添加控件数组,步骤为:
?在窗体上画出某控件,设置该控件的Index属性值为0,表示该控件为数组;这是建立的第一个元素;
?在编程时通过Load方法添加其余的若干个元素,也可以通过Unload方法删除某个元素;
?每个新添加的控件数组通过Left和Top属性,确定其在窗体中的位置,并将Visible属性设置为True。
例16:建立一个类似国际象棋的棋盘。要求:
设计时在窗体上放一个Label控件,其Index属性为0,BackColor属性为黑色。程序运行时产生64个Label控件数组元素,BackColor黑白交替。
例
16
七、数组应用举例
例17:求两矩阵相乘的积。
For i = 1 To 2
For k = 1 To 3
For j = 1 To 5
c(i, k) = c(i, k) + a(i, j) * b(j, k)
Next j
Print c(i, k),
Next k
Next i例
17
例18:扬辉三角形。
例
18
杨辉三角形为直角样式的代码
杨辉三角形为等腰样式的代码
排序问题
1.比较互换法排序
基本过程(以降序为例):
将第一个元素顺序与其后面的元素比较,比第一个大则进行交换,第一轮完毕后,最大的元素被挪到了第一个位置,第二轮从第二个元素开始重复上面的过程,结束后得到第二个最大的元素,如此下去经过N-1 轮的比较,可将N 个数排好
如原始数据:1,2,3,5,4 要求:降序
第一轮比较:
1 2 3 5 4
2 1
3 5 4
3 1 2 5 4
5 1 2 3 4
5 1 2 3 4第一轮结束,找到最大值5
第二轮比较:
5 1 2 3 4
5 2 1 3 4
5 3 1 2 4
5 4 1 2 3第二轮结束,找到第二最大值4