第04章 数组与自定义类型_第1页
第04章 数组与自定义类型_第2页
第04章 数组与自定义类型_第3页
第04章 数组与自定义类型_第4页
第04章 数组与自定义类型_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 数组与自定义类型第第 2 页页Dim i%, s!, a!, avg!, p%Dim i%, s!, a!, avg!, p%For i = 1 To 10For i = 1 To 10 a = Val(InputBox(Enter a number) a = Val(InputBox(Enter a number) s = s + a s = s + anext inext iavg = s / 10avg = s / 10Print avgPrint avgp = 0p = 0For i = 1 To 10For i = 1 To 10 a = Val(InputBox(Enter

2、 a number) a = Val(InputBox(Enter a number) If a avg Then p = p + 1 If a avg Then p = p + 1next inext iPrint Print 高于平均分高于平均分 & avg & & avg & 的学生共有的学生共有 & p & & p & 人人 引例引例:求一个班求一个班10个学生的平均成绩,统计高于平均分个学生的平均成绩,统计高于平均分的人数。的人数。第4章 数组与自定义类型第第 3 页页分析表明: 程序中采用一个变量a,只能保存最后一个学

3、生成绩,无法保存所有学生成绩,因此,在统计高于平均分人数时,不得不重复输入成绩, 这种方法存在着: (1)重复录入数据:用户输入数据的工作量成倍增加;重复录入数据:用户输入数据的工作量成倍增加; (2 2)容易出错:若本次输入的成绩与上次不同,则统计的结)容易出错:若本次输入的成绩与上次不同,则统计的结果不正确果不正确。 第4章 数组与自定义类型第第 4 页页如果使用:如果使用:A1A1,A2A2,A3A3,A4A4,A5A5,A6A6,A7A7,A8A8,A9A9,A10A10Dim Dim s!,p%, Avg!, A1!s!,p%, Avg!, A1!,A2!A2!,A3!A3!,A4!

4、A4!,A5!A5!,A6!A6!,A7!A7!,A8!A8!,A9!A9!,A10!A10! A1=Val(InputBox(A1=Val(InputBox( )A2=Val(InputBox()A2=Val(InputBox()A3=Val(InputBox()A3=Val(InputBox()A4=Val(InputBox()A4=Val(InputBox()A5=Val(InputBox()A5=Val(InputBox()A6=Val(InputBox()A6=Val(InputBox()A7=Val(InputBox()A7=Val(InputBox()A8=Val(InputBo

5、x()A8=Val(InputBox()A9=Val(InputBox()A9=Val(InputBox()A10=Val(InputBox()A10=Val(InputBox()方法方法2 2:用用多个变量多个变量保存每个学生成绩。保存每个学生成绩。s=A1+A2+A3+A4+A5+A6+A7+A8+A9+A10s=A1+A2+A3+A4+A5+A6+A7+A8+A9+A10Avg=s/10Avg=s/10P=0P=0Print 10Print 10个学生平均分数为个学生平均分数为 & Avg & AvgIF A1Avg Then pIF A1Avg Then pp+p+IF

6、 A2Avg Then pIF A2Avg Then pp+p+IF A3Avg Then pIF A3Avg Then pp+p+ . . Print Print 高于平均分高于平均分 & Avg & Avg _ & _ & 的学生共有的学生共有 & p & & p & 人人 第4章 数组与自定义类型第第 5 页页如果使用:如果使用:A1A1,A2A2,A3A3,A4A4,A5A5,A6A6,A7A7,A8A8,A9A9,A10A10方法方法2 2:用用多个变量多个变量保存每个学生成绩。保存每个学生成绩。 采用定义多个变量的方法

7、虽然解决了成绩保存采用定义多个变量的方法虽然解决了成绩保存的问题,但当数据量较大时,程序编写麻烦,的问题,但当数据量较大时,程序编写麻烦,不易实现或者无法实现。不易实现或者无法实现。 如果将如果将A A后面的下标改为后面的下标改为i i,使用循环为其赋值,使用循环为其赋值程序会更简洁!程序会更简洁!解决方法:解决方法:利用利用数组数组可以很方便的实现!可以很方便的实现!第4章 数组与自定义类型第第 6 页页方法3:用数组实现Dim a(1 to 10) As Integer, s!, Avg!, p%, i% 数组定义数组定义s = 0 求成绩总和求成绩总和For i = 1 To 10 a(

8、i)= InputBox(“输入第输入第 & i & 位学生的成绩位学生的成绩) s = s +a(i)next iAvg = s / 10 求平均成绩求平均成绩p=0For i = 1 To 10 统计高于平均分人数统计高于平均分人数 If a(i)=avg Then p=p+1next iPrint “高于平均分高于平均分” & Avg “的学生共有的学生共有” & p “人人”结论:结论:l数组能始终保存输入的数据,一次输入,多次使用。数组能始终保存输入的数据,一次输入,多次使用。l使用数组,能在程序中引入循环,简化程序编写。使用数组,能在程序中引入循环,

9、简化程序编写。第4章 数组与自定义类型第第 7 页页4.1 4.1 数组数组1 1、数组的有关概念、数组的有关概念(1 1)数组:)数组:是一个由多个同类型变量组成的数据集合,简单的讲就是是一个由多个同类型变量组成的数据集合,简单的讲就是一组同类型的变量。一组同类型的变量。(2 2)数组名:)数组名:这组变量有统一的名称,就是数组名。这组变量有统一的名称,就是数组名。(3 3)数组元素:)数组元素:构成数组的成员。每个数组元素和一个普通变量一样构成数组的成员。每个数组元素和一个普通变量一样能存放一个数据。能存放一个数据。(4 4)下标:)下标:用来标识数组中的每一个元素的序号。用来标识数组中的

10、每一个元素的序号。 如,有一个数组如,有一个数组a a(n n),数组元素可分别表示为:),数组元素可分别表示为: a(1), a(2), a(3), a(4)a(1), a(2), a(3), a(4)第4章 数组与自定义类型第第 8 页页4.1 4.1 数组数组2 2、数组的特点、数组的特点(1 1)数组由若干个数组元素组成,数组元素的)数组由若干个数组元素组成,数组元素的数据类数据类型一致型一致。(2 2)数组元素是)数组元素是有次序有次序存放的,下标代表它在数组中存放的,下标代表它在数组中的位置。的位置。(3 3)数组中各元素之间有内在联系,在内存中占)数组中各元素之间有内在联系,在内

11、存中占连续连续的一段的一段存储单元存储单元。第4章 数组与自定义类型第第 9 页页3 3、数组的分类、数组的分类(1 1)按照定义时数组元素个数确定与否,数组可分为:)按照定义时数组元素个数确定与否,数组可分为:n静态数组静态数组:定义时数组元素的个数就已经确定:定义时数组元素的个数就已经确定(大小不可以调整)n动态数组动态数组:定义时数组元素的个数不确定,在程序:定义时数组元素的个数不确定,在程序运行时根据需要才确定数组元素的多少运行时根据需要才确定数组元素的多少(大小多少可以调整)(2 2)按照数组元素下标的个数,数组可分为:)按照数组元素下标的个数,数组可分为:n一维数组:数组元素有一个

12、下标一维数组:数组元素有一个下标n二维数组:数组元素有两个下标二维数组:数组元素有两个下标n多维数组:数组元素有多个下标多维数组:数组元素有多个下标第4章 数组与自定义类型第第 10 页页1.1.一维数组一维数组 (A(0) A(1) A(2) A(3) A(4)(A(0) A(1) A(2) A(3) A(4)一、按一、按下标的个数下标的个数分分2.2.二维数组二维数组A(0,0) A(0,1) A(0,2)A(1,0) A(1,1) A(1,2)4.1 .1 4.1 .1 数组的分类数组的分类3.3.多维数组多维数组Dim A(1,2) As IntegerDim A(4Dim A(4)A

13、s IntegerAs Integer第4章 数组与自定义类型第第 11 页页1 1、静态数组、静态数组1 1)一维数组)一维数组功能:功能:定义一个一维数组,并初始化所有数组元素。定义一个一维数组,并初始化所有数组元素。格式:格式:Dim Dim 数组名数组名(下界下界 ToTo 上界上界)As As 数据类型数据类型 作用:作用:定义定义“( (上界上界- -下界下界+1)+1)”个数组元素,这些元个数组元素,这些元素素 按照下标由小到大的顺序连续存储在内存中。按照下标由小到大的顺序连续存储在内存中。第4章 数组与自定义类型第第 12 页页说明说明 数组名的定义同变量,以字母开头,不能使用

14、数组名的定义同变量,以字母开头,不能使用VBVB中中的关键字,但尽可能有意义。例如:的关键字,但尽可能有意义。例如:Dim x(10) As Single Dim x(10) As Single 正确正确Dim Sub(20) As LongDim Sub(20) As Long错误错误Dim Math(1 To 8) As SingleDim Math(1 To 8) As Single正确正确 Dim 5X(20) As LongDim 5X(20) As Long错误错误格式:格式:Dim Dim 数组名数组名 (下界下界 To To 上界上界)As )As 数据类型数据类型 第4章 数

15、组与自定义类型第第 13 页页说明:说明: 静态数组静态数组的维界定义必须为常数或符号常量,或的维界定义必须为常数或符号常量,或是常量表达式,不能是变量或其表达式。例如:是常量表达式,不能是变量或其表达式。例如:Const k as integer=10 Const k as integer=10 Dim x(10) As Single Dim x(10) As Single 正确正确Dim a(k) as longDim a(k) as long 正确正确Dim B(5+3) as StringDim B(5+3) as String 正确正确而而 Dim x(n) As Single Di

16、m x(n) As Single 错误错误格式:格式:Dim Dim 数组名数组名 (下界下界 To To 上界上界)As )As第4章 数组与自定义类型第第 14 页页 维界的形式是:维界的形式是: 下界下界 To To 上界上界 1 1、当、当 下界下界 ToTo缺省时,默认值为缺省时,默认值为0 0 2 2、下界、下界上界上界 3 3、数组元素的个数是:、数组元素的个数是:上界下界上界下界1 1 4 4、维界说明如果不是整数,将按四舍五入处理。、维界说明如果不是整数,将按四舍五入处理。Dim A(1 To 9.8) As Single Dim A(1 To 9.8) As Single

17、定义了有定义了有1010个元素个元素的数组的数组 A(1)A(1)、A(2)A(2)、A(9)A(9)、A(10)A(10)Dim B(10) As String Dim B(10) As String 定义了有定义了有1111个元素的数组个元素的数组 B(0)B(0)、B(1) B(1) B(9)B(9)、B(10)B(10)Dim A(5 To 6+2) As Integer Dim A(5 To 6+2) As Integer 定义了有定义了有4 4个元素的数组个元素的数组格式:格式:Dim Dim 数组名数组名 (下界下界 To To 上界上界)As )As第4章 数组与自定义类型第第

18、 15 页页 AsAs 用来说明数组元素的类型,缺省为变体型(用来说明数组元素的类型,缺省为变体型(VariantVariant)。)。例如:例如:Dim a(12) As Single Dim a(12) As Single 单精度型,下标范围为单精度型,下标范围为0 012.12.Dim x!(1 To 50 ) Dim x!(1 To 50 ) 单精度单精度, ,下标范围为下标范围为1 150.50.Dim y(1 To 10 ) Dim y(1 To 10 ) 变体型变体型, ,下标范围为下标范围为1 110.10.格式:格式:Dim Dim 数组名数组名 (下界下界 To To 上界

19、上界)As)As第4章 数组与自定义类型第第 16 页页 静态数组必须静态数组必须先声明后使用先声明后使用。声明数组后,各数组元素的初值与声明普通变量相同声明数组后,各数组元素的初值与声明普通变量相同 1 1、置数值型数组中的全部元素值为、置数值型数组中的全部元素值为0 0 2 2、置字符串数组和变体数组中的元素值为空串、置字符串数组和变体数组中的元素值为空串 3 3、布尔型数组元素值初始化为、布尔型数组元素值初始化为FalseFalse注注: :一维静态数组包含数组元素的一维静态数组包含数组元素的个数个数必须确定必须确定! !可以使用可以使用“Option Base 1Option Base

20、 1”来重新定义数的下界来重新定义数的下界 第4章 数组与自定义类型第第 17 页页 说明:说明: 和一维数组相同,维界由上界、下界组成和一维数组相同,维界由上界、下界组成格式:Dim 数组名(下界1 to 上界1,下界2 to 上界2) As 数据类型 1 1、静态数组、静态数组2 2)二维数组二维数组和一维数组相同,可以使用和一维数组相同,可以使用“Option Base 1Option Base 1”来重新定来重新定义数的下界义数的下界二维数组一般可以看成一个二维表、行列式、矩阵、或二维数组一般可以看成一个二维表、行列式、矩阵、或平面坐标,平面坐标,通常用第一维表示数组有多少行、第二维表

21、示数组有多通常用第一维表示数组有多少行、第二维表示数组有多少列。少列。 第4章 数组与自定义类型第第 18 页页静态数组注意事项静态数组注意事项(1 1)维说明中下界和上界只能取直接常量或直接常量表达式,符)维说明中下界和上界只能取直接常量或直接常量表达式,符号常量和符号常量表达式,不能为变量或包含变量的表达式。号常量和符号常量表达式,不能为变量或包含变量的表达式。(2 2)下界维说明可以省略,默认从)下界维说明可以省略,默认从0 0开始开始 Dim x(6) As String Dim x(6) As String * * 6 6(3 3)维说明中使用的常量可以为小数,系统自动四舍五入。)维

22、说明中使用的常量可以为小数,系统自动四舍五入。 Dim x(1 To 4.3 + 2) As IntegerDim x(1 To 4.3 + 2) As Integer定义数组x是有x(0)到x(6)连续的7个数组元素,每个元素可以存储6个字符Dim n As Integern=10Dim a(1 To n) As Single Const n As Integer = 6 Dim x(1 To n) As Double Dim y(1 To n + 6)第4章 数组与自定义类型第第 19 页页静态数组注意事项静态数组注意事项 (4 4)用)用“Option Base 1Option Base

23、 1”可设定数组元素下界为可设定数组元素下界为1 1,将下界,将下界默认值从默认值从0 0改为改为1 1。 (5 5)一维静态数组在同一过程中只能声明一次)一维静态数组在同一过程中只能声明一次 (6 6)声明数组后,各数组元素的初值与声明普通变量相同。)声明数组后,各数组元素的初值与声明普通变量相同。Private Sub Command1_Click()Dim a(1 To 6) As IntegerDim a(8) As SingleEnd Sub第4章 数组与自定义类型第第 20 页页Pravate Sub Form_Click()Print A(2)End Sub(7 7)静态数组必须

24、先声明明,后使用)静态数组必须先声明明,后使用第4章 数组与自定义类型第第 21 页页7.2 7.2 数组元素的引用数组元素的引用数组元素可以通过数组名加下标的方式引数组元素可以通过数组名加下标的方式引用,他可以通过下标变量进行批量数据的用,他可以通过下标变量进行批量数据的计算,用法与一般变量相同计算,用法与一般变量相同例如:例如:a(1)=3.14259a(1)=3.14259 x(1,2)=100 x(1,2)=100下面的语句可以为多个数组元素赋值下面的语句可以为多个数组元素赋值dim a%(1 to 20)dim a%(1 to 20)For i=1 to 20For i=1 to 2

25、0a(a(i i)=2)=2* *i-1i-1next inext idim p%(10)dim p%(10)For j=0 to 10For j=0 to 10p(p(j j)=j)=jnext jnext j第4章 数组与自定义类型第第 22 页页例例4-1 4-1 用用InputBoxInputBox函数向数组函数向数组a a中输入中输入1010个个整数,找出其中最大值、最小值以及他们对整数,找出其中最大值、最小值以及他们对应的数组元素的下标应的数组元素的下标Private Sub Form_Click() Dim a%(1 To 10), i%, max%, min%, k%, p%

26、For i = 1 To 10 a(i) = Val(InputBox(a( & i & )=) Print a(i); Next i Print max = a(1): p = 1 min = a(1): k = 1第4章 数组与自定义类型第第 23 页页 For i = 2 To 10 If a(i) max Then max = a(i): p = i End If If a(i) p Then Print a( & i & )=; a(i) Next iEnd Sub第4章 数组与自定义类型第第 25 页页例例4-3 4-3 二维数组二维数组用用RndR

27、nd函数随机产生函数随机产生3030个同学个同学4 4门课程的成门课程的成绩放到一个二维数组中,计算并输出每个绩放到一个二维数组中,计算并输出每个同学的平均成绩同学的平均成绩分析:分析:需要引进一个至少有需要引进一个至少有3030行,行,4 4列的二维数列的二维数组;用循环结构给数组变量赋值、计算、组;用循环结构给数组变量赋值、计算、输出输出第4章 数组与自定义类型第第 26 页页Private Sub Form_Click() Dim s(30, 5) As Integer, i%, j% For i = 1 To 30 For j = 1 To 4 s(i, j) = Int(51 * R

28、nd) + 50 s(i, 5) = s(i, 5) + s(i, j) Next j s(i, 5) = s(i, 5) / 4 Next i 第4章 数组与自定义类型第第 27 页页Print 学号学号, 数学数学, 英语英语, 物理物理, 化学化学, 总评总评 For i = 1 To 30 Print i, For j = 1 To 5 Print s(i, j), Next j Print Next iEnd Sub第4章 数组与自定义类型第第 28 页页例例4-44-4用用InputBoxInputBox函数给一个四行四列的矩阵输入函数给一个四行四列的矩阵输入数据,然后交换矩阵中各

29、元素行列位置(矩数据,然后交换矩阵中各元素行列位置(矩阵的转置)阵的转置)a(1,1)a(1,2)a(1,3)a(1,4)a(2,1)a(2,2)a(2,3)a(2,4)a(3,1)a(3,2)a(3,3)a(3,4)a(4,1)a(4,2)a(4,3)a(4,4)第4章 数组与自定义类型第第 29 页页Private Sub Form_Click() Dim s(4, 4) As Single, x As Single, i%, j% For j = 1 To 4 For i = 1 To 4 s(i, j) = InputBox(s( & i & , & j &am

30、p; )=) Next i Next j Print 交换前:交换前: For i = 1 To 4 For j = 1 To 4 Print s(i, j); Next j Print Next i第4章 数组与自定义类型第第 30 页页 For i = 1 To 4 For j = 1 To 4 x = s(i, j): s(i, j) = s(j, i): s(j, i) = x Next j Next i Print 交换后:交换后: For i = 1 To 4 For j = 1 To 4 Print s(i, j); Next j Print Next iEnd Sub第4章 数

31、组与自定义类型第第 31 页页4.1 数组的概述数组的概述静态数组不能解决的问题静态数组不能解决的问题n有时候在写程序代码时并不知道要处理多少个数;有时候在写程序代码时并不知道要处理多少个数;n定义静态数组时又必须要确定数组元素个数;定义静态数组时又必须要确定数组元素个数;n我们可以在定义时将元素定义多一点;我们可以在定义时将元素定义多一点;n但又会浪费宝贵的内存空间,而且,多少才算多啊!但又会浪费宝贵的内存空间,而且,多少才算多啊!n能不能在写代码时先定义一个空数组,在用时根据实能不能在写代码时先定义一个空数组,在用时根据实 际需要再确定大小呢?际需要再确定大小呢?n有!有!VB允许动态定义

32、数组!允许动态定义数组!第4章 数组与自定义类型第第 32 页页4.1 数组的概述数组的概述2 2、动态数组、动态数组(1)声明时不说明数组元素个数的数组称为动态数组;)声明时不说明数组元素个数的数组称为动态数组;(2)通常声明步骤有两步;)通常声明步骤有两步;第一步:用第一步:用Dim声明一个空数组;声明一个空数组;第二步:在确定数组大小后再用第二步:在确定数组大小后再用ReDim确定大小确定大小(3)也可以直接省略第一步而直用)也可以直接省略第一步而直用ReDim定义;定义;Private Sub Command1_Click() Dim a%(), b!(10), n% n = Inpu

33、tBox(请输入要处理的数据个数) ReDim a(n) End Sub第4章 数组与自定义类型第第 33 页页7.7. 动态数组动态数组(1)声明时不说明数组元素个数的数组称为动态数组;)声明时不说明数组元素个数的数组称为动态数组;(2)通常声明步骤有两步;)通常声明步骤有两步;第一步:用第一步:用Dim声明一个空数组;声明一个空数组;第二步:在确定数组大小后再用第二步:在确定数组大小后再用ReDim确定大小确定大小(3)也可以直接省略第一步而直用)也可以直接省略第一步而直用ReDim定义;定义;Private Sub Command1_Click() Dim n% n = InputBox

