第五章数组 (4学时)》 5.1数组的概念 5.2静态数组及声明 5.3动态数组及声明 5.4数组的基本操作 5.5控件数组 5.6自定义数据类型 5.7常用算法(二) 5.8常见错误
第五章 数组 (4学时) 5.1 数组的概念 5.2 静态数组及声明 5.3 动态数组及声明 5.4 数组的基本操作 5.5 控件数组 5.6 自定义数据类型 5.7 常用算法(二) 5.8 常见错误
一、 数组的概念 1.引例 例51若我们要求一个班100个学生的平均成绩,然后统计高于平均分 的人数。 按以前简单变量的使用和循环结构相结合,求平均成绩程序段如下: aver =0 Fori=1 To 100 mark=InputBox("输入"+i+"位学生的成绩") aver=aver+mark Next i aver=aver/100 但若要统计高于平均分的人数,则无法实现。mark是一个简单变量,存放的是最后一 个学生的成绩。 已有知识解决方法:再重复输入成绩,带来两个问题: (1)输入数据的工作量成倍增加; (2)若本次输入的成绩与上次不同,则统计的结果不正确。 解决此问题的根本方法,引入数组,始终保持输入的数据,一次输入,多次使用
一、 数组的概念 1.引例 例5.1若我们要求一个班100个学生的平均成绩,然后统计高于平均分 的人数。 按以前简单变量的使用和循环结构相结合,求平均成绩程序段如下: aver = 0 For i = 1 To 100 mark = InputBox("输入" + i + "位学生的成绩") aver = aver + mark Next i aver = aver / 100 但若要统计高于平均分的人数,则无法实现。mark是一个简单变量,存放的是最后一 个学生的成绩。 已有知识解决方法:再重复输入成绩,带来两个问题: (1)输入数据的工作量成倍增加; (2)若本次输入的成绩与上次不同,则统计的结果不正确。 解决此问题的根本方法,引入数组,始终保持输入的数据,一次输入,多次使用
二、数组的声明 数组并不是一种数据类型,而是一组相同类型的变量的集合数组必须先声明后使 用。 两类数组:静态(定长)数组、动态(可变长)数组 1.静态数组及声明 形式:Dim数组名(下标1L下标2])[As类型] 声明了数组的名、维数、大小、类型 维数:几个下标为几维数组,最多60维。 下标:[下界o]上界省略下界为0,必须为常数。 每一维大小:上界一下界+1 数组大小:每一维大小的乘积 例.Dim mark(1tn1nnl△sInteger mark(1) mark(2) mark(3) 0088.0 mark(99) mark(100)
二、数组的声明 数组并不是一种数据类型,而是一组相同类型的变量的集合.数组必须先声明后使 用。 两类数组: 静态(定长)数组、动态(可变长)数组 1. 静态数组及声明 形式: Dim 数组名(下标1[,下标2.]) [As 类型] 声明了数组的名、维数、大小、类型 维数:几个下标为几维数组,最多60维。 下标: [下界 To ] 上界 省略下界为0 ,必须为常数。 每一维大小: 上界-下界+1 数组大小: 每一维大小的乘积 例:Dim mark(1 to 100) As Integer
Dim IArray(0To3,0To4)As Long共有4X5个元素 等价于:Dim IArray(3,4)As Long LAmay(0,0) LAmay(0,1) LAmay(0,2) 1Aay0,3) 1Aay0,4) Amay(1,0) LAray(1,1) Amay(1,2) LAmay(1,3) LAmay(1,4) 1Amay(2.0) 1Amay(2,1) LAmay(2,2) IAmay(2,3) LAnay(2,4) 1Aay3,0) LAray(3,1) LAmay(3,2) LAmay(3,3) LAmay(3,4) 注意: (1)下界缺省为0,也可在重新定义数组的下界。例如: Option Base 1 (2)错误的声明,下标是变量 n=Inputbox("输入n”) Dim x(n)As Single (3)在数组声明中的下标说明了数组的整体,即每一维的大小; 而在程序其他地方出现的下标表示数组中的一个元素。 两者写法形式相同,但意义不同。 例如: Dim x(10)As Integer '声明了x数组有11个元素 x(10)=100 '对x(10)这个数组元素赋值
Dim lArray( 0 To 3, 0 To 4) As Long 共有 4×5个元素 等价于: Dim lArray(3, 4) As Long 注意: (1) 下界缺省为0 ,也可在重新定义数组的下界。例如: Option Base 1 (2)错误的声明,下标是变量 n =Inputbox(“输入n”) Dim x(n) As Single (3)在数组声明中的下标说明了数组的整体,即每一维的大小; 而在程序其他地方出现的下标表示数组中的一个元素。 两者写法形式相同,但意义不同。 例如: Dim x(10) As Integer ' 声明了x数组有11个元素 x(10)=100 ' 对x(10)这个数组元素赋值
三、动态数组及声明 动态数组指在声明数组时未给出数组的大小(省略括号中的下标),当要使 用它时,随时用ReDim语句重新指出数组大小。 形式如下: ReDim数组名(下标[,下标2.])[As类型] 例Sub Form Load() Dim sArray()As Single ReDim sArray(4,8) End Sub 说明: (I)Dim、Private、Public变量声明语句是说明性语句,可出现在过程内或通 用声明段;ReDimi语句是执行语句,只能出现在过程内。 (2)在过程中可多次使用ReDim来改变数组的大小,也可改变数组的维数, (3)每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim语句后 加Preserve参数用来保留数组中的数据,但使用Preserve.只能改变最后 维的大小,前面几维大小不能改变。例52,求若干个学生的平均分。 (4)ReDim中的下标可以是常量,也可以是有了确定值的变量
三、动态数组及声明 动态数组指在声明数组时未给出数组的大小(省略括号中的下标),当要使 用它时,随时用ReDim语句重新指出数组大小。 形式如下: ReDim 数组名(下标[,下标2.]) [As 类型] 例 Sub Form_Load() Dim sArray( ) As Single . ReDim sArray(4,8) . End Sub 说明: (1) Dim、Private、Public变量声明语句是说明性语句,可出现在过程内或通 用声明段;ReDim语句是执行语句,只能出现在过程内。 (2) 在过程中可多次使用ReDim来改变数组的大小,也可改变数组的维数. (3) 每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim语句后 加Preserve参数用来保留数组中的数据,但使用Preserve只能改变最后一 维的大小,前面几维大小不能改变。例5.2,求若干个学生的平均分。 (4) ReDim中的下标可以是常量,也可以是有了确定值的变量
四、数组的基本操作 1.数组元素的赋初值 (1)用循环 For i=1 To 10 iA(i)=0 Next i (2)Arrayi函数 Dim ib As Variant ib Array("abc","def","67") Fori=0 To UBound(ib) Picture1.Print ib(i);""; Next i 注意: (1)利用Array对数组各元素赋值,声明的数组是可调数组或连圆括 号都可省,并且其类型只能是Variant。 (2)数组的下阶为零,上界由Arrayl函数括号内的参数个数可决定, 也可通过函数Ubound获得
四、数组的基本操作 1. 数组元素的赋初值 (1)用循环 For i = 1 To 10 iA(i)=0 Next i (2) Array函数 Dim ib As Variant ib = Array("abc", "def", "67") For i = 0 To UBound(ib) Picture1.Print ib(i); " "; Next i 注意: (1)利用Array对数组各元素赋值,声明的数组是可调数组或连圆括 号都可省,并且其类型只能是Variant。 (2)数组的下阶为零,上界由Array函数括号内的参数个数可决定, 也可通过函数Ubound获得
2.数组的赋值 在VB6.0中,提供了数组直接对数组的赋值。例如: Dim a(As Variant,bO)As Variant,i% a=Array(1,2,3,4,5) ReDim b(UBound(a)) For i=0 To UBound(a) b=a b)=a) Next i 注意:赋值号左边的数组只能声明为Variant的可调数组或简单变量。 3.数组的输出 输出方阵sC中的下三角元素 Fori=0 To 4 Forj=0To i 下三角 回☒ sc(i,j)=i*5+j 5 6 Print sc(i,j);"" 10 11 1 16 Nextj 1 17 18 0 21 2 23 24 Print 换行 Next I
2.数组的赋值 在VB6.0中,提供了数组直接对数组的赋值。例如: Dim a() As Variant, b() As Variant, i% a = Array(1, 2, 3, 4, 5) ReDim b(UBound(a)) b = a 3. 数组的输出 输出方阵sC中的下三角元素 For i = 0 To 4 For j = 0 To i sc(i, j) = i * 5 + j Print sc(i, j); " "; Next j Print ' 换行 Next I For i = 0 To UBound(a) b(i) = a(i) Next i 注意:赋值号左边的数组只能声明为Variant的可调数组或简单变量
4.求数组中最大元素及所在下标 Dim Max As Integer,iMax As Integer Max=iA(1):iMax=1 For i=2 To 10 If iA(i)>Max Then Max=iA(i) iMax=i End If Next I 5.将数组中各元素交换 For i=1 To 10\2 t=iA(i) 交换前: iA()=iA(10-i+1) 246 810 5 7 9 iA(10-i+1)=t Next I 交换后: 97 53 1 10864 2 图1-3-22 数组中个元素交换
4. 求数组中最大元素及所在下标 Dim Max As Integer,iMax As Integer Max=iA(1):iMax=1 For i = 2 To 10 If iA(i)>Max Then Max=iA(i) iMax=i End If Next I 5. 将数组中各元素交换 For i =1 To 10\2 t=iA(i) iA(i)=iA(10-i+1) iA(10-i+1)=t Next I
五.控件数组 组相同类型的控件组成。它们共用一个控件名,具有相同的属性,建立 时系统给每个元素赋一个唯一的索引号ndex)。 控件数组共享同样的事件过程,通过返回的下标值区分控件数组中的各个 元素。 Private Sub cmdName Click(Index As Integer) If Index=3 then ‘处理第四个命令按钮的操作 End If e● End Sub 1.在设计时建立控件数组 ●在窗体上画出控件,进行属性设置,这是建立的第一个元素 ●选中该控件,进行“Copy”进行若干次和“Paste操作建立了所需个数的 控件数组元素。 ●进行事件过程的编程
五. 控件数组 一组相同类型的控件组成。 它们共用一个控件名,具有相同的属性,建立 时系统给每个元素赋一个唯一的索引号(Index)。 控件数组共享同样的事件过程,通过返回的下标值区分控件数组中的各个 元素。 例: Private Sub cmdName _Click(Index As Integer) . If Index=3 then ‘ 处理第四个命令按钮的操作 End If . End Sub 1.在设计时建立控件数组 ⚫在窗体上画出控件,进行属性设置,这是建立的第一个元素 ⚫选中该控件,进行“Copy”进行若干次和“Paste”操作建立了所需个数的 控件数组元素。 ⚫进行事件过程的编程
例5.3建立含有四个命令按钮的控件数组,当单击某个命令按钮,分 别显示不同的图形或结束操作。 Private Sub Command1 Click(Index As Integer) Select Case Index Case 0 ."画直线” Case 1 , "画矩形” Case 2 .“画圆为 Case Else End End Select End Sub 默认控侏名 下标 标题 。控件数组 (Index) (Caption) 直线 Command1 0 直线和 Command1 1日 矩形和 范形 Command1 2 圆 Command1 3 结束和 Picture1 空白和 无定义
例5. 3 建立含有四个命令按钮的控件数组,当单击某个命令按钮,分 别显示不同的图形或结束操作。 Private Sub Command1_Click(Index As Integer) Select Case Index Case 0 . "画直线" Case 1 . "画矩形" Case 2 . “画圆” Case Else End End Select End Sub