Version 3.0
数组和结构第四章
2
回顾
基本数据类型
变量和 常量
变量和常量的 作用域
操作符和表达式
流程控制语句
3
目标
在 Visual Basic 中定义和使用数组
掌握 控件数组的基本概念及 使用
在 Visual Basic 中创建和使用自定义的数据类型
使用随机函数
4
数组
单独的变量能够存储单个数据值
数组是可以集中存储 一 组具有相同数据类型的数据项的一种结构
使用数组 的 优势:数组中的所有值都用单个名称来存储,并 可以 使用位置索引分别进行标识
5
声明数组和给数组赋值
声明数组:
例如,为存储 2 到 20 之间的偶数声明一个数组,
Dim even_arr(9) As Integer
给数组赋值:
例如,要给上面声明的数组赋值,
even_arr (0) = 2
even_arr (1) = 4
even_arr (2) = 6
… … …
even_arr (9) = 20
定义了一个共有 10个元素的整型数组
6
使用数组 –示例
Private Sub Form_Click()
Dim num(10) As Integer
Dim i As Integer
For i = 0 To 9
num(i) = i + 1
Print num(i)
Next i
End Sub
(在 VB环境中进行演示)
7
定义数组的下界
数组的下界可以不为 0
在 Dim 语句中,可以显式地指定所声明的数组的下界
示例
Dim Mynames (1 to 5) as string
可以按如下所示对该数组赋值:
Mynames(1) =“Tom”
Mynames(2) =“Joe”
Mynames(3) =“Jack”
Mynames(4) =“Lisa”
Mynames(5) =“Jeff”
8
多维数组
在 一些情形下可能希望存储多维数据组成的序列
声明多维数组例如,要声明一个能够存放 5个学生的姓名和年龄的数组,
Dim stud_age(4,1)
(0,0) (0,1)
(1,0) (1,1)
(2,0) (2,1)
(3,0) (3,1)
(4,0) (4,1)
定义了一个 5行
2列的 Variant
类型的数组
9
为多维数组赋值
可用下面的语句 为 二维数组 赋值
Dim stud_age(4,1)
stud_age(0,0) = "Tom"
stud_age(0,1) = 25
stud_age(1,0) = "Joe"
stud_age(1,1) = 22
stud_age(2,0) = "Lucy"
stud_age(2,1) = 24
stud_age(3,0) = "Ted"
stud_age(3,1) = 25
stud_age(4,0) = "Harry"
stud_age(4,1) = 23
Tom 25
Joe 22
Lucy 24
Ted 25
Harry 23
10
使用数组元素
要显示 上 一张幻灯片创建的数组中所有元素的值
Dim i,j As Integer
For i = 0 To 4
For j = 0 To 1
Print stud_age(i,j)
Next j
Next i
0 1
0 Tom 25
1 Joe 22
2 Lucy 24
3 Ted 25
4 Harry 23
11
动态数组
动态数组与普通数组在概念上相类似
动 态数组与普通数组的区别:
– 动态数组的大小在程序中是可变的
– 声明动态数组不需要指定维数
– 使用动态数组可以丢弃不需要的数据并释放内存
12
定义动态数组
动态数组的声明与正常数组的声明相似
在声明时不需要指定任何维数
例如,
声明数组时
Dim num_arr() as Long
运行时使用 ReDim语句指定数组的维数和实际大小
ReDim num_arr(10)
13
重定义动态数组
在重定义动态数组时,应注意:
– ReDim 语句与 Dim 语句不同,只能在 函数和过程中出现,后者可以在过程外出现
– ReDim 语句无法更改与数组关联的数据类型
– 连续的 ReDim 语句可以更改数组的边界,但 无法更改数组的维数
– 每执行一次 ReDim语句,当前数组中的值将会丢失
14
动态数组 –示例
Private Sub Form_Click()
Dim num_arr() As Integer
Dim intNum,i As Integer
intNum = InputBox("请输入动态数组中元素的个数 ")
'重定义动态数组
ReDim num_arr(intNum)
'给动态数组赋值
For i = 0 To intNum
num_arr(i) = i + 10
Next i
MsgBox "数组中第一个元素的值为," & num_arr(0)
ReDim num_arr(3)
MsgBox "重定义后数组中第一个元素的值为," & num_arr(0)
End Sub
(在 VB环境中进行演示)
15
控件数组 2-1
可以将相关的 并且是相同类型的控件组合到一种称为“控件数组”的结构中
示例:在 VB环境中创建名为 cmdArray 的命令按钮的控件数组
16
控件数组 2-2
控件数组中的控件共享公用的属性、事件
、名称和类型
控件数组中的每个控件称为控件数组的一个元素
控件数组中的控件可以在运行时创建
17
Index 属性
控件数组中的所有元素 具 有相同的名称
通过使用称为 Index 属性的属性来分别标识每个元素
索引可以帮助将特定的值赋给与特定控件关联的属性
18
Index 属性 – 示例
改变在幻灯片 15中创建的 cmdArray 命令按钮数组中第 0个和第 1个按钮的 caption
属性
cmdArray(0).caption = "退出 "
cmdArray(1).caption = "确定 "
19
控件数组的事件编程
对于与控件数组相关联的特定事件,该控件数组中的所有元素共享相同的事件代码
根据与 控件相关联的索引来触发控件的事件
20
控件数组的事件编程 –示例
(在 VB环境中进行演示)
21
使用自定义数据类型
可能会需要将与相同实体相关的不同数据 类型 的值存储在一起,这种结构称为记录 。 例如:要存储学生的相关信息
Student_id Student_name Student_marks Student_address
104 Parker 78 NewYork-35
105 Stevens 82 Texas-50
107 George 76 Florida-56
22
定义自定义数据类型
使用 Type 语句创建的数据类型称为用户定义或自定义的数据类型
Type 语句的典型语法如下:
Type varType
variable1 as varType
variable2 as varType
variable3 as varType
….
variablen as varType
End Type
23
自定义数据类型 – 示例
创建 符合 幻灯片 21示例中关于学生信息要求的,称为 studTyp 的自定义数据类型
Type studType
stud_id As Integer
stud_name As String
stud_marks As Integer
stud_address As String
End Type
24
创建自定义数据类型的变量
可以使用下列语 句,创建在上一张幻灯片中定义的自定义数据类型 studType 的变量:
Dim student1 As studType
Dim student2 As studType
25
为自定义数据类型的变量赋值
要为这些变量赋值,必须显式地将值赋给组成此数据类型的各个成员
数据类型的每个单独的成员称为字段
使用 变量名,字段名,为变量赋值或访问变量的各字段的值
26
使用自定义数据类型 –示例
为自定义数据类型的变量赋值
studType是在第 23张幻灯片中创建的自定义数据类型
student1.stud_id
student1.stud_name
student1.stud_marks
student1.stud_address
访问该类型变量的值
Dim student1 As studType
student1.stud_id = 104
student1.stud_name = "Parker"
student1.stud_marks = 78
student1.stud_address = "NewYork-35“1
27
使用 RND随机数函数
RND函数说明,
返回一个小于 1但大于等于 0的单精度数 。
可用来生成某个范围内的随机整数:
Int((上限 – 下限 + 1) * Rnd + 下限 )
示例:若要生成一个 10-20内的随机整数
Int((20 – 10 + 1) * Rnd + 10)
28
使用 RND函数 –示例
Dim intIndex As Long
Dim sngArray(1 To 10) As Single
For intIndex = 1 To 10
sngArray(intIndex) = 100 * Rnd + 1
msgBox(sngArray(intIndex))
Next intIndex
将生成的一个 1-
100之间的随机数赋值给数组
(在 VB环境中进行演示)
29
示例:数组排序
在 VB环境中演示本章教材最后一部分的“示例”
30
总结
数组
– 使用一维数组
– 使用多维数组
– 使用动态数组
– 使用控件数组
自定义数据类型
使用随机函数 Rnd
算法:数组排序