34、(请输入要处理的数据个数) ReDim a(n) End Sub第4章 数组与自定义类型第第 34 页页例4-5 用Rnd产生n个0到100之间的随机整数放到a数组中,并计算平均值,将大于平均值的数和下标输出。Option Base 1Private Sub Form_Click() Dim a() As Integer, i%, p! n = InputBox(请确定数组的大小) ReDim a(n) For i = 1 To n a(i) = Int(Rnd * 101) p = p + a(i) Next i p = p / n Print 平均值=; p For i = 1 To n

35、If a(i) p Then Print a( & i & )=; a(i) Next iEnd Sub第4章 数组与自定义类型第第 35 页页7.7. 动态数组动态数组(4)利用)利用Preserve关键字可以在扩充或压缩数组大小关键字可以在扩充或压缩数组大小时保留原来的值。时保留原来的值。 Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim Preserve a%(1 To n) For i = 1 To n Print a(i); Next i第4章 数组与自定义类型第第 36

36、页页7.7. 动态数组动态数组(4)利用)利用Preserve关键字可以在扩充或压缩数组大小关键字可以在扩充或压缩数组大小时保留原来的值。时保留原来的值。 Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim Preserve a%(1 To n) For i = 1 To n Print a(i); Next in0第4章 数组与自定义类型第第 37 页页7.7. 动态数组动态数组(4)利用)利用Preserve关键字可以在扩充或压缩数组大小关键字可以在扩充或压缩数组大小时保留原来的值。时保留原来的值

