五章数组.ppt
《五章数组.ppt》由会员分享,可在线阅读,更多相关《五章数组.ppt(66页珍藏版)》请在三一办公上搜索。
1、第五章 数组,2,掌握数组的定义和使用 掌握动态数组的定义和使用 掌握控件数组的建立和使用 掌握常用算法,教学要求,3,教学内容,5.1 数组的概念5.2 数组的基本操作5.3 动态数组5.4 控件数组 5.5 程序示例,4,5.1 数组的概念,5.1.1 数组命名与数组元素5.1.2 数组定义5.1.3 数组的结构5.1.4 数组函数及数组语句,5,基本概念 前面所说的变量都是指简单变量,即一个变量名对应一个存储单元,只能存储一个值,各个变量之间无关联。本章我们要介绍的是一种下标变量数组,是通过一个数组名和下标的组合来表示多个值。用一个相同的名字引用一组变量的数据。数组,是VB支持的一种复合
2、结构的数据类型。数组,是用于保存一组具有相同数据类型的有序的变量的集合。,6,5.1.1 数组命名与数组元素,命名规则与简单变量相同。(参阅P45)数组名不是代表某一变量,而是一组变量。数组元素:由数组名和该元素在数组中的编号(索引、下标)唯一确定,下标是连续的整数。数组元素的一般形式:数组名(下标1,下标2,)数组的维数:一维数组只需一个下标即可唯一确定一个数组元素多维数组有两个或两个以上下标的数组,每个下标对应一个“维”。,7,5.1.2 数组定义,数组必须先定义后使用。定义数组时,确定其名称、数据类型、维数、每一维的上、下界。数组定义时,系统分配连续的内存空间,用于依次保存所有数组元素。
3、固定大小数组与动态数组。,8,1、数组说明语句,格式:Public|Private|Static|Dim 数组名(To,To,)As 类型说明:声明关键字决定作用域,见下页 TO 决定了每一维的大小,下界指下标的最小值,上界指下标的最大值,其中 TO可省略,此时,默认下界是0。我们习惯于下标是从1开始,可在模块的“通用”声明段中使用如下语句 Option Base 1 则在缺省下界的情况下,默认下界是1。,9,注意:全局数组、全局符号常量和全局定长字符串只能在标准模块中定义,10,举例,-Dim a(6)as integerPrivate Name(1999 to 2002)as string
4、*8Dim b(2,1 to 2)as integer,注意:在声明语句中的A(6)是数组说明符,而在程序其他语句出现的A(6)是一个数组元素。,数组元素分别为:a(0)、a(1)、a(2)、a(3)、a(4)、a(5)、a(6),共7个,数组元素分别为:name(1999)name(2000)name(2001)name(2002),用于保存长度为8的字符串数据。,数组元素分别为:b(0,1),b(0,2),b(1,1),b(1,2),b(2,1),b(2,2),11,2 数组的上、下界,上、下界表示下标的最大、最小值;下界上界;在固定大小数组定义时,上、下界是常量或常量表达式,不得是变量;
5、上、下界应是整数,若不是,则自动四舍五入。,举例:Dim m as integer Const n=5 as integer Dim a(n)as integer Dim b(1 to 6.6)as integer Dim c(1 to 2*3)as integer Dim d(0 to m)as integer,12,3 数组的类型,可为任一简单数据类型4 数组的大小指数组中包含元素的个数。一维数组元素个数:上界-下界+1二维数组元素个数:(上界1-下界1+1)*(上界2-下界2+1),13,5.1.3 数组的结构,数组的所有元素是按一定顺序存储在连续的存储单元的。1.一维数组的结构例:Di
6、m stra(3)逻辑结构:(stra(0),stra(1),stra(2)stra(3)存储结构:按照下标从小到大依次存储,14,2 二维数组的结构,例:Option base 1 Dim y(3,4)as integer逻辑结构:y(1,1),y(1,2),y(1,3),y(1,4)y(2,1),y(2,2),y(2,3),y(2,4)y(3,1),y(3,2),y(3,3),y(3,4)存储结构:“按列存放”,15,3 三维数组的结构,行、列和页组成的三维表。逻辑结构:见书P88 存储结构:“逐页逐列”,16,5.1.4 数组函数及数组语句1、返回上、下界函数:上界:UBound(数组名
7、,d)下界:LBound(数组名,d)说明:d代表维数。省略时表示返回第一维的值。,Dim A(5)As Integer,B(2,3 to 5)As Integer a1=LBound(A)a1=UBound(A)b1=LBound(B,1)b2=LBound(B,2)b3=UBound(b,1)b4=UBound(b,2)Print a1;a2;b1;b2;b3;b4,结果:0 5 0 3 2 5,举例:,17,格式:Erase a1,a2,.功能:对普通数组初始化(按数组类型给元素赋初值),对动态数组进行存储空间释放。例:p.89,Option Base 1Private Sub Form
8、_Click()Dim a(3)As Integer a(1)=1:a(2)=2:a(3)=3 Print a(1),a(2),a(3)Erase a Print a(1),a(2),a(3)End Sub,(3)Erase 初始化数组语句,18,格式:For Each Element In 语句块Exit For语句块 Next Element功能:依次(存储次序)处理每一个数组元数,直到数组结束。说明:Element是Variant变量,它逐个地代表数组中的每一个变量。,(4)For Each-Next 数组循环结构,19,Private Sub Form_Click()Dim E(2,3
9、)As Integer,V As Variant Dim i As Integer,j As Integer For i=1 To 2 For j=1 To 3 E(i,j)=i*10+j Next j Next i For Each V In E Print V;Next VEnd Sub,请注意:只能一行或一列输出,不能以矩阵形式输出。参见p90,例:,处理顺序为该数组的存储顺序按列!,20,5.2 数组的基本操作,5.2.1 数组元素的赋值5.2.2 数组元素的输出5.2.3 数组元素的引用,21,5.2.1 数组元素的赋值,1 用赋值语句给单个数组元素赋值。Dim score(3)as
10、 integer score(1)=90:score(2)=80:score(3)=68 2 在循环结构中,用赋值语句逐一给数组元素赋值。Dim a(1 to 6)as integer For i=1 to 6 a(i)=int(99*rnd)+1 Next i 3 在循环结构中,利用Inputbox函数给数组元素赋值。,Dim a(1 to 6)as integer For i=1 to 6 a(i)=inputbox(“请输入a(”&I&”)”,”数组赋值”)Next i,一维数组用一层循环结构,22,格式:变体变量名=Array(n1,n2,.)功能:将一个变体型变量创建成为一个一维数组
11、,并包含指定的元素。元素的引用方式与一般数组一样。注意:Array赋值函数只能给变体型变量赋值。不能给其他类型的变量及任何类型的数组赋值。,Option Base 1Private Sub Form_Click()Dim a As Variant,b As Integer a=Array(1,2,3,4,5,6,7,8,9,10)Print a(1),a(5),a(10)a=Array Print a b=Array(1,2,3,4,5,6,7,8,9,10)End Sub,4、Array赋值函数,23,5.2.2 数组元素的输出,用Print方法显示在窗体或图片框上赋值给文本框的Text属性
12、,在文本框中显示调试时,调用Debug的Print方法在“立即”窗口中显示5.2.3 数组元素的引用 注意:在引用数组元素时,元素的下标一定要在定义的上下界范围之内,否则“数组越界”出错。,24,Option Base 1Private Sub Form_click()Dim compare(12)As Integer,i As Integer Dim max As Integer,min As Integer Randomize For i=1 To 12 compare(i)=Int(90*Rnd)+10 Print compare(i);Next i Print Print 最大数是;m
13、ax Print 最小数是;minEnd Sub,max=compare(1):min=compare(1)For i=2 To 12 If compare(i)max Then max=compare(i)ElseIf compare(i)min Then min=compare(i)End IfNext i,例5-1 产生12个两位数,从中找出最大值、最小值,25,例:有一个一维数组a(20),要求按照每行6个元素的格式输出。数组元素为100-200之间的随机数。,Option Base 1Private Sub Form_Click()Dim a(20)As Integer Dim i
14、As Integer,j As Integer For i=1 To 20 a(i)=Int(101*Rnd)+100 Next iEnd Sub,For i=1 To 20 Print a(i);j=j+1 Next i,If j Mod 6=0 Then Print,26,二维数组引用必须用二重循环实现,Option ExplicitOption Base 1Private Sub Form_Click()Dim i As Integer,j As Integer Dim a(3,4)As Integer Randomize For i=1 To 3 For j=1 To 4 a(i,j)
15、=Int(Rnd*31+20)Next j Next i For i=1 To 3 For j=1 To 4 Print a(i,j);Next j Print Next iEnd Sub,程序分析:程序执行时,计数变量i和j的变化为:i=1时,j从1变化到4,结束内层循环,i变成2i=2时,j从1变化到4,结束内层循环,i变成3i=3时,j从1变化到4,结束内层循环,i变成4结束外层循环。循环变量(i,j)的变化过程为(1,1)(1,2)(1,3)(1,4)(2,1)(2,2)(2,3)(2,4)(3,1)(3,2)(3,3)(3,4)正好和二维数组引用的下标一致。,例:二维数组的赋值与输出
16、,For i=1 To 3 For j=1 To 4 Picture1.Print a(i,j);Next j Picture1.Print Next i,For i=1 To 3 For j=1 To 4 s=s&a(i,j)Next j s=s&Chr(13)&Chr(10)Next IText1.Text=s,27,例:下列程序完成在窗体上输出二维数组每行元素之和。回答问题:1、程序有没有错?2、错在哪里?3、输出语句应出现在什么地方?,Option Base 1Private Sub Form_Click()Dim a(4,5)As Integer Dim i As Integer,j
17、 As Integer Dim sum As Integer For i=1 To 4 For j=1 To 5 a(i,j)=Int(101*Rnd)+100 Print a(i,j);Next j Print Next i Print For i=1 To 4 For j=1 To 5 sum=sum+a(i,j)Next j Next I Print 第;i;行元素之和为:;sumEnd Sub,Sum=0,Print 第;i;行元素之和为:;sum,程序执行结果界面,28,有关二维数组的常见问题:,转置求对角线元素之和求周边元素之和求上、下三角形元素之和求鞍点、最大、最小元素二维数组相
18、乘,29,Option Base 1Private Sub Form_Click()Dim i As Integer,j As Integer,a(3,4)As Integer Randomize For i=1 To 3 For j=1 To 4 a(i,j)=Int(Rnd*31+20)Print a(i,j);Next j Print Next IEnd Sub,例:产生一个3行4列的矩阵,数据为20,50之间的随机数,然后将矩阵转置输出。,For i=1 To 4 For j=1 To 3 Print a(j,i);Next j Print Next i,For j=1 To 4 Fo
19、r i=1 To 3 Print a(i,j);Next j PrintNext i,思考题:求n阶方阵的转置矩阵,并输出?,30,1、分别求一个3*3二维数组的主、付对角线元素之和。2、求二维数组周边元素之和。,练 习,31,5.3 动态数组,定义:在程序运行过程中,可重新定义大小的数组。说明语句:Dim 数组名()as 类型 在变量说明部分 ReDim Preserve(维界定义)在可执行语句中,Private Sub Form_Click()Dim Pin()As Integer 说明整型的动态数组PinDim x as IntegerX=Val(Text1.text)ReDim Pin
20、(x)重新说明数组Pin.End Sub,注意:-Redim 是可执行语句,只能出现在过程中-重新定义动态数组时,不能改变数据类型-重定义时,维界定义中可以有变量,32,-如果Redim重定义的数组不存在,则相当于一个说明语句-当缺省Preserve参数时,定义后,原来存储在数组中的数据全部丢失,此时可重新定义数组的维数和各维的上下界。-当有Preserve参数时,可保留原数组中的数据,但不能改变数组的维数,且只能改变最后一维的维上界。-用Dim语句声明过的数组,只是一个空数组,系统并没有给它分配内存空间,此时,不能对数组元素进行存取操作,否则出错。必须用ReDim语句重新定义其大小,系统才给
21、它分配内存,用户才能对此数组元素进行操作。,说 明,33,举例:,Option base 1Dim dynarry()as integerDim x as integer,y as integerDynarry(1)=1 Redim dynarry(9)Dynarry(1)=1x=2:y=4Redim dynarry(x,y)Dynarry(1,1)=1Erase dynarryDynarry(1,1)=1,非法语句,出错,给一维数组元素赋值,给二维数组元素赋值,非法语句,出错,34,Option ExplicitOption Base 1Private Sub Form_Click()Dim
22、 i As Integer,a()As Integer ReDim a(4)For i=1 To 4 a(i)=i Print a(i);Next i Print ReDim Preserve a(6)a(5)=5 a(6)=6 For i=1 To 6 Print a(i);Next iEnd Sub,如果省去 Preserve,会怎样?,举 例,35,例:找出1000以内的所有完数并以指定的格式在列表框中输出。所谓完数,是指它的所有的质因子之和等于它本身的数,如6=1+2+3。,解题思路:第一步:找出确定一个数是完数 的方法;第二步:从1到1000依次判断。算法实现:两层循环:内层循环用于
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组

链接地址:https://www.31ppt.com/p-5447850.html