第7章数组电子课件 中职 高教版 Visual Basic程序设计(第4版).pptx
第7章 数 组电子课件 中职 高教版 Visual Basic程序设计(第4版)单元七单元七单元七单元七 数数数数 组组组组单元七单元七 数数 组组数数数数 组组组组 基基基基 础础础础 知知知知 识识识识 1 1 1 1静静静静 态态态态 数数数数 组组组组 2 2 2 2动动动动 态态态态 数数数数 组组组组 3 3 3 3控控控控 件件件件 数数数数 组组组组 4 4 4 4常常常常 用用用用 算算算算 法法法法 实实实实 例例例例 5 5 5 57.1 数组基础知识1.什么是数组 在程序在程序设计中,将一中,将一组排列有序、个数有限的数据排列有序、个数有限的数据作作为一个整体,用一个一个整体,用一个统一的名字来表示一的名字来表示,这些有序些有序数据的全体称数据的全体称为数数组。在在VB中,中,为了确定各数据与数了确定各数据与数组中每一元素的一一中每一元素的一一对应关系,必关系,必须给数数组中的中的这些数些数编号,即号,即顺序号序号(用下(用下标来指出来指出顺序号,数序号,数组也称下也称下标变量)。因此,量)。因此,数数组是用一个名字代表是用一个名字代表顺序排列的一序排列的一组数。数。数数组由数由数组名和名和圆括号括号组成,成,圆括号里括起来的是括号里括起来的是顺序号:序号:cj (5)数数组名名 顺序号序号2.数组名的命名规则 数数组名的命名名的命名规则与与简单变量的命名量的命名规则一一样,即,即由由140个字符个字符组成,成,组成的字符可以成的字符可以是字母、数字或小数点,并且必是字母、数字或小数点,并且必须以字母开以字母开头,如果有如果有类型申明符型申明符时,必,必须放在尾部。放在尾部。例如:例如:a,x,xscj%等。等。3.什么是数组的维数数数组中下中下标的个数的个数称称为数数组的的维数数。一一维数数组:数:数组中的所有元素,能按行、列中的所有元素,能按行、列顺序排成序排成一行,即用一个下一行,即用一个下标确定它确定它们各自所各自所处的位置。的位置。二二维数数组:数:数组中的所有元素,能按行、列中的所有元素,能按行、列顺序排成序排成一个矩一个矩阵,用两个下,用两个下标才能确定它才能确定它们所所处的位置。的位置。三三维数数组:由三个下:由三个下标才能确定所才能确定所处位置。位置。依此依此类推,有多少个下推,有多少个下标的数的数组,就构成多少,就构成多少维的的数数组,如四,如四维数数组、五、五维数数组等。通常又把二等。通常又把二维以上以上的数的数组称称为多多维数数组。例如:例如:a(10)一一维数数组 x(2,3)二二维数数组 b(4,5,6)三三维数数组4.什么是数组元素 在同一数在同一数组中,构成中,构成该数数组的元素称的元素称为数数组元素元素。组成数成数组的各个元素一般的各个元素一般为变量,由于量,由于这些些变量共用量共用一个一个变量名,即所在的数量名,即所在的数组名,因此,必名,因此,必须要通要通过下下标才能相互区才能相互区别,故数,故数组元素也称元素也称为下下标变量。量。在在VB中,引用数中,引用数组中的某一元素,要指出数中的某一元素,要指出数组名和名和用括号括起来的数用括号括起来的数组元素在数元素在数组中的位置(中的位置(顺序号)序号)的下的下标。即下。即下标变量的量的标识为数数组名名(下下标表表)例如:例如:a(5)代表数代表数组a中中顺序号序号为5的那个元素。的那个元素。x(12)代表数代表数组x中中顺序号序号为12的那个元素。的那个元素。c(2,3)代表数代表数组c中第中第2排第排第3列的那个元素。列的那个元素。5.数数组的的类型型 VB中,数据有多种数据中,数据有多种数据类型,相型,相应的数的数组也有多种也有多种类型。可以声明任何基本数据型。可以声明任何基本数据类型的数型的数组,包括用,包括用户自定自定义类型和型和对象象变量,但是一个数量,但是一个数组中的所有元素中的所有元素应该具具有相同的数据有相同的数据类型。型。但是,当数但是,当数组类型型为Variant(变体型)体型)时,各个元,各个元素能素能够包含不同包含不同类型的数据(字符串、数型的数据(字符串、数值等)。等)。6.数数组的分的分类 在在VB中,根据数中,根据数组元素的个数能否元素的个数能否变化,数化,数组分分为静静态数数组和和动态数数组。静静态数数组:数:数组元素的个数固定不元素的个数固定不变。动态数数组:数:数组元素的个数在运行元素的个数在运行时可以改可以改变。返回目录7.2 静态数组7.2.1 声明静态数组的语法格式Dim 数数组名名(维数定数定义)As 类型型 (1)维数定数定义指定数指定数组的的维数以及各数以及各维的范的范围:下下标下界下界1To 下下标上界上界1,下下标下界下界2To 下下标上界上界2.如果不指定如果不指定下下标下界下界,则数数组的下界由的下界由Option Base语句控句控制。制。Option Basen 其中,其中,n只能只能为0或或1。如果没有使用如果没有使用Option Base语句,句,则缺省的下界缺省的下界为0。例如:。例如:Dim a(3)As Integer 4个元素,下个元素,下标范范围为0到到3 Dim b(2,3)As Double 12个元素,个元素,34=12 如果使用如果使用Option Base 1语句,句,例如:例如:Option Base 1 缺省下界缺省下界为1 Dim a(3)As Integer 3个元素个元素 Dim b(2,3)As Double 6个元素个元素7.2.2 一维静态数组的程序设计假假设某小某小组有有10个学生,个学生,现在数学在数学课教教师要要计算算这10个个学生的学生的总分、平均分。分、平均分。请编写程序来帮助老写程序来帮助老师进行行计算。算。在事件程序下拉列表框中在事件程序下拉列表框中选“(声明声明)”,输入下面代入下面代码:Option Base 1Dim a(1 To 10)As SinglePrivate Sub Command1_Click()Dim i As Integer,total As Single,average As Single For i=1 To 10 a(i)=Val(InputBox(请输入第入第&Str(i)&个学生的个学生的成成绩,输入成入成绩)total=total+a(i)Next i average=total/10 Label1.Caption=Label1.Caption+Format(total)Label2.Caption=Label2.Caption+Format(average)End Sub7.2.3 二维静态数组的程序设计对两个相同两个相同阶数的矩数的矩阵进行加法运算。提示:两行加法运算。提示:两个相同个相同阶数的矩数的矩阵A和和B相加,是将相相加,是将相应位置上位置上的元素相加后放到同的元素相加后放到同阶矩矩阵C的相的相应位置。位置。在在“通用通用”段声明数段声明数组:Dim a(5,3)As Integer,b(5,3)As Integer编写写“重置重置”按按钮Command1的的Click事件代事件代码为:Private Sub Command1_Click()For n=1 To 5 控制矩控制矩阵行数行数 For m=1 To 3 控制矩控制矩阵列数列数 x=Int(Rnd*100):a(n,m)=Val(x)x=Int(Rnd*100):b(n,m)=Val(x)Next Next Picture1.Cls:Picture2.Cls:Picture3.Cls Picture1.CurrentY=80:Picture2.CurrentY=80 For n=1 To 5 For m=1 To 3 Picture1.Print Format(a(n,m),);Picture2.Print Format(b(n,m),);Next Picture1.Print:Picture2.Print NextEnd Sub “计算算”按按钮Command2的的Click事件代事件代码为:Private Sub Command2_Click()Dim c(5,3)As Integer For i=1 To 5 For j=1 To 3 c(i,j)=a(i,j)+b(i,j)Next Next Picture3.Cls Picture3.CurrentY=80 For n=1 To 5 For m=1 To 3 Picture3.Print Format(c(n,m),);Next Picture3.Print NextEnd Sub7.2.4 数组中的循环语句For EachNext 使用数使用数组中的循中的循环语句句For Each.Next,求,求1+2+3+100的的值。Private Sub Command1_Click()Dim x(100),a For i=1 To 100 x(i)=i Next i For Each a In x()s=s+a Next Label1.Caption=sEnd Sub For Each.Next语句的句的语法格式法格式为:For Each成成员In数数组 语句句组 Exit ForNext 成成员 其中,其中,成成员是一个是一个Variant(变体型)体型)变量,代表数量,代表数组中的每个元素。中的每个元素。数数组是一是一个数个数组名,没有括号和上下界。名,没有括号和上下界。返回目录7.3 动态数组7.3.1 声明动态数组的语法格式 (1)声明一个未指明大小及声明一个未指明大小及维数的数数的数组。语法格式法格式为:Public|Private|Dim|Static 数数组名名()As 类型型 (2)用用ReDim语句分配句分配实际的元素个数。的元素个数。语法格式法格式为:ReDim Preserve 数数组名名(维数定数定义)As类型型 例如,第一次声明在模例如,第一次声明在模块级所建立的所建立的动态数数组a:Dim a()As Integer 然后,在然后,在过程中程中给数数组分配空分配空间:Private Sub Form_Activate().ReDim a(9,19)End Sub 这里的里的ReDim语句句给a分配一个分配一个1020的整数矩的整数矩阵(元素(元素总数数为200)。)。7.3.2 保留动态数组中原数据的方法 在定在定义动态数数组的的过程中,当使用程中,当使用ReDim语句句时,将清,将清除数除数组中的原有数据。但是,有中的原有数据。但是,有时需要改需要改变数数组大小而大小而又不又不丢失数失数组中的数据,中的数据,这时就可以使用就可以使用具有具有Preserve关关键字字的的ReDim语句。句。例如,使用具有例如,使用具有Preserve关关键字的字的ReDim语句的方句的方法来增加数法来增加数组大小,又不大小,又不丢失原数据:失原数据:ReDim a(2,4).ReDim Preserve a(2,6)则原数原数组数据均可保留,且增加数据均可保留,且增加a(1,5)、a(1,6)、a(2,5)、a(2,6)等等4个位置,但却不能声明个位置,但却不能声明ReDim Preserve a(3,4)。7.3.3 动态数组的程序设计在窗体上根据需要在窗体上根据需要输出出杨辉三角形。三角形。Dim a()Private Sub Text1_KeyPress(KeyAscii As Integer)Dim n As Integer If KeyAscii=13 Then n=Val(Text1.Text)If n 10 Then MsgBox 请不要超不要超过10!Exit Sub End If ReDim a(n,n)For i=1 To n a(i,1)=1:a(i,i)=1 Next Print Tab(20);Format(1,!)&Chr(13)Print Tab(18);Format(1,!)&Space(2)&Format(1,!)&Chr(13)For i=3 To n Print Tab(20 i*2);Format(a(i,1),!)&Space(2);For j=2 To i 1 a(i,j)=a(i 1,j 1)+a(i 1,j)Print Format(a(i,j),!);Next Print Space(2)&Format(a(i,i),!)&Chr(13)Next End IfEnd Sub返回目录7.4 控件数组7.4.1 控件数组的概念 控件数控件数组是由一是由一组相同相同类型的控件型的控件组成。其特点是:成。其特点是:(1)具有相同的控件名(即控件数具有相同的控件名(即控件数组名),并以下名),并以下标索引号(索引号(Index)来)来识别各个控件。各个控件。例如,例如,Label1(0)、Label1(1)、Label1(2)、Label1(10),就是一个,就是一个Label控件数控件数组。(2)控件数控件数组中的控件具有相同的一般属性中的控件具有相同的一般属性。(3)控件数)控件数组中的所有控件中的所有控件共用相同的事件共用相同的事件过程程。控件数控件数组的事件的事件过程会返回一个索引号,以确定当前程会返回一个索引号,以确定当前发生生该事件的是哪个控件。事件的是哪个控件。7.4.2 控件数组的建立【第一种方法第一种方法】为控件起相同的名字。控件起相同的名字。可以改可以改变已有控件的名字,将一已有控件的名字,将一组控件建立控件建立为控件控件数数组,具体步,具体步骤如下:如下:(1)画出控件数画出控件数组中要添加的控件(必中要添加的控件(必须为同一同一类型型的控件),并且决定哪一个控件作的控件),并且决定哪一个控件作为数数组中的第一个中的第一个元素。元素。(2)选定控件,将其定控件,将其Name属性属性设置成数置成数组名称。名称。(3)在在为数数组中的其他控件中的其他控件输入相同名称入相同名称时,VB将将显示一个示一个对话框,要求确框,要求确认是否要是否要创建控件数建控件数组。此。此时选择“是是”,确,确认操作。操作。【第二种方法第二种方法】复制复制现有控件有控件。用复制、粘用复制、粘贴的方法建立控件数的方法建立控件数组,具体步,具体步骤如下:如下:(1)画出控件数画出控件数组中的第一个控件。中的第一个控件。(2)当控件当控件获得焦点得焦点时,单击“复制复制”按按钮。(3)单击“粘粘贴”按按钮。VB将将显示一个示一个对话框框询问是否确是否确认创建控件数建控件数组。选择“是是”,确确认操作,将得到控件数操作,将得到控件数组中的第二个控件。中的第二个控件。(4)继续单击“粘粘贴”按按钮,可得到控件数,可得到控件数组中的其他控件。中的其他控件。【第三种方法第三种方法】指定控件的索引指定控件的索引值。可以直接指定控件数可以直接指定控件数组的索引的索引值,来建立控,来建立控件数件数组。其具体步。其具体步骤如下:如下:(1)绘制控件数制控件数组中的第一个控件。中的第一个控件。(2)将其将其Index属性索引属性索引值改改为0。(3)复制控件数复制控件数组中的其他控件。中的其他控件。7.4.3 控件数组的程序设计用用户输入两个数,可以根据入两个数,可以根据选择的不同运算符来的不同运算符来计算出相算出相应的的结果。果。Private Sub Option1_Click(Index As Integer)Dim x As Single,y As Single x=Val(Text1.Text)y=Val(Text2.Text)Select Case Index Index值从从0开始开始 Case 0 加加 Label4.Caption=x+y Case 1 减减 Label4.Caption=x y Case 2 乘乘 Label4.Caption=x*y Case 3 除除 Label4.Caption=x/y Case 4 整除整除 Label4.Caption=X Y Case 5 余数余数 Label4.Caption=x Mod y Case 6 指数指数 Label4.Caption=x y Case Else 字符串字符串连接接 Label4.Caption=x&y End SelectEnd Sub返回目录7.5 常用算法实例7.5.1 倒序输出 将下列将下列12个字符个字符a,b,q,r,s,t,w,x,y,e,m,n存放到数存放到数组中,中,并以倒序打印出来。并以倒序打印出来。Private Sub Command1_Click()Dim x As Integer,a(1 To 12)As String a(1)=a:a(2)=b:a(3)=q:a(4)=r:a(5)=s:a(6)=t a(7)=w:a(8)=x:a(9)=y:a(10)=e:a(11)=m:a(12)=n For x=1 To 12 Label1.Caption=Label1.Caption&a(x)Next x For x=12 To 1 Step-1 Label2.Caption=Label2.Caption&a(x)Next xEnd Sub7.5.2 数据排序 1.选择排序法由由计算机随机算机随机产生生10个数,将个数,将这10个数按从小到大的个数按从小到大的顺序排序。序排序。Private Sub Command1_Click()Dim a(1 To 10)As Single Randomize For i=1 To 10 a(i)=Int(Rnd*90+10)Label1.Caption=Label1.Caption&a(i)&Next i For i=1 To 9 For j=i+1 To 10 If a(j)number(j+1)Then t=number(j+1)number(j+1)=number(j)number(j)=t End If Next j Next i For i=1 To 10 Print number(i);Next iEnd Sub 7.5.3 数组元素的对换 设某数某数组有有20个元素,元素的个元素,元素的值由由键盘输入,要求将入,要求将前前10个元素与后个元素与后10个元素个元素对换。即第。即第1个元素与第个元素与第20个个元素互元素互换,第,第2个元素与第个元素与第19个元素互个元素互换,第,第10个个元素与第元素与第11个元素互个元素互换。输出数出数组原来各元素的原来各元素的值和和对换后各元素的后各元素的值。Private Sub Command1_Click()Dim i As Integer,t As Integer Dim p As String For i=1 To 20 a(i)=InputBox(输入入a(&Format(i,#)&):)Next i For i=1 To 20 p=p&a(i)Select Case i Case 10 p=p&,&Chr(13)Case 20 Case Else p=p&,End Select Next i Label1.Caption=p End SubPrivate Sub Command2_Click()Dim p As String For i=1 To 10 t=a(i):a(i)=a(20 i+1):a(20 i+1)=t Next i For i=1 To 20 p=p&a(i)Select Case i Case 10 p=p&,&Chr(13)Case 20 Case Else p=p&,End Select Next i Label2.Caption=p End Sub7.5.4 计算器的设计设计一个一个简易的易的计算器。算器。新建一个工程,进入窗体设计器,首先增加一个框架控件Frame1,选中Frame1后,在其中增加一个文本框控件Text1、两个命令按钮控件数组Command1(0)Command1(10)和Command2(0)Command2(4)。数字数字类按按钮组Command1()的的Click事件:事件:Private Sub Command1_Click(Index As Integer)If Form1.Tag=T Then If Index=10 Then Text1.Text=0.Else Text1.Text=Command1(Index).Caption End If Form1.Tag=Else Text1.Text=Text1.Text&Command1(Index).Caption End IfEnd Sub在模块的通用段声明变量:在模块的通用段声明变量:Dim v As Boolean Dim s As Integer Dim x As Double Dim y As Double 运运算符算符类类按按钮组钮组Command2()的的Click事件:事件:Private Sub Command2_Click(Index As Integer)Form1.Tag=T If v Then x=Val(Text1.Text)v=Not v Else y=Val(Text1.Text)Select Case s Case 0 Text1.Text=x+y Case 1 Text1.Text=x y Case 2 Text1.Text=x*y Case 3 If y 0 Then Text1.Text=x/y Else MsgBox(不能以不能以0为为除除数数)Text1.Text=x v=False End If Case 4 y=0 v=False End Select x=Val(Text1.Text)End If s=IndexEnd Sub返回目录结束结束返回目录