37、。 Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim Preserve a%(1 To n) For i = 1 To n Print a(i); Next in6第4章 数组与自定义类型第第 38 页页7.7. 动态数组动态数组(4)利用)利用Preserve关键字可以在扩充或压缩数组大小关键字可以在扩充或压缩数组大小时保留原来的值。时保留原来的值。 Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim a

38、%(1 To n) For i = 1 To n Print a(i); Next in6a000000第4章 数组与自定义类型第第 39 页页7.7. 动态数组动态数组(4)利用)利用Preserve关键字可以在扩充或压缩数组大小关键字可以在扩充或压缩数组大小时保留原来的值。时保留原来的值。 Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim a%(1 To n) For i = 1 To n Print a(i); Next in6a123456第4章 数组与自定义类型第第 40 页页7.7. 动

39、态数组动态数组(4)利用)利用Preserve关键字可以在扩充或压缩数组大小关键字可以在扩充或压缩数组大小时保留原来的值。时保留原来的值。 Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim a%(1 To n) For i = 1 To n Print a(i); Next in8a123456第4章 数组与自定义类型第第 41 页页7.7. 动态数组动态数组(4)利用)利用Preserve关键字可以在扩充或压缩数组大小关键字可以在扩充或压缩数组大小时保留原来的值。时保留原来的值。 Dim n% n

