220 likes | 334 Vues
第 4 章 数组. 4.1 数组的概念 4.2 静态数组及其声明 4.3 动态数组及其声明 4.4 控件数组 4.5 自定义数据类型. 4.1 数组的概念. 1 .引例 求 100 个学生的平均成绩及超过平均成绩的人数。 如果用一般变量来表示成绩,需要用 100 个变量,如: mark1 、 mary2 、 ……mark100 。若用数组,可以只用一个来表示 mark ( 1 To 100 )。. 4.1 数组的概念.
E N D
第4章 数组 4.1 数组的概念 4.2 静态数组及其声明 4.3 动态数组及其声明 4.4 控件数组 4.5 自定义数据类型
4.1 数组的概念 • 1.引例 • 求100个学生的平均成绩及超过平均成绩的人数。 • 如果用一般变量来表示成绩,需要用100个变量,如:mark1、mary2、……mark100。若用数组,可以只用一个来表示mark(1 To100)。
4.1 数组的概念 • 2. 数组的概念 数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。 • 数组:是同类型变量的一个有序的集合。如:A(1 To 100),表示一个包含100个数组元素的名为A的数组。 • 数组元素: 即数组中的变量。用下标表示数组中的各个元素。 表示方法:数组名(P1,P2,……) 其中P1、P2表示元素在数组中的排列位置,称为“下标”。 如:A(3,2)代表二维数组A中第3行第2列上的那个元素。
4.1 数组的概念 • 数组维数: 由数组元素中下标的个数决定,一个下标表示一维数组,二个下标表示二维数组。 VB中有一维数组、二维数组、……最多60维数组。 • 下标:下标表示顺序号,每个数组有一个唯一的顺序号,下标不能超过数组声明时的上、下界范围。下标可以是整型的常数、变量、表达式,甚至又是一个数组元素。下标的取值范围是:下界 To 上界 ,缺省下界时,系统默认取0。
4.1 数组的概念 • 数组声明:数组必须先声明后使用。声明数组就是让系统在内存中分配一个连续的区域,用来存储数组元素。 声明内容:数组名、类型、维数、数组大小。 一般情况下,数组中各元素类型必须相同,但若数组为Variant时,可包含不同类型的数据。 • 静态数组:声明时确定了大小的数组。
4.1 数组的概念 • 动态数组: 声明时没有给定数组大小(省略了括号中的下标),使用时需要用ReDim语句重新指出其大小。 • 使用动态数组的优点是根据用户需要,有效地利用存储空间,它是在程序执行到ReDim语句时才分配存储单元,而静态数组是在程序编译时分配存储单元。
4.2 静态数组及其声明 1.一维数组 静态一维数组的声明形式:Dim 数组名(下标) [As 类型] 说明: (1)数组名必须是一个合法的变量名。 (2)下标必须为常数,不可以是表达式或变量。例如,数组声明:Dim x(10) As Single 是正确的,而数组声明:n=10 : Dim x(n) As Single则是错误的。 (3)下标的形式为:[常数1 To] 常数2。其中,常数1称为下界,常数2称为上界, 下标下界最小可为-32768,上界最大可为32767,若省略下界,则其默认值为0。例如以下数组声明均合法: Dim a(1 to 50) As Single Dim b(-2 to 3) As Single。
4.2 静态数组及其声明 (4) 一维数组的大小,即数组元素个数的计算公式为:上界-下界+1。例如: Dim a(100) As Single Dim b(-2 to 3) As Single 数组a的大小为:100-0+1=101个元素。数组b的大小为:3-(-2)+1=6个元素。 (5)子句“As类型”:说明数组元素的类型。可以是Integer、Long、Single、Double、Boolean、String(可变长度字符串)、String*n(固定长度字符串)、Currency、Byte、Date、Object、Variant、用户定义类型或对象类型。如果省略该项,则与前述简单变量的声明一样,默认为变体类型数组。
4.2 静态数组及其声明 (6)使用Dim语句声明一个数组,实际上就为系统编译程序提供了与数组相关的各种信息,如数组名、数组类型、数组的维数以及数组的大小等。例如: Dim s(50) As Integer 该语句声明了数组名为s,s的元素类型为整型,s的下标范围为0~50,共有51个元素。此后,若在程序中使用s(-1)或s(51)等,则系统会提示 “下标越界”。 (7)下标下界和上界规定了数组元素下标的取值范围。当省略下界时,Visual Basic默认下界值为0。这时,可以使用Option Base n语句重新设定数组的下界。例如: Option Base 1 表示设定数组的下标下界为1。 注意,Option Base n语句只能在窗体或标准模块级中使用,用来声明数组下标的缺省下界,它只影响位于包含语句的模块中的数组的下界。
4.2 静态数组及其声明 2.一维数组元素的引用 一维数组元素的引用形式为: 数组名(下标) 说明:下标可以是常量、整型变量或表达式,但不能越界。如果数组的类型为简单类型,则一个数组元素相当于一个简单变量,凡是简单变量可以出现的场合数组元素都可以出现。可以对数组元素进行以下一些简单操作: (1)数组元素的赋值 在程序中只能通过赋值语句给单个的数组元素赋值,而无法直接给整个数组赋值。例如:对于 Dim a(50) As Integer,b(50) As Integer 则下面的语句是正确的。 i=1: a(1)=85: a(i+1)=92: a(50)=83 x=(a(i)+a(i+1)+a(50))/3 而语句:b=a,却是错误的。
4.2 静态数组及其声明 (2)数组元素的输入/输出 数组元素的输入或输出通常都是与For循环配合使用完成的。 数组元素的输入可以通过InputBox( )函数或文本框控件实现。例如: Dim c(10) As Integer, i As Integer For i=0 To 10 c(i)= InputBox( “输入一个整数:”) Next i 数组元素获得数据后,即可以输出。例如: Print a(1),a(2),a(50) 在Picture1控件中输出前面数组b为: For i=0 To 10 Picture1.Print b(i); Next i
4.2 静态数组及其声明 3. 二维数组的声明 二维数组声明的一般形式为 Dim 数组名(下标1,下标2) [As 类型] 说明: (1)一个二维数组对应于数学中的一个二维表格或矩阵。其中,下标1定义第一维,对应表格中的行;下标2定义第二维,对应表格中的列。 (2)二维数组的大小等于每一维大小的乘积。例如: Dim a(2,3) As Integer 声明了一个二维数组a。其中,第一维的大小为3,第二维的大小为4,整个数组a的大小为3×4(3行4列),共有12个数组元素,每个数组元素的类型为整型。
4.2 静态数组及其声明 4. 二维数组的引用 二维数组元素的引用形式为: 数组名(下标1,下标2) 引用二维数组与引用一维数组类似,在类型允许的范围内可以对数组元素进行各种操作。例如: Dim a(3,4) As Single a(0,0)=6.52 a(2,3)=9.28+a(0,0) 在实际应用中,二维数组通常与二重For循环结合使用,每重For循环中的循环变量分别作为数组元素的两个下标,通过循环变量的不断改变,即下标的不断改变,达到对二维数组元素依次进行运算及其它操作的目的。
4.3 动态数组及其声明 1. 动态数组的建立 定长数组是在程序编译时分配存储空间,而动态数组是在程序执行时分配存储空间。 建立动态数组的方法是:利用Dim、Private、Public语句声明括号内为空的数组,然后在过程中用ReDim语句指明该数组的大小。语法是: ReDim数组名(下标1[,下标2…]) [As类型] 其中下标可以是常量,也可以是有了确定值的变量,类型可以省略,若不省略,必须与Dim中的声明语句保持一致。 Dim D() As Single Sub Form_Load()…… ReDim D(4,6)……End Sub 例如
4.3 动态数组及其声明 注意 • <1> 在动态数组ReDim语句中的下标可以是常量,也可以是有了确定值的变量; • <2> 在过程中可以多次使用ReDim来改变数组的大小,也可改变数组的维数。 • <3> 每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数来保留数组中的数据,但使用Preserve只能改变最后一维的大小,前面几维大小不能改变。
4.3 动态数组及其声明 2. For Each … Next循环语句 For Each … Next循环语句专门用于处理数组或对象集合中的每一个成员。其语法格式为 For Each 变量 In 数组名 循环体 [Exit For] …… Next 变量 说明: (1) 格式中的“变量”只能是一个Variant(变体)变量,它相当于For … Next循环语句中的循环控制变量,但实际上代表的是数组中的每一个元素。 (2)该结构重复执行的次数由数组元素的个数确定,也就是说,数组中有多少个元素,就自动重复执行多少次。 (3)该语句可以对数组元素进行处理操作,包括读取、显示或查询等。在不知道数组元素个数的情况下使用该循环语句非常方便。
4.4 控件数组 1.控件数组的概念 控件数组是由一组相同类型的控件组成的,它们共用一个控件名,具有相同的数组。控件数组适用于若干个控件执行的操作相似的场合,控件组共享同样的事件过程。控件数组通过索引号(属性中的Index)来标识各控件,第一个下标是0 。如:Text1(0)、Text1(1)、Text1(2)、Text1(3)……Private Sub cmdName _Click(Index As Integer) … If Index=3 then ‘ 处理第四个命令按钮的操作End If …End Sub 例如
4.4 控件数组 2.控件数组的建立控件数组的建立有两种方法: (1)在设计时建立建立的步骤如下:<1> 在窗体上画出某控件,并进行属性设置。 <2> 选中该控件进行“复制”和“粘贴”操作,系统提示“是否建立控件数组”,选择是即可。多次粘贴就可以创建多个控件元素。 <3> 进行事件过程的编程。
4.4 控件数组 (2)运行时添加控件数组 建立的步骤如下:<1> 在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数组。<2> 在编程时通过Load方法添加其余若干个元素,也可以通过Unload删除某个添加的元素。<3> 每个添加的控件数组通过Left 和Top属性,确定其在窗体上的位置,并将Visible设置为True。
4.5 自定义数据类型 1. 自定义数据类型的定义是指由若干标准数据类型组成的一种复合类型,也称为记录类型。定义方式:Type自定义类型名 元素名[(下标)] As类型名…… 元素名[(下标)] As类型名End Type元素名:表示自定义类型中的一个成员。下标:表示是数组。类型名:为标准类型。
4.5 自定义数据类型 例如 定义一个学生信息的自定义类型:Type studtype No As Integer ‘ 定义学号Name As String*10 ’ 定义姓名Sex As String*1 ‘ 定义性别Mark(1 TO 5) As Single ’ 定义5门课程的成绩Total As Single ‘ 定义总分 End Type <1> 自定义类型一般在标准模块(.bas)中定义,默认是Public<2> 自定义类型中的元素可以是字符串,但应是定长字符串<3> 不可把自定义类型名与该类型的变量名混淆<4> 注意自定义类型变量与数组的差别:它们都由若干元素组成,前者的元素代表不同性质、不同类型的数据,以元素名表示不同的元素;后者存放的是同种性质、同种类型的数据,以下标表示不同元素。 注意
4.5 自定义数据类型 2. 自定义型变量的声明和使用使用形式: 自定义数据类型变量的定义形式如下: Dim 变量名 As 自定义数据类型名 例如: Dim Student1 As Students, Student2 As Students 声明了两个自定义数据类型变量Student1 和 Student2。 自定义数据类型变量的引用形式如下: 变量名.元素名 例如,Student1.num表示Student1变量中的学号,Student1.name表示Student1变量中的姓名,Student1.Score(3)表示 Student1变量中的第3门课程的成绩。 若要表示Student1变量中的每个元素,则可以使用With语句进行简化。