
vb之数组及其使用课件.ppt
22页单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第7章 数组,西南交通大学峨眉校区,唐加胜,第七章 数 组,本章要求:,1.理解数组的概念,2.掌握数组的定义及其引用,3.掌握控件数组的建立及使用4.理解常用的排序方法本章重点:,数组定义及引用方法,排序算法,本章难点:,动态数组、排序算法,数组是具有相同数据类型的一组有序数据数组中的变量称为数组元素数组元素的表示:,数组名(下标,1,下标,2,),例如:,a(1),、,a(1,2),只有一个下标的数组叫,一维数组,有两个下标的数组叫,二维数组,,,,最多可达,60,维数组在使用前必须先声明,(数组名、类型、维数和数组的大小)数组声明时,,指定了数组的维数和大小,的数组称为,静态数组,没有指定维数和大小,的数组称为,动态数组,前者大小固定,后者在使用前需要重定义7.1 数组的定义和使用,一、数组的定义,静态数组的声明:,格式:,Dim,数组名,(,下界 To,上界,),As 数据类型,也可以使用,Public,和,Private,来定义数组数组定义举例:,Dim,Counter(1 To 14),As Integer,14个元素的局部数组。
Private,Sum(20),As Double,21个元素的模块级数组Dim,x(3,4),as Integer,20个元素的二维数组Dim,A(-5 To 20),As Integer,数组定义说明,数组名的命名规则与变量命名相同一维数组的元素个数:,上界-下界+,1缺省下界为0若希望缺省下界设为1,可在模块的,通用部分,使用语句:,Option Base 1,下界,和,上界,不能使用变量,,必须是常量(整型常量),数组定义后自动获得默认值:数值为0,字符为“”,逻辑为False,一、数组的定义,数组的存放顺序,数组中各元素在内存占一片连续的存储空间二维数组则按先行后列的顺序A(0),A(1),A(2),A(n),.,一维数组,A,在内存中存放的顺序,一维数组,S(2,3),在内存中存放的顺序,1、数组元素的引用,数组的引用通常是指对数组元素的引用格式为:,数组名(下标1,下标2),下标可以是,常量、变量或表达式,,但表达式的值必须介于定义数组时指定的下标的下界和上界之间,否则将导致“下标越界”的错误例如:,A(1)=A(1)+B(1)取数组元素运算,A(i)=B(i)下标使用变量,B(i+1)=A(i+2)下标使用表达式,C(3,4)=100 下标使用常量,二、数组的使用,2、给数组元素赋值,静态数组,只能逐个元素赋值,。
如果赋值有规律,可以使用,循环结构,用=直接赋值,A(1)=10,A(2)=20,如果赋值有规律,使用,循环结构,赋值例如,给数组A(4)的元素赋值,For i=1 To 4,A(i)=i,Next i,通过InputBox函数输入值例如:,For i=1 To 4,A(i)=inputbox(“请输入第”&i&“个整数”),Next,通过文本框输入值例如:,A(1)=Text1.text,A(2)=Text2.text,二、数组的使用,3、数组间的赋值,静态数组之间不能整体赋值,只能逐个元素赋值可使用循环结构可以将一个静态数组整体赋值给一个动态数组,并自动确定动态数组的大小注意:,相互赋值的两个数组的,类型必须相同,例如:,Dim A(4)As,integer,B()As,integer,A(0)=0:A(1)=1:A(2)=2:A(3)=3:A(4)=4,B=A,将A数组整体赋值给B数组且大小确定为54、数组的输出,输出数组中的全部或部分元素,一般使用,循环结构例如:,For i=1 To 4,print A(i),Next i,二、数组的使用,5、For each Next语句,For Each Next 语句与 For Next 语句类似,都是实现循环结构的语。
但 For Each Next 语句是专用于数组和对象集合的语法格式:,For Each,成员,In,数组,循环体,Exit For,Next,成员,成员,:,为一个Variant变量,,在For Each Next 语句中,代表数组中的每个元素,,数组中有几个元素,此成员就重复使用几次,循环体就执行几遍数组,:在此之前经过定义的数组,用在此处时仅仅是一个数组名,没有括号和上下界不能在For Each Next中使用用户自定义数据类型使用For Each Next的好处是不用知道数组的大小和维数,就可输出数组的所有元素二、数组的使用,示例:,Dim A(1 To 4),For Each,x,In,A,Print,x,;,Next,x,求,1!+2!+3!+10!,Private Sub Command1_Click(),Dim a(1 To 10)As Long,sum As Long,t As Long,Dim n As Integer,x,t=1,For n=1 To 10,t=t*n,a(n)=t,Next n,sum=0,For Each,x,In,a,sum=sum+x,Next x,Print 1!+2!+3!+10!=;sum,End Sub,二、数组的使用,7.2 动态数组的声明和使用,动态数组的声明:,Dim,数组名()As 数据类型,动态数组大小的说明:,Redim ,preserve,数组名(,下界 To,上界,),Preserve,:选择Preserve时,保留数组中原来的数据,但只允许ReDim 语句改变动态数组,最后一维的上界,。
例如:,Option Base 1,Dim A()AS integer,Redim A(4,5),Redim Preserve A(4,UBound(Str,2)+4,),注意,:Redim语句可以多次使用,但只能改变数组的维数和大小,,不能改变数组的类型,动态数组举例,输入n个整数,存入动态数组,再输出这些数,与数组有关的函数,Array,函数,Array,函数可以对,Variant,类型,的,动态数组或变量,整体赋值赋值后的数组大小由赋值的个数决定例如,要将,1,3,4,6,7,这些值赋值给数组,a,,可使用下面的方法赋值Dim a(),A=array(1,3,4,6,7),或,Dim a,A=array(1,3,4,6,7),Array函数举例:,自动抽题系统,与数组有关的函数,2.Ubound()和Lbound()函数,格式:,UBound(数组名,N),求数组的上界,格式:,LBound(数组名,N),求数组的下界,N,:可选;一般是整型常量或变量指定返回哪一维的上界1 表示第一维,2 表示第二维,如此等等如果省略默认是1例如:不知道数组A的元素个数,要用FOR循环输出数组A的全部元素值。
For,i=Lbound(a),to,Ubound(a),print a(i),Next i,数据的排序就是将一批数据由小大到,(升序),或由大到小,(降序),进行排列常用的有,选择法、冒泡法1.冒泡法排序:,冒泡排序是常用的一种排序方法假设,n,个元素按递增的顺序排序,排序思想为:,第一轮:,从数组的第一项开始,每一项(,i,),都与下一项(,i+1,),进行比较如果下一项的值较小,就将这两项的位置交换,直到最后第,n-1,与第,n,项进行比较,将最大的数排列在最后第二轮:,从数组的第一项开始,每一项(,i,),都与下一项(,i+1,),进行比较如果下一项的值较小,就将这两项的位置交换,直到最后第,n-2,与第,n-1,项进行比较,将第二大的数排列在倒数第二位依此类推,,直到只有第一项与第二项进行比较交换,完成递增法排序7.3 数组的排序,例:随机产生10个10100的整数,从小到大顺序输出冒泡排序法(升序)程序,Const N=10,Randomize,Dim a(1 To N)As Integer,Print 原始数据:,For i=1 To N 产生10个随机数,a(i)=Int(91*Rnd+10),Print a(i);,Next i,For i=1 To,N-1,For j=1 To,N-i,If a(j)a(j+1)Then,t=a(j):a(j)=a(j+1):a(j+1)=t 交换位置,End If,Next j,Next i,Print:Print 排序结果:,For i=1 To N,Print a(i);,Next i,数组的排序,思考:产生7个0-9之间的随机数如何改程序?,a,b间的数=int(b-a+1)*rnd+a,2.选择法排序(升序),选择法排序是最为简单且易理解的算法,其基本思想是每次将最小(或最大)的数找出来放在序列的最前面。
假设按递增法将有,n,个数的数组,A(1To n),进行排列,步骤为:,(,1,)假定最小值,Temp,,将,Temp,与,A(2),进行比较,若,A(2)a(j)Then,t=a(i):a(i)=a(j):a(j)=t,交换位置,End If,Next j,Next i,Print:Print 排序结果:,For i=1 To N,Print a(i);,Next i,数组的排序,选择法排序(升序)的改进:,For i=1 To N-1,p=i,For j=i+1 To N,If a(p)a(j)Then p=j,Next j,t=a(i):a(i)=a(p):a(p)=t,Next i,7.4 控件数组,控件数组:,具有相同的,名称,和,事件过程,的一组,同类型控件,控件数组中的每一个控件具有一个唯一的索引值,index,属性值,它相当于数组的下标控件数组中的所有控件共享同一事件过程,例如,假定某个控件数组含有5个命令按钮,则不管单击哪个标签,系统都会调用同一个Click过程由于每个按钮在程序中的作用不同,系统会将被单击的按钮的Index属性值传递给过程,由事件过程根据不同的Index值执行不同的操作。
一个控件数组中至少应有一个元素,最多可有32767个控件数组中的每个控件都有自己独立的属性控件数组的建立,复制已有的控件并将其粘贴到窗体上,将窗体上已有的类型相同的多个控件的,Name,属性,(名称),设置为同一值,7.4 控件数组,访问控件数组元素:,控件数组名(index值),如:,Command1(0).Caption=确定,Command1(1).Caption=取消,控件数组的属性,LBound,控件数组下标的下界,如:command1.Lbound,UBound,控件数组下标的上界,如:command1.Ubound,Count,控件数组的个数,如:command1.count,注意:对于控件数组,不能使用Ubound()和Lbound()函数控件数组示例,7.4 控件数组,动态添加控件数组元素,Load,控件数组名(,index,值),注意:,Load,语句中的控件数组必须已经存在,并且添加的控件元素的,index,值不能与其他元素的,index,值重复如:,Load,Command1(,command1.Ubound+1,),Command1(,command1.Ubound+1,).,move 1000,1000,1000,600,Command1(command1.Ubound+1).visible=True,动态删除控件数组元素,UnLoad,控件数组名(,index,值),例如:,unload command1(6),注意:,不能,UnLoad,设计时创建的控件。