40、 = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim a%(1 To n) For i = 1 To n Print a(i); Next in8a00000000第4章 数组与自定义类型第第 42 页页7.7. 动态数组动态数组(4)利用)利用Preserve关键字可以在扩充或压缩数组大小关键字可以在扩充或压缩数组大小时保留原来的值。时保留原来的值。 Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim a%(1 To n)

41、For i = 1 To n Print a(i) Next i第4章 数组与自定义类型第第 43 页页7.7. 动态数组动态数组(4)利用)利用Preserve关键字可以在扩充或压缩数组大小关键字可以在扩充或压缩数组大小时保留原来的值。时保留原来的值。 Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim Preserve a%(1 To n) For i = 1 To n Print a(i); Next in8a123456第4章 数组与自定义类型第第 44 页页7.7. 动态数组动态数组(4)利

42、用)利用Preserve关键字可以在扩充或压缩数组大小关键字可以在扩充或压缩数组大小时保留原来的值。时保留原来的值。 Dim n% n = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim Preserve a%(1 To n) For i = 1 To n Print a(i); Next in8a12345600第4章 数组与自定义类型第第 45 页页7.7. 动态数组动态数组(4)利用)利用Preserve关键字可以在扩充或压缩数组大小关键字可以在扩充或压缩数组大小时保留原来的值。时保留原来的值。 Dim n% n

