数组是一组同名变量的集合。与简单变量不同的是:数组中的数据不是无规律存放的,而是按照下标的顺序存放的,在内存中占据一片连续的存储单元。只有一个下标的数组称为一维数组,具有两个或多个下标的数组称为二维数组或多维数组。在使用数组之前,必须先定义数组。
1.一维数组的定义
格式:
Public|Dim|Static
<数组名> (下标上界) [As 数据类型]
说明:
⑴Public语句表示数组为公用数组,如果希望数组为模块级数组,则在模块中通用声明处用Dim语句定义数组,如果希望数组为局部数组,则在过程中用Static或Dim语句定义数组。例如:
Public
test(4) As Integer
Dim
s(2) As Long
⑵“数组名”在程序中用来代表数组的名称。数组名遵循与变量名同样的命名规则。
⑶“下标上界”是待定义数组元素的最大下标。注意,在VB中数组的第一个元素的下标是0,即下标下界为0,所以若定义一个数组的下标上界为n,则该数组最多可以拥有n+1个元素。例如:
Public
test(4) As Integer
定义了一个下标上界是4的数组,数组中实际包含5个元素,分别为:test(0)、test(1)、test(2)、test(3)、test(4)。
在默认情况下,数组的起始下标是0,也可以强制改变数组的起始下标,使其变为1,方法是在程序代码的通用声明部分插入“Option Base
⑷“数据类型”用于指定数组元素的数据类型。如果指定了数据类型,则数组中的所有元素都具有相同的数据类型。如果未指定数组的数据类型,则默认为变体型,变体型的数组可以存放不同类型的数据元素。
⑸Visual Basic 还提供了另一种数组定义格式:
Public|Dim|Static
<数组名>(下界 To 上界) [As数据类型]
这种定义格式可以指定数组上下界,其范围可以是-32768~32767。例如:
Public
Arr(2 To 5) '数组元素为Arr(2) 、Arr(3)、Arr(4)、Arr(5)共4个元素
Public
Arr(-1 To 3) '数组元素为Arr(-1)、Arr(0)、Arr(1) 、Arr(2) 、Arr(3)
使用这种定义格式可以更好地反映对象的特性,例如:
Dim
age(18 To 40) '用来存储年龄从18岁到40岁人的数组
Dim
production(1998 To 2004) '用来存储1998年到2004年的产量的数组
2.数组的引用
数组的引用通常是指对数组元素的引用,其方法是在数组名后面的括号中指定被引用元素的下标,例如:a(2),b(1,3)数组元素与变量的用法相同,即可以被赋值也可以参加表达式的运算。例如:
a(1) = "a"
a(2) = "b"
b(1,3) = a(1) + a(2)
引用数组时应注意下标要在定义的范围内,否则会出现“下标越界”的错误。
3.数组元素的输入输出
定义数组其实是为数组安排一块连续的内存存储区,但这并不意味着内存里该数组已建立了应有的内容。
数组有上界和下界,数组元素在上下界之间是连续的,所以利用数组与循环语句的配合,可以方便地处理数组元素,从而简化程序。对数组元素值的输入、输出都采用这种方法。一般情况下,对于一维数组的输入输出采用一重循环,而对于二维数组的输入输出则采用双重循环。
⑴用InputBox函数为数组元素赋值。例如:
Dim A(5)
For i = 0 To 5
A(i)
= Val(InputBox("请输入一个数", "数组输入"))
Next i
⑵将数组元素赋值为有规律的数列。例如:
Dim A(5)
For i=0
To 5
A(i)=i
Next
i
该程序定义了一个含有6个元素的数组A,利用循环变量为数组元素依次赋值,分别为0、1、2、3、4、5。为数组元素赋值为有规律的数列,需要找出数组元素下标与循环控制变量的关系,例如,将数组元素存储为奇数数列,可以这样设计循环:
For
i=1 To n
A(i)=2*i-1
Next
i
⑶用Array()函数为数组元素赋值。
定义数组除了使用命令定义的方法,还可以利用Array()函数将变体型变量定义为数组,并直接为数组元素赋值。函数格式:
Array(元素列表)
例如:
Dim
a ‘定义变量a
a=Array(1,5,9,3,2)
此时变量a成为数组,并且有5个元素,即a(0)=1,a(1)=5,a(2)=9,a(3)=3,a(4)=2。Array()函数定义的数组起始下标会受到语句Option Base 1的影响。
注意,Array函数只适用于一维数组,即只能对一维数组进行初始化,不能对二维或多维数组进行初始化。用Array函数赋值的变量只能是变体型的变量,不可以是其它类型的变量。
⑷输出数组元素的值。例如:
For i=0 To 5
Print
A(i);
Next i
4.数组的上下界
无论定义一维或多维数组,下界都必须小于上界。如果需要知道数组的上界值和下界值,可以通过Lbound和Ubound函数来测试。格式为:
Lbound(数组名[,维])
Ubound(数组名[,维])
这两个函数分别返回一个数组中指定维的下界和上界,若两个一起使用即可确定一个数组元素个数。
对于一维数组来说,参数“维”可以省略。如果测试多维数组,则“维”不能省略。
例如:
Dim
a(10)
Print
Lbound(a), Ubound(a) ‘结果为0 10
Dim b(1
to 100, 50)
Print
Lbound(b,1), Ubound(b,1)
‘求数组b第一维的下界和上界,结果为1 100
Print
Lbound(b,2), Ubound(b,2)
‘表示求数组b第二维的下界和上界,结果为0 50
【例1】输出菲波拉契数列的前20项。菲波拉契数列的定义是数列的前两项是0和1,以后每项均为其前两项的和,即依次为0,1,1,2,3,5,8,13,21……。
Private Sub
Command1_Click()
Dim a(20) As Long
a(1) = 0 '数列第1项
a(2) = 1 '数列第2项
For i = 3 To 20 '应用循环求第3~20项
a(i) = a(i - 2) + a(i - 1) '数列第3项为前两项和
Next
For i = 1 To 20
Print a(i);
Next
End Sub
【例2】从5个数中找出最大数。
算法设计:程序应用Array函数将5个数存入数组a中。若想找出数组中最大数,令第1个数为最大数即m=a(1),利用循环将后面的数依次与m比较,若遇到大于m的数,则让m存储该数,即语句If a(j) > m Then m = a(j),循环结束后,m中存储的数一定是最大值。
程序代码:
Option
Base 1
Private
Sub Form_Click()
Dim
a
a=Array(1,3,2,7,9)
Print
m
= a(1)
For
j = 2 To 5
If
a(j) > m Then m = a(j)
Next
j
Print
"max = "; m
End Sub
程序运行结果为max= 9。
思考:如何求出最小值?

