第五章 数 组
本章要求:
1.掌握数组的概念
2.掌握数组(一、二维)的定义及其引用,
3.掌握控件数组的建立及使用。
本章 重点:
数组定义及引用方法,与数组有关的一些常用算法
本章 难点:
与数组有关的一些常用算法
输入 10个数, 输出它们的平均值及大于平
均值的那些数?
输入 A
当 N<=10
N=N+1
打印 Ave
S=0,N=1
S=S+A
Ave=S/10
Dim N%,S!,A!,Ave!
For N=1 to 10
A=Val(InputBox(“Enter A
Number”))
S=S+A
Next N
Ave=S/10
Print Ave
引例
如果使用,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10
Dim N%,S!,Ave!,A1!,A2! …,,A10! ? 实际程序是不能
这样写
A1=Val(InputBox(“Enter A1 Number”))
A2=Val(InputBox(“Enter A2 Number”))
A3=Val(InputBox(“Enter A3 Number”))
A4=Val(InputBox(“Enter A4 Number”))
A5=Val(InputBox(“Enter A5 Number”))
A6=Val(InputBox(“Enter A6 Number”))
A7=Val(InputBox(“Enter A7 Number”))
A8=Val(InputBox(“Enter A8 Number”))
A9=Val(InputBox(“Enter A9 Number”))
A10=Val(InputBox(“Enter A10 Number”))
S=A1+A2+A3+A4+A5+A6+A7+A8+A9+A10
Ave=S/10
IF A1>Ave Then Print A1
IF A2>Ave Then Print A2
IF A3>Ave Then Print A3
IF A4>Ave Then Print A4
………,,
? 实际程序是不能这样写
思考:
如果能使用 Ai ( i=1,2,…,.10 ) 的形式?
使用循环来写程序
VB中表示下标变量就是通过定义数组来实现的。
5.1 一维数组
数组的概念,数组并不是一种数据类型,而是
一组相同类型数据 的集合。用一个统一的名字( 数
组名) 代表逻辑上相关的一批数据,每个元素用 下
标变量 来区分;下标变量代表元素在数组中的位置 。
VB中数组的表示形式:
A(1),A(10) ? 一维数组
X(1,1),X(2,10) ? 二维数组
Y(0,0,0),Y(1,2,5) ? 三维数组
5.1 一维数组
Visual Basic中的数组分类:
?按数组的大小 ( 元素个数 ) 是否可以改变来分为:
定长数组, 动态 ( 可变长 ) 数组 。
?按元素的数据类型可分为:
数值型数组, 字符串数组, 逻辑数组,
日期型数组, 变体数组等, 对象数组 。
?按数组的维数可分为:
一维数组, 二维数组, 多维数组 。
5.1 一维数组
Dim 数组名 ([<下界 >to]<上界 >)[As <数据类型 >]
或,Dim 数组名 [<数据类型符 >]([<下界 >to]<上界 >)
例,Dim a(1 to 10) As Integer ? 声明了 a数组有 10个元素
与上面声明等价形式,Dim a%(1 to 10)
1是下标的下界 10是下标的上界
数组元数的数据类型
5.1 一维数组
2,数组的声明
说明:
1,数组名的命名规则与变量的命名相同 。
2,数组的元素个数,上界 -下界 +1。
3,缺省 <下界 >为 0,若希望下标从 1开始, 可在模块的通用
部分使用 Option Base语句将设为 1。 其使用格式是:
Option Base 0|1 ? 后面的参数只能取 0 或
1
例如:
Option Base 1 ? 将数组声明中缺省 <下界 >下标设为
1
5.1 一维数组
4.数组中所有元素都有相同的数据类型 。 如果类型不同,
则声明时必须将其数据类型定义为 Variant。
5 参数 index的个数决定数组的维数。各参数间用逗号
分隔。参数可以是简单的数值表达式
例如,aa(4)
也可以是由关键字 To组成的表达式
例如,sd( 1 To 10)
5.1 一维数组
数组名 (下标 )
3,数组元素的引用
例如, 定义一个数组, 并分别给每一元素赋值 。
Dim s1 (9) As String,I As Integer
For I=0 To 9
s1 (I)=InputBox( ?请输入任何一个字符,?)
Next I
5.1 一维数组
5.2 多维数组
1,多维数组的声明
定义多维数组的格式如下:
Dim 数组名 ([<下界 >] to <上界 >,[<下界 > to ]<上界
>,…… ) [As <数据类型 >]
例如:
Dim a(5,5,5) As Integer ?声明 a是三维数组
Dim b(2,6,10,5) As Integer ' 声明 b是四维数组
2,多维数组元素的引用
多维数组元素的引用:
数组名 ( 下标 1,下标 2[,下标 3… ])
例如 声明一个字符数组,并给数组中
每一个元素赋值。
Dim array(3,3) As String
Dim row,col As Integer
For row=0 To 3
For col=0 To 3
Array(row,col)=InputBox(?请输入一个字符 ?)
Next col
Next row
5.2 多维数组
5.3动态数组
动态数组:在声明时未给出数组的大小。在程序执行时分
配存储空间。
5.3.1 动态数组的建立及使用
建立动态数组包括声明和大小说明两步:
1,在使用 Dim,Private或 Public语句声明括号内为空的
数组 。
格式,Dim | Private|Public 数组名 ( ) As 数据类型
例,Dim a() As Integer
2,在过程中用 ReDim语句指明该数组的大小 。
格式,ReDim [Preserve] 数组名 ( 下标 1[,下标 2… ])
Preserve参数:保留数组中原来的数据
5.3动态数组
说明:
( 1) ReDim语句是一个可执行语句, 只能出现在过程中,
并且可以多次使用, 改变数组的维数和大小 。
( 2)定长数组声时中的下标只能是常量,而动态数组
ReDim 语句中的下标是常量,也可以是有了确定值的变量。
(3) Preserve为可选的关键字, 当改变原有数组最末维
的大小时, 使用此关键字可以保持数组中原来的数据 。
例,Redim A(10)
Redim Preserve A(20)
5.3动态数组
( 4)在过程中可以多次使用 ReDim来改变数组的大小,也
可改变数组的维数。
例,ReDim x(10)
ReDim x(20)
x(20) = 30
Print x(20)
ReDim x(20,5)
x(20,5) = 10
Print x(20,5)
5.4使用数组程序举例
【 例 5.1】 数组 address(100,1)保存着 101个学生的姓名及其家
庭住址, 要求随意输入一个姓名, 能够输出其对应的家庭住址 。
Dim name As String,address(100,1) As String
Dim I As Integer
Name=InputBox(?请输入查询的姓名, ?,?数据输入 ?)
For I=0 To 100
If address(I,0)=name Then
MsgBox name+ ?的家庭住址是, ?+ address(I,1)
End If
Next I
End Sub
5.4使用数组程序举例
【 例 5.2】 输入两个数 a和 b,根据不同的运算符( +,-,*,/)进
行运算。
5.4使用数组程序举例
代码如下:
Private Sub Command1_Click(Index As Integer)
Dim a As Single,b As Single,c As Single
a= Val(Text1.Text)
b= Val(Text2.Text)
Select Case Index
Case 0 '加
c = a + b
Label3.Caption = "结果,a+b=" + Str(c)
Case 1 '减
c = a - b
Label3.Caption = "结果,a-b=" + Str(c)
Case 2 '乘
c = a * b
Label3.Caption = "结果,a*b=" + Str(c)
Case 3 '除
If b = 0 Then
MsgBox "除数不能为 0!",48,"提示 "
Exit Sub
End If
c = a / b
Label3.Caption = "结果,a/b=" + Str(c)
End Select
End Sub
5.4使用数组程序举例
【 例 5.3】 设计一程序,要求能够动态完成窗体的建立 。
操作步骤如下,
① 将标签控件的名称属性设为 Labels,index属性设置
为 0,Alignment属性设置为 1( 右对齐 ) 。
② 将文本框控件的名称属性设为 Textboxes,index属性
设置为 0。
③ 将两控件的 visible属性设置为 False。
④ 在窗体中绘制一命令按钮,名称属性设为 Command1,
其 Click事件代码如下所示:
5.4使用数组程序举例
Private Sub Command1_Click()
Dim i As Integer
Dim captions(6) As String
Dim sizes(6) As Integer
captions(1) = ?姓名 ?
captions(2) = ?性别 ?
captions(3) = ?民族 ?
captions(4) = ?家庭地址 ?
captions(5) = ?联系电话 ?
sizes(1) = 20
sizes(2) = 30
sizes(3) = 40
sizes(4) = 15
sizes(5) = 12
5.4使用数组程序举例
For I = 1 To 5
Load Labels(i)
Load Textboxes(i)
Labels(i).Top = Labels(I – 1).Top+1.5?_
Labels(0).Height
Labels(i).Left = Labels(0).Left
Textboxes(i).Top=Textboxes(I-1).Top+1.5?_
Textboxes(i).Height
Textboxes(i).Left = Textboxes(0).Left
Textboxes(i).Width = sizes(i) ? TextWidth(?A?)
Labels(i).Caption = captions(i)
Labels(i).Visible = True
Textboxes(i).Visible = True
Next
End Sub
5.4使用数组程序举例
运行程序后,窗体如图 5.4所示,单击按钮后,窗体如图 5.5所示。
图 5.4
图 5.5
5.4使用数组程序举例
5.4使用数组程序举例
【 例 5.5】 计算某个同学 5门课的总分,平均分。
5.4使用数组程序举例
事件代码如下,
Private Sub Command1_Click()
Dim score(1 To 5) As Single
Dim i As Integer,sum As Single
Dim aver As Single,str1 As String
sum = 0
For i = 1 To 5
str1 = "请输入第 " + Str(i) + "门课的成绩
,"
score(i) = Val(InputBox(str1,"输入成绩
"))
sum = sum + score(i)
Next i
aver = sum / 5
Label1.Caption = Label1.Caption +
Str(sum)
Label2.Caption = Label2.Caption +
Str(aver)
End Sub
5.4使用数组程序举例
本章要求:
1.掌握数组的概念
2.掌握数组(一、二维)的定义及其引用,
3.掌握控件数组的建立及使用。
本章 重点:
数组定义及引用方法,与数组有关的一些常用算法
本章 难点:
与数组有关的一些常用算法
输入 10个数, 输出它们的平均值及大于平
均值的那些数?
输入 A
当 N<=10
N=N+1
打印 Ave
S=0,N=1
S=S+A
Ave=S/10
Dim N%,S!,A!,Ave!
For N=1 to 10
A=Val(InputBox(“Enter A
Number”))
S=S+A
Next N
Ave=S/10
Print Ave
引例
如果使用,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10
Dim N%,S!,Ave!,A1!,A2! …,,A10! ? 实际程序是不能
这样写
A1=Val(InputBox(“Enter A1 Number”))
A2=Val(InputBox(“Enter A2 Number”))
A3=Val(InputBox(“Enter A3 Number”))
A4=Val(InputBox(“Enter A4 Number”))
A5=Val(InputBox(“Enter A5 Number”))
A6=Val(InputBox(“Enter A6 Number”))
A7=Val(InputBox(“Enter A7 Number”))
A8=Val(InputBox(“Enter A8 Number”))
A9=Val(InputBox(“Enter A9 Number”))
A10=Val(InputBox(“Enter A10 Number”))
S=A1+A2+A3+A4+A5+A6+A7+A8+A9+A10
Ave=S/10
IF A1>Ave Then Print A1
IF A2>Ave Then Print A2
IF A3>Ave Then Print A3
IF A4>Ave Then Print A4
………,,
? 实际程序是不能这样写
思考:
如果能使用 Ai ( i=1,2,…,.10 ) 的形式?
使用循环来写程序
VB中表示下标变量就是通过定义数组来实现的。
5.1 一维数组
数组的概念,数组并不是一种数据类型,而是
一组相同类型数据 的集合。用一个统一的名字( 数
组名) 代表逻辑上相关的一批数据,每个元素用 下
标变量 来区分;下标变量代表元素在数组中的位置 。
VB中数组的表示形式:
A(1),A(10) ? 一维数组
X(1,1),X(2,10) ? 二维数组
Y(0,0,0),Y(1,2,5) ? 三维数组
5.1 一维数组
Visual Basic中的数组分类:
?按数组的大小 ( 元素个数 ) 是否可以改变来分为:
定长数组, 动态 ( 可变长 ) 数组 。
?按元素的数据类型可分为:
数值型数组, 字符串数组, 逻辑数组,
日期型数组, 变体数组等, 对象数组 。
?按数组的维数可分为:
一维数组, 二维数组, 多维数组 。
5.1 一维数组
Dim 数组名 ([<下界 >to]<上界 >)[As <数据类型 >]
或,Dim 数组名 [<数据类型符 >]([<下界 >to]<上界 >)
例,Dim a(1 to 10) As Integer ? 声明了 a数组有 10个元素
与上面声明等价形式,Dim a%(1 to 10)
1是下标的下界 10是下标的上界
数组元数的数据类型
5.1 一维数组
2,数组的声明
说明:
1,数组名的命名规则与变量的命名相同 。
2,数组的元素个数,上界 -下界 +1。
3,缺省 <下界 >为 0,若希望下标从 1开始, 可在模块的通用
部分使用 Option Base语句将设为 1。 其使用格式是:
Option Base 0|1 ? 后面的参数只能取 0 或
1
例如:
Option Base 1 ? 将数组声明中缺省 <下界 >下标设为
1
5.1 一维数组
4.数组中所有元素都有相同的数据类型 。 如果类型不同,
则声明时必须将其数据类型定义为 Variant。
5 参数 index的个数决定数组的维数。各参数间用逗号
分隔。参数可以是简单的数值表达式
例如,aa(4)
也可以是由关键字 To组成的表达式
例如,sd( 1 To 10)
5.1 一维数组
数组名 (下标 )
3,数组元素的引用
例如, 定义一个数组, 并分别给每一元素赋值 。
Dim s1 (9) As String,I As Integer
For I=0 To 9
s1 (I)=InputBox( ?请输入任何一个字符,?)
Next I
5.1 一维数组
5.2 多维数组
1,多维数组的声明
定义多维数组的格式如下:
Dim 数组名 ([<下界 >] to <上界 >,[<下界 > to ]<上界
>,…… ) [As <数据类型 >]
例如:
Dim a(5,5,5) As Integer ?声明 a是三维数组
Dim b(2,6,10,5) As Integer ' 声明 b是四维数组
2,多维数组元素的引用
多维数组元素的引用:
数组名 ( 下标 1,下标 2[,下标 3… ])
例如 声明一个字符数组,并给数组中
每一个元素赋值。
Dim array(3,3) As String
Dim row,col As Integer
For row=0 To 3
For col=0 To 3
Array(row,col)=InputBox(?请输入一个字符 ?)
Next col
Next row
5.2 多维数组
5.3动态数组
动态数组:在声明时未给出数组的大小。在程序执行时分
配存储空间。
5.3.1 动态数组的建立及使用
建立动态数组包括声明和大小说明两步:
1,在使用 Dim,Private或 Public语句声明括号内为空的
数组 。
格式,Dim | Private|Public 数组名 ( ) As 数据类型
例,Dim a() As Integer
2,在过程中用 ReDim语句指明该数组的大小 。
格式,ReDim [Preserve] 数组名 ( 下标 1[,下标 2… ])
Preserve参数:保留数组中原来的数据
5.3动态数组
说明:
( 1) ReDim语句是一个可执行语句, 只能出现在过程中,
并且可以多次使用, 改变数组的维数和大小 。
( 2)定长数组声时中的下标只能是常量,而动态数组
ReDim 语句中的下标是常量,也可以是有了确定值的变量。
(3) Preserve为可选的关键字, 当改变原有数组最末维
的大小时, 使用此关键字可以保持数组中原来的数据 。
例,Redim A(10)
Redim Preserve A(20)
5.3动态数组
( 4)在过程中可以多次使用 ReDim来改变数组的大小,也
可改变数组的维数。
例,ReDim x(10)
ReDim x(20)
x(20) = 30
Print x(20)
ReDim x(20,5)
x(20,5) = 10
Print x(20,5)
5.4使用数组程序举例
【 例 5.1】 数组 address(100,1)保存着 101个学生的姓名及其家
庭住址, 要求随意输入一个姓名, 能够输出其对应的家庭住址 。
Dim name As String,address(100,1) As String
Dim I As Integer
Name=InputBox(?请输入查询的姓名, ?,?数据输入 ?)
For I=0 To 100
If address(I,0)=name Then
MsgBox name+ ?的家庭住址是, ?+ address(I,1)
End If
Next I
End Sub
5.4使用数组程序举例
【 例 5.2】 输入两个数 a和 b,根据不同的运算符( +,-,*,/)进
行运算。
5.4使用数组程序举例
代码如下:
Private Sub Command1_Click(Index As Integer)
Dim a As Single,b As Single,c As Single
a= Val(Text1.Text)
b= Val(Text2.Text)
Select Case Index
Case 0 '加
c = a + b
Label3.Caption = "结果,a+b=" + Str(c)
Case 1 '减
c = a - b
Label3.Caption = "结果,a-b=" + Str(c)
Case 2 '乘
c = a * b
Label3.Caption = "结果,a*b=" + Str(c)
Case 3 '除
If b = 0 Then
MsgBox "除数不能为 0!",48,"提示 "
Exit Sub
End If
c = a / b
Label3.Caption = "结果,a/b=" + Str(c)
End Select
End Sub
5.4使用数组程序举例
【 例 5.3】 设计一程序,要求能够动态完成窗体的建立 。
操作步骤如下,
① 将标签控件的名称属性设为 Labels,index属性设置
为 0,Alignment属性设置为 1( 右对齐 ) 。
② 将文本框控件的名称属性设为 Textboxes,index属性
设置为 0。
③ 将两控件的 visible属性设置为 False。
④ 在窗体中绘制一命令按钮,名称属性设为 Command1,
其 Click事件代码如下所示:
5.4使用数组程序举例
Private Sub Command1_Click()
Dim i As Integer
Dim captions(6) As String
Dim sizes(6) As Integer
captions(1) = ?姓名 ?
captions(2) = ?性别 ?
captions(3) = ?民族 ?
captions(4) = ?家庭地址 ?
captions(5) = ?联系电话 ?
sizes(1) = 20
sizes(2) = 30
sizes(3) = 40
sizes(4) = 15
sizes(5) = 12
5.4使用数组程序举例
For I = 1 To 5
Load Labels(i)
Load Textboxes(i)
Labels(i).Top = Labels(I – 1).Top+1.5?_
Labels(0).Height
Labels(i).Left = Labels(0).Left
Textboxes(i).Top=Textboxes(I-1).Top+1.5?_
Textboxes(i).Height
Textboxes(i).Left = Textboxes(0).Left
Textboxes(i).Width = sizes(i) ? TextWidth(?A?)
Labels(i).Caption = captions(i)
Labels(i).Visible = True
Textboxes(i).Visible = True
Next
End Sub
5.4使用数组程序举例
运行程序后,窗体如图 5.4所示,单击按钮后,窗体如图 5.5所示。
图 5.4
图 5.5
5.4使用数组程序举例
5.4使用数组程序举例
【 例 5.5】 计算某个同学 5门课的总分,平均分。
5.4使用数组程序举例
事件代码如下,
Private Sub Command1_Click()
Dim score(1 To 5) As Single
Dim i As Integer,sum As Single
Dim aver As Single,str1 As String
sum = 0
For i = 1 To 5
str1 = "请输入第 " + Str(i) + "门课的成绩
,"
score(i) = Val(InputBox(str1,"输入成绩
"))
sum = sum + score(i)
Next i
aver = sum / 5
Label1.Caption = Label1.Caption +
Str(sum)
Label2.Caption = Label2.Caption +
Str(aver)
End Sub
5.4使用数组程序举例