43、 = 6 ReDim a%(1 To n) For i = 1 To n a(i) = i Next i n = 8 ReDim Preserve a%(1 To n) For i = 1 To n Print a(i) Next i第4章 数组与自定义类型第第 46 页页8. 获得数组下标上下界的函数获得数组下标上下界的函数(1)UBound(数组名数组名),可以获得指定一维数组的下标,可以获得指定一维数组的下标上界;上界;(2)LBound(数组名数组名),可以获得指定一维数组的下标,可以获得指定一维数组的下标下界;下界;(3)UBound(数组名数组名,1),可以获得多维数组第,可以获得

44、多维数组第1维的下维的下标上界;标上界;(4)Lbound(数组名数组名,N),可以获得多维数组第,可以获得多维数组第N维的维的下标下界。下标下界。第4章 数组与自定义类型第第 47 页页例4-6 定义一个动态数组来存放学生名单,并可以在其中随时添加新的学生姓名。Dim a() As StringPrivate Sub Form_Load() Dim n As Integer n = 2 ReDim a(n) a(0) = 张三张三 a(1) = 李四李四 a(2) = 王五王五End Sub第4章 数组与自定义类型第第 48 页页Private Sub Form_Click() m = UB

45、ound(a) ReDim Preserve a(m + 1) a(m + 1) = InputBox(请输入姓名请输入姓名) For i = LBound(a) To UBound(a) Print a(i) Next iEnd Sub第4章 数组与自定义类型第第 49 页页9. 数组元素的遍历数组元素的遍历 对一个数组中所有数组元素的执行同一个操作,称之对一个数组中所有数组元素的执行同一个操作,称之为数组元素的遍历,这是对数组元素最常见的操作,一般为数组元素的遍历,这是对数组元素最常见的操作,一般要通过循环完成,一维用单循环:要通过循环完成,一维用单循环: 一维数组赋值 For i = L

