VB程序设计数组课件.ppt
Visual Basic 程序设计,1,精选课件ppt,Visual Basic 程序设计1精选课件ppt,目 录,前言,第1讲,第2讲,第3讲,第4讲,第5讲,第6讲,第7讲,第8讲,第9讲,第10讲,第11讲,第12讲,第13讲,第14讲,第15讲,第16讲,2,精选课件ppt,目 录前言第1讲第2讲第3讲第4讲第5讲第6讲第7讲第8讲第,回顾上一讲学习的内容,判断条件执行循环WhilewendDo WhileLoopDo UntilLoopDo Loop WhileDo Loop Until,3,精选课件ppt,回顾上一讲学习的内容判断条件执行循环3精选课件ppt,上机实验中的问题,求累加和SUM=SUM+K (sum的初始值一定是0)求连乘SUM=SUM*K(sum的初始值一定是1)程序填空题:特别要注意选择结构和循环结构的完整性。,4,精选课件ppt,上机实验中的问题求累加和4精选课件ppt,第六章 数组 (4学时),6.1 数组的引入6.2 数组的声明6.3 动态数组及声明6.4 数组的基本操作6.5 控件数组6.6 自定义数据类型6.7 数组应用6.8 常见错误,5,精选课件ppt,第六章 数组 (4学时)6.1 数,1.数组概念例6.1 求一个班36个学生的平均成绩,然后统计高于平均分的人数。按以前简单变量的使用和循环结构相结合,求平均成绩程序段如下: aver = 0 For i = 1 To 36 mark = InputBox(输入第 + i + 位学生的成绩) aver = aver + mark Next i aver = aver / 100,6.1 数组的引入,6,精选课件ppt,1.数组概念6.1 数组的引入6精选课件ppt,若要统计高于平均分的人数,则无法实现。mark是一个简单变量,存放的是最后一个学生的成绩。已有知识解决方法:再重复输入成绩,这样又带来两个问题: (1)输入数据的工作量成倍增加; (2)若本次输入的成绩与上次不同,则统计的结果不正确。解决此问题的根本方法,需引入数组,保存输入的数据,一次输入,多次使用。,7,精选课件ppt,若要统计高于平均分的人数,则无法实现。mark是一个简,数组的概念,具有相同类型的一组变量作为一个整体,称为数组。数组占据一块内存区域,数组名是这个区域的名称,区域中的每个内存单元都有自己的地址,该地址用下标表示,即标识了数组中的每个元素。,定义数组的目的就是通知系统为其留出所需要的空间,且同名数组中的元素按一定的顺序连续存放。,8,精选课件ppt,数组的概念具有相同类型的一组变量作为一个整体,称为数组。定义,数组的概念,数组是用一个统一的名称表示的、顺序排列的一组内存变量。数组中的每个变量称为数组元素,用不同的数字(下标)来标识它们,因此数组元素又称为下标变量。 如果每个数组元素只有一个下标,则称这个数组为一维数组。有两个下标的数组称为二维数组。,VB中规定:数组必须先声明后使用,不允许使用隐含定义。,9,精选课件ppt,数组的概念数组是用一个统一的名称表示的、顺序排列的一组内存变,2.数组的逻辑结构和存储结构,例如:声明一维整型数组N(8) Dim N%(8)N(8)在内存中排列示意图:,例:从键盘随意输入8个数,将这8个数从大到小排列输出。,10,精选课件ppt,2.数组的逻辑结构和存储结构例如:声明一维整型数组N(8),二维数组的逻辑结构,二维数组的逻辑结构:可以看成一个二维表格或看成一个矩阵。数组元素的第一个下标值表示该元素在表格中的行号,第二个下标值表示该元素在表格中的列号。 例如:声明二维数组:DIM W%(4,3),11,精选课件ppt,二维数组的逻辑结构二维数组的逻辑结构:可以看成一个二维表格或,二维数组的存储结构,数组的存储结构:按行为主序存储。,12,精选课件ppt,二维数组的存储结构数组的存储结构:按行为主序存储。W(0,0,VB中,使用4个关键字声明数组,它们格式相同,只是适用范围不同而已。Dim 用在窗体模块或标准模块中,也可用于过程ReDim 用于过程中Static 用在过程中Public 用在标准模块中,定义全局数组。 VB中,数组又有两种情况: 静态(定长)数组 动态(可变长)数组,6.2 数组的声明,13,精选课件ppt,VB中,使用4个关键字声明数组,它们格式相同,只是适用范,1.静态数组,定义数组时,明确了数组的维数,及每维下标的上下界,这种数组称为静态数组。静态数组:计算机在程序执行之前,进行编译时就根据数组说明语句开辟了固定的内存区,直到程序执行完毕。声明静态数组,下标必须用数值常数或符号常量。,14,精选课件ppt,1.静态数组定义数组时,明确了数组的维数,及每维下标的上下界,2.静态数组声明,静态数组声明语句形式(以dim为例) : Dim 数组名(下标1,下标2) As 类型声明了数组的名、维数、大小、类型维数:有N个下标称为N维数组,N=1,2,最多60维。下标: 下界 To 上界 省略下界默认为0,下标必须为常数每一维大小: 上界-下界+1数组大小: 每一维大小的乘积,15,精选课件ppt,2.静态数组声明静态数组声明语句形式(以dim为例) : 1,例:dim x(9) as integerdim a(10,10) as long说明:(1)对于数组的每一维,可以只给出使用的下标的最大值,即下标的上界。此时,默认下标下界为0。(2)如果需要数组的下标下界从1开始,可以:dim x%(1 to 9),a&(1 to 10,1 to 10)或使用option base语句:option base 1,说明:Option base语句只能出现在窗体通用段或标准模块中,不能出现在过程中,且必须在数组定义语句之前。默认下标值对每一维都有效。,数组声明语句格式1,16,精选课件ppt,例:dim x(9) as integer说明:数组声明语,数组声明语句格式2,Dim 数组名(下界 To 上界,下界 To上界) As 类型说明:此格式可以自由定义下标的下界和上界。 例:dim a(-2 to 10) as integerdim b(10 to 100) as longdim c(1 to 10 , 11 to 20) as single数组下界上界的测试函数LBound(数组,维)、UBound(数组,维)默认数组数据类型为Variant的数组称默认数组。定义时省略As类型说明。数组中元素的类型可以不同。,17,精选课件ppt,数组声明语句格式2Dim 数组名(下界 To 上界,例1:Dim mark(1 to 100) As Integer例2:Dim lArray( 0 To 3,0 To 4) As Long等价于: Dim lArray(3,4) As Long声明了Larray数组共有20( 45)个元素,18,精选课件ppt,例1:Dim mark(1 to 100) As Integ,注意:(1)声明静态数组,下标为常数表达式,不能是变量。 n =Inputbox(“输入n”)Dim x(n) As Single(2)数组声明语句中的下标说明了数组的整体,即每一维的大小;而在程序其他地方出现的下标表示数组中的一个元素。两者写法形式相同,但意义不同。例如: Dim x(10) As Integer 声明了x数组有11个元素 x(10)=100 对x(10)这个数组元素赋值,19,精选课件ppt,注意:19精选课件ppt,给数组中的各元素赋初值的操作称为“数组的初始化”。使用dim定义的静态数组,数值型的初始化为0,字符型的初始化为空串,变体类型为Empty。,20,精选课件ppt,给数组中的各元素赋初值的操作称为“数组的初始化”。20精选课,6.3 动态数组,声明数组时,没有说明数组的大小,这种数组称为动态数组。动态数组:在程序未运行时,动态数组不占用内存,计算机在执行过程中才给数组开辟存储空间,当不需要时,可以用Erase语句删除它,收回分配给它的内存区,需要时还可以用Redim语句再次分配存储区。动态数组可以用已经赋值的变量定义下标范围。,21,精选课件ppt,6.3 动态数组声明数组时,没有说明数组的大小,这种数组称,动态数组的定义和声明,动态数组定义首先在窗体、标准模块或过程中用Dim、Public声明一个没有下标的数组。再在过程中用ReDim语句定义带下标的数组。ReDim语句格式如下: ReDim Preserve 数组名(下标,下标2) As 类型例: Sub Form_Load( ) Dim sArray( ) As Single ReDim sArray(4,8) End Sub,22,精选课件ppt,动态数组的定义和声明动态数组定义22精选课件ppt,动态数组声明的几点说明:,(1)Dim、Private、Public变量声明语句是说明性语句,可出现在过程内或通用声明段;ReDim语句是执行语句,只能出现在过程内。(2)在过程中可多次使用ReDim来改变数组的大小,也可改变数组的维数。(3)每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数用来保留数组中的数据,但使用Preserve只能改变最后一维的大小,前面几维大小不能改变。(4)ReDim中的下标可以是常量,也可以是有了确定值的变量。,23,精选课件ppt,动态数组声明的几点说明:(1)Dim、Private、Pub,6.4 数组的基本操作,数组元素的赋值赋值语句使用For循环和InputBox函数来赋值使用array函数数组元素的引用数组名(下标)数组元素的输出使用Print方法实现,24,精选课件ppt,6.4 数组的基本操作 数组元素的赋值24精选课件ppt,(1)用循环和赋值语句 For i = 1 To 10 iA(i)=i 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获得。,1.数组元素的赋值,25,精选课件ppt,(1)用循环和赋值语句注意:1.数组元素的赋值25精选课件p,格式:数组变量名array(数组元素值表)功能:把一组数据赋给数组中每个元素。说明:数组元素值表是一个用逗号分隔的值表;Array函数仅适用于一维数组使用array函数创建的数组,其下界受Option base语句指定的下界的限制。若不提供参数 ,则创建一个长度为0的数组。,Array函数,数组变量名是预先定义的数组名。在数组变量名后没有括号。采用变量定义形式,作为数组使用,类型为variant。,26,精选课件ppt,格式:数组变量名array(数组元素值表)Array函数数,For i = 0 To UBound(a) b(i) = a(i)Next i,注意:赋值号左边的数组只能声明为Variant的可调数组或简单变量。,数组的赋值,在VB6.0中,提供了数组直接对数组的赋值。例如: Dim a( ) As Variant, b( ) As Variant, i% a = Array(1, 2, 3, 4, 5) ReDim b(UBound(a) b = a,27,精选课件ppt,For i = 0 To UBound(a)注意:赋值号左边,Dim Max As Integer, iMax As IntegerDim ia(1 to 10) as integer Max=iA(1):iMax=1For i = 2 To 10 If iA(i)Max Then Max=iA(i) iMax=i End IfNext I,2.数组元素的引用 例1:求数组中的最大元素及所在下标,参看例5交换数组元素:求数组中最大值及所在下标,28,精选课件ppt,Dim Max As Integer, iMax As In,数组元素的引用 例2: 交换数组中各元素,For i =1 To 102 t=iA(i) iA(i)=iA(10-i+1) iA(10-i+1)=tNext I,参看例 数组元素交换,要求是:将数组的第1个元素与最后1个元素交换,第2个元素与倒数第2个交换,以此类推。,29,精选课件ppt,数组元素的引用 例2: 交换数组中各元素For i =1,3. 二维数组的输入和输出,Dim a%(4, 2)For i = 0 To 4For j = 0 To 2 a(i, j) = Val(InputBox(请输入第( Next jPicture1.PrintNext i,30,精选课件ppt,3. 二维数组的输入和输出Dim a%(4, 2)30精选课,数组输入和赋值举例,1、定义两个一维数组A和B,大小相同。要求从键盘输入数据,然后交换A、B中的值后输出。,31,精选课件ppt,数组输入和赋值举例1、定义两个一维数组A和B,大小相同。要求,数组输入和赋值举例,2、定义两个阶数相同的矩阵,求c=a+b,并输出。,32,精选课件ppt,数组输入和赋值举例2、定义两个阶数相同的矩阵,求c=a+b,4.数组的清除,清除数组的语句格式:Erase 数组名,数组名Erase用于静态数组时,若数组是数值型,则所有元素置0;若数组是字符串类型,则所有元素置空字符串。Erase用于动态数组时,将删除整个数组结构并释放数组所占内存。Erase用于变体数组时,每个元素被重置为空Empty,33,精选课件ppt,4.数组的清除清除数组的语句格式:33精选课件ppt,问题讲解,简单变量与数组变量的区别: AIA(I) I=1,2,310,小结:AI代表的是一个简单变量,而A(I)代表的则是以A为名的十个下标变量组成的数组。当I发生变化时,A(I)中的I会随着I值的变化而变化,而AI变量与I毫无关系。,34,精选课件ppt,问题讲解简单变量与数组变量的区别:A(1)A(2)A(3)A,动态数组示例:,例:输入若干个学生的成绩,统计高于平均分的人数。 Dim mark() As Integer, i%, n%, aver n = InputBox(输入学生的人数) ReDim mark(1 To n) 声明存放n个学生成绩的动态数组 aver = 0 For i = 1 To n mark(i) = Int(Rnd * 61 + 40) 通过随机数产生 40 ,100的成绩 aver = aver + mark(i) Next i ReDim Preserve mark(1 To n + 2) 增加两个元素,存放平均分和高于平均分的人数,原来的学生成绩仍保留 mark(n + 1) = aver / n mark(n + 2) = 0 For i = 1 To n If mark(i) mark(n + 1) Then mark(n + 2) = mark(n + 2) + 1 Next i For i = 1 To n Print mark(; i; )=; mark(i) Next i Print 平均分=; mark(n + 1), 高于平均分人数=; mark(n + 2),35,精选课件ppt,动态数组示例:例:输入若干个学生的成绩,统计高于平均分的人数,4.使用数组的注意事项,数组的命名与简单变量的命名规则相同。下标必须用圆括号括起来,即A(5)。不能把数组元素A(5)写成A5。系统默认下标的起始值为0。下标可以是常量、变量或表达式,还可以是数组元素。 如:A(4)=6,B(A(4)就是B(6)。,36,精选课件ppt,4.使用数组的注意事项 数组的命名与简单变量的命名规则相同,使用数组的注意事项,下标应为整数,否则将被自动取整。在同一个运行环境下,数组名不能与简单变量名相同。下标变量的使用与简单变量一样。,37,精选课件ppt,使用数组的注意事项 下标应为整数,否则将被自动取整。在同,本讲小结,本讲重点学习了:数组的概念静态数组和动态数组数组的声明数组的基本操作数组元素的赋值数组元素的引用二维数组的输出数组的清除,要求熟练掌握一维数组和二维数组的定义和应用。,38,精选课件ppt,本讲小结本讲重点学习了:要求38精选课件ppt,作业和实验题目,作业:1.复习教材六章已讲内容;2.预习教材第六章未讲内容。上机实验:1.继续完成实验六、实验七;2.上机完成补充实验二、补充实验三。,39,精选课件ppt,作业和实验题目作业:39精选课件ppt,