46、Bound(a) To UBound(a) a(i) = Int(Rnd() * 100) Next i 一维数组输出 For i = LBound(a) To UBound(a) Print a(i) Next i第4章 数组与自定义类型第第 50 页页9. 数组元素的遍历数组元素的遍历 对一个数组中所有数组元素的执行同一个操作,称之对一个数组中所有数组元素的执行同一个操作,称之为数组元素的遍历,这是对数组元素最常见的操作,一般为数组元素的遍历,这是对数组元素最常见的操作,一般要通过循环完成,二维用双循环:要通过循环完成,二维用双循环:二维数组赋值 Dim a%(3, 4), i%, j%

47、For i = LBound(a, 1) To UBound(a, 1) For j = LBound(a, 2) To UBound(a, 2) a(i, j) = Int(Rnd() * 100) Next j Next i第4章 数组与自定义类型第第 51 页页10. 用数组解决问题的步骤用数组解决问题的步骤(1) 根据要求声明数组;根据要求声明数组;(2) 为各数组元素赋值,一般通过遍历完成;为各数组元素赋值,一般通过遍历完成;(3) 处理各数组元素中的数据;一般通过遍历完成处理各数组元素中的数据;一般通过遍历完成(4) 输出处理结果输出处理结果第4章 数组与自定义类型第第 52 页页

48、4.2 数组元素的赋值方法数组元素的赋值方法1. 用循环逐一为数组元素赋有用循环逐一为数组元素赋有规律规律的数据的数据 示例:声明一个一维数组,给下标为奇数的元素赋示例:声明一个一维数组,给下标为奇数的元素赋值为值为0,下标为偶数的元素赋值为,下标为偶数的元素赋值为1。Private Sub Command1_Click() Dim a%(1 To 10), i% For i = 1 To 10 a(i) = IIf(i / 2 = i 2, 1, 0) Next iEnd Sub第4章 数组与自定义类型第第 53 页页1、用循环逐一为数组元素赋有规律的数据、用循环逐一为数组元素赋有规律的数据

49、例例4-7 声明一个二维数组,给两条对角线元素赋值为声明一个二维数组,给两条对角线元素赋值为1,其它元素赋值为,其它元素赋值为0。Private Sub Command1_Click() Dim a%(1 To 10, 1 To 10), i%, j% For i = 1 To 10 For j = 1 To 10 If i = j Or i + j = 11 Then a(i, j) = 1 Else a(i, j) = 0 End If Next j Next iEnd Sub优点:快速缺点:数据必须有规律第4章 数组与自定义类型第第 54 页页2. 用用Array函数一次为所有元素赋值函

50、数一次为所有元素赋值 (1)只能给)只能给一维一维动态动态变体类型变体类型数组各元素赋值;数组各元素赋值; (2)一次给全部数组元素赋值,快速高效;)一次给全部数组元素赋值,快速高效; (3)如果数组尚未声明,数组元素的个数由列表中)如果数组尚未声明,数组元素的个数由列表中的数据个数决定。的数据个数决定。格式格式 :数组名数组名=Array(数组元素值列表)(数组元素值列表)例例7-8 为二维数组数组赋初值为二维数组数组赋初值第4章 数组与自定义类型第第 55 页页Private Sub Form_Click() Dim x(), a%(1 To 3, 1 To 3), i%, j% x =

51、Array(1, 2, 3, 4, 5, 6, 7, 8, 9) For i = LBound(x) To UBound(x) a(1 + i 3, 1 + i Mod 3) = x(i) Next i For i = 1 To 3 For j = 1 To 3 Print a(i, j); Next j Print Next iEnd Sub第4章 数组与自定义类型第第 56 页页3. 用用Inputbox为元素逐一赋值为元素逐一赋值 (1)与普通变量赋值相同,可以在程序运行时再输入)与普通变量赋值相同,可以在程序运行时再输入要处理的数据,增强了程序的灵活性;要处理的数据,增强了程序的灵活性

52、; (2)每为一个元素赋值时都要暂停程序运行,效率低;)每为一个元素赋值时都要暂停程序运行,效率低; (3)输入的数据一旦有错,修改只能重头再来。)输入的数据一旦有错,修改只能重头再来。第4章 数组与自定义类型第第 57 页页4. 用用Split函数为数组各元素一次性赋值函数为数组各元素一次性赋值数组名数组名=Split(字符串表达式字符串表达式,分隔符分隔符) (1)只能为)只能为字符型数组字符型数组赋值;赋值; (2)数据之间要有明确的、统一的分隔符;)数据之间要有明确的、统一的分隔符; 例:例:Nam=Split(“王强,李军,刘平,王晶王强,李军,刘平,王晶”,“,”)Score=Sp

53、lit(Text1.text,”)说明:字符串表达式可以是任何字符串;分隔符可以是各说明:字符串表达式可以是任何字符串;分隔符可以是各种字符,用以分隔数据种字符,用以分隔数据第4章 数组与自定义类型第第 58 页页例例4-9 用文本框输入一组英文单词,统计单词个数,找用文本框输入一组英文单词,统计单词个数,找出排在最前面和最后面的单词。出排在最前面和最后面的单词。Option Base 1Private Sub Command1_Click() Dim a() As String, i%, n%, F$, E$ a = Split(Text1.Text, ) n = UBound(a) F =

54、 a(1): E = a(1) For i = 2 To n If a(i) E Then E = a(i) Next i Label2.Caption = F Label4.Caption = E Label6.Caption = nEnd SubSplit函数赋值的数组最小下标函数赋值的数组最小下标与与Option Base n 无关,数组无关,数组元素下标总是从零开始元素下标总是从零开始第4章 数组与自定义类型第第 59 页页4.3 输出数组元素的方法输出数组元素的方法1. 一维数组一维数组 一般通过单层循环将各数组元素输出在一行或一一般通过单层循环将各数组元素输出在一行或一列,如果数据

55、量大,可以使用分行控制输出在一屏中。列,如果数据量大,可以使用分行控制输出在一屏中。2. 二维数组二维数组 一般通过双层循环将各行列元素按行列输出,代码一般通过双层循环将各行列元素按行列输出,代码如下:如下: For i = LBound(a, 1) To UBound(a, 1) 行循环 For j = LBound(a, 2) To UBound(a, 2) 列循环 Print a(i, j); 由行号和列号确定输出的元素 Next j Print 一行输出结束后换行 Next i第4章 数组与自定义类型第第 60 页页例例4-10:假设有一个数组,内有:假设有一个数组,内有10个元素,按

56、照由小个元素,按照由小到大顺序将他们进行排列。(用到大顺序将他们进行排列。(用Rnd产生这十个元素)产生这十个元素)第一种方法:比较交换法第一种方法:比较交换法Private Sub Form_Click() Dim a(1 To 10) As Integer, i%, j%, t% Print 排序前:排序前: For i = 1 To 10 a(i) = Int(Rnd * 51) + 50 Print a(i); Next i Print7 6 8 10 20 2 3 19 5 第4章 数组与自定义类型第第 61 页页For i = 1 To 9 For j = i + 1 To 10

57、If a(i) a(j) Then t = a(i): a(i) = a(j): a(j) = t End If Next jNext i Print 排序后:排序后: For i = 1 To 10 Print a(i); Next iEnd Sub缺点:交换次数太多,效率低!缺点:交换次数太多,效率低!第4章 数组与自定义类型第第 62 页页第二种方法:选择排序法第二种方法:选择排序法在整个过程中只记录比较结果,并不立即交换数据,当在整个过程中只记录比较结果,并不立即交换数据,当一轮比较结束后再进行交换。一轮比较结束后再进行交换。 For i = 1 To 9 p = i For j =

58、i + 1 To 10 If a(p) a(j) Then p = j Next j If p i Then t = a(i): a(i) = a(p): a(p) = t End If Next i第4章 数组与自定义类型第第 63 页页例例4-11:给定一组数:给定一组数15,8,4,13,6,10,17,1,从键盘输入一个数,用顺序查找法找出该数在数组总的位从键盘输入一个数,用顺序查找法找出该数在数组总的位置置Option Base 1Dim a(), m%, n%, i%Private Sub Form_Load() Show a = Array(15, 8, 4, 13, 6, 10

59、, 17, 1) m = LBound(a) n = UBound(a) Print 数组元素如下:数组元素如下: For i = m To n Print a(i) Next i PrintEnd SubShow是窗体的一个方法,是窗体的一个方法,省略的话在窗体的省略的话在窗体的Load事事件中要用件中要用print方法输出的方法输出的内容将看不到!内容将看不到!第4章 数组与自定义类型第第 64 页页Private Sub Form_Click() Dim x%, p As Boolean x = InputBox(请输入要查找的数!请输入要查找的数!) p = False For i =

60、 m To n If a(i) = x Then p = True: Exit For Next i If p = True Then Print 在数组中的第在数组中的第 & i & 位找到了该数!位找到了该数! Else Print 没有在数组中找到这个数!没有在数组中找到这个数! End IfEnd Sub第4章 数组与自定义类型第第 65 页页例例4-12 将由键盘输入的一个数据插入到一个排好序的将由键盘输入的一个数据插入到一个排好序的数列中,使其仍然保持有序。数列中,使其仍然保持有序。Dim a()Private Sub Form_Load() a = Array(1, 3, 5, 7, 9, 10, 12, 14, 16, 18) Show Print 初始数据:初始数据: For i = 0 To UBound(a) Print a(i); Next i PrintEnd Sub第4章 数组与自定义类型第第 66 页页Private Sub Fo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论