VB程序设计第二版第六章_第1页
VB程序设计第二版第六章_第2页
VB程序设计第二版第六章_第3页
VB程序设计第二版第六章_第4页
VB程序设计第二版第六章_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、16.1 数组的基本概念数组的基本概念6.2 数组的定义数组的定义6.3 数组的基本操作数组的基本操作6.4 数组基本操作示例数组基本操作示例6.5 控控 件件 数数 组组通常使用一个变量只能存储一个数据,对于只处理少量数据的问题,使用若干变量就可以很方便地处理这些数据。在实际问题中往往会有大量的、性质相同的、有序的数据需要处理。使用数组,结合循环,在多数场合下可以很方便地表示和处理这种数据。2n数组名:数组用于表示一组类型相同的有序的数,这一组数用一个统一的名称来表示,称为数组名。例如,100个学生的英语成绩,可以统一取名为Eng。n数组元素:数组中的每一个元素称为数组元素。表示成:数组名(

2、下标)。 例如,用Eng(1)表示第一个学生的英语成绩(下标为1),用Eng(100)表示第100个学生的英语成绩(下标为100)。3n下标变量:每个数组元素用来保存一个数据,其使用与简单变量类似,在简单变量允许出现的多数地方也允许出现数组元素。例如,可以通过X=90给简单变量X赋值,同样也可以通过Eng(1)=90给数组元素Eng(1)赋值,所以,数组元素也称为下标变量。4注意:(1)要用圆括号把下标括起来。例如,将X(8)表示成:X8、X8、或X8都是错误的。(2)下标可以是常量、变量或表达式,其值必须是整数,否则将被自动四舍五入为整数。(3)下标的最小取值称为下界,下标的最大取值称为上界

3、,下界和上界的大小在定义数组时确定。引用数组元素时,下标必须在其下界和上界之间。(4)数组名的命名规则与简单变量的命名规则相同。5VB中数据类型较多,相应的数组类型也有多种,可以声明任何基本数据类型的数组,包括用户自己定义类型和对象变量,但是一个数组中的所有元素应该具有相同的数据类型。特殊情况:当数据类型为variant时,各个元素能够包含不同类型的数据。6VB中支持两种数组:静态数组和动态数组。前者指的是数组元素个数固定不变,而后者的大小在运行时可变。7 数组中的元素可以用一个下标来定位,也可以用多个下标来定位。数组的维数:下标个数 一维数组: 由一个下标组成。 如 A(2),C(6) 二维

4、数组: 由两个下标组成。 如 B(2,3) 三维数组: 由三个下标组成。 如 G(3,4,23) 三维以上的数组称为多维数组,最多60维8例如:一班40名学生的英语成绩可以表示成Eng(1)、Eng(2)、Eng(3)、Eng(40),用Eng(1)表示1号学生的成绩,用Eng(2)表示2号学生的成绩,这样处理起来很直观,需要引用第I个学生的成绩时,直接使用Eng(I)即可。9设有一个3行3列的矩阵: 333231232221131211aaaaaaaaa10 用二维数组用二维数组A表示该矩阵的所有元素表示该矩阵的所有元素,用第用第1个下标表示元素所在的行号,用第个下标表示元素所在的行号,用第

5、2个下标个下标表示元素所在的列号,则表示元素所在的列号,则A(I,J)表示第)表示第I行第行第J列的元素列的元素 A。a( 1,1) a(1,2) a(1,3)a( 2,1) a(2,2) a(2,3)a( 3,1) a(3,2) a(3,3) 数组在使用之前必须先定义(声明) ,定义数组的主要目的是为数组分配存储空间。n数组名:存储空间的名称;n数组元素:存储空间的每一个单元。每个单元的大小与数组的类型有关。 按数组占用存储空间的方式不同,Visual Basic有两种数组:n静态数组n动态数组 两种数组的定义方法不同,使用方法也略有不同。11 静态数组是指数组元素的个数在程序的执行期间不能

6、改变的数组。12Public|Private|Dim 数组名数组名(维数定义维数定义) As 类型类型,功能功能:声明数组,包括确定数组的名称、维:声明数组,包括确定数组的名称、维数、每一维的大小和数组元素的类型,并为数、每一维的大小和数组元素的类型,并为数组分配存储空间。数组分配存储空间。格式:格式:说明:13(1)数组的作用域)数组的作用域n在模块通用声明段使用在模块通用声明段使用Public语句建立一语句建立一个个全局级数组全局级数组(注意,不能在窗体模块使(注意,不能在窗体模块使用用Public定义数组);定义数组);n在模块通用声明段中使用在模块通用声明段中使用Private语句或语

7、句或Dim语句建立一个语句建立一个模块级数组模块级数组n在过程中用在过程中用Dim/static语句建立一个语句建立一个过程级过程级数组数组。(2)“数组名数组名”必须符合标识符的命名规必须符合标识符的命名规则。则。(3)“维数定义”形式为: 下界1 To 上界1,下界2 To 上界2,14Option Base 0|1在编译时为静态数组分配固定大小的存储空在编译时为静态数组分配固定大小的存储空间,在运行期间静态数组的大小不能改变。间,在运行期间静态数组的大小不能改变。例1:要存储100个学生的英语成绩,可以定义一维数组Eng如下: Dim Eng(1 to 100) As Integer或:

8、 Option Base 1 Dim Eng(100) As Integer例2:存储一个3行3列的矩阵,定义二维数组A如下: Dim A(1 To 3, 1 To 3) As Single 15数组元素的个数:16数组元素的个数等于每一维的大小之积,数组元素的个数等于每一维的大小之积,即即n维数组元素个数为:维数组元素个数为:(上界上界1-下界下界1+1) (上界上界2-下界下界2+1) (上界上界n-下界下界n+1) 动态数组是指在程序执行过程中数组元素的个数可以改变的数组。 使用动态数组就可以在任何时候改变其大小,并且可以在不需要时清除动态数组所占的存储空间。17181.在模块级或过程级

9、定义一个无下标的数组:在模块级或过程级定义一个无下标的数组:Public|Private|Dim 数组名数组名()As 类型类型,2.在过程级定义数组的实际大小。在过程级定义数组的实际大小。ReDim Preserve 数组名数组名(维数定义维数定义) As 类型类型, 定义动态数组需要分两步完成:定义动态数组需要分两步完成:例如,定义一个动态数组Eng,用来保存学生的英语成绩。19Dim Eng( ) As Integer Private Sub Command1_Click( ) N = Val(InputBox(请指定学生人数请指定学生人数) ReDim Eng(1 To N) End

10、Subn可以用ReDim语句多次改变数组元素的数目及维数的数目。n在定义动态数组的两个步骤中,如果用步骤1定义了数组的类型,则不允许用步骤2改变类型。n每次执行ReDim语句时,如果不使用Preserve,则数组中的值全部被重新初始化;如果使用Preserve,则保留数组中原有的元素值。n使用Preserve关键字的Redim语句只能改变多维数组中最后一维的上界,且不能改变维数的数目。20说明:说明:Dim A() As Integer Private Sub Command1_Click() N = 4 ReDim A(N) For I = 0 To N A(I) = 1: Print A(

11、I); Next I Print N = 8 ReDim A(N) For I = 0 To N Print A(I); Next I End Sub21运行时输出结果为:运行时输出结果为:1 1 1 1 10 0 0 0 0 0 0 0 0Dim A() As Integer Private Sub Command1_Click() N = 4 ReDim A(N) For I = 0 To N A(I) = 1: Print A(I); Next I Print N = 8 ReDim Preserve A(N) For I = 0 To N Print A(I); Next I End

12、Sub22运行时输出结果为:运行时输出结果为:1 1 1 1 1 1 1 1 1 1 0 0 0 0用户自定义类型的数组:指数组中的每个元素的类型都是用户自定义类型。23例如:例如: 学生成绩表学生成绩表Type StudScore StudNumber As String * 2 StudName As String * 10 Math As Integer English As IntegerEnd Type24(2)定义一个具有)定义一个具有StudScore类型的数组:类型的数组:Dim Score(1 To 40) As StudScore25Score(1).StudNumber

13、= 01Score(1).StudName = 张三张三Score(1).Math = 89Score(1).English = 90With Score(1) .StudNumber = 01 .StudName = 张三张三 .Math = 89 .English = 90End With或写成:或写成: 定义数组之后,就可以对数组进行各种操作了,如输入数组元素的值,对数组元素进行各种处理,输出数组元素的值等。 对数组的处理通常要结合循环进行,用循环变量控制数组元素的下标,以便能够按一定次序、有选择、快速地处理数组。26n输入:输入数组元素值可以有多种方法。例如,可以使用赋值语句、文本框、

14、InputBox函数、Array函数等,可以对数组的个别元素输入数据,也可以对整个数组输入数据。n输出:数组元素的值,可以使用Print方法输出数组元素,也可以使用控件输出数组元素,如使用标签、文本框等。27【例6-1】 随机产生10个两位整数,放入数组a中。考虑到要在不同的过程中使用数组,所以首先在模块的通用段声明数组:Dim a(1 To 10) As Integer随机整数的生成由窗体的Load事件代码完成:Private Sub Form_Load() Randomize For i = 1 To 10 a(i) = Int(Rnd * 90) + 10 NextEnd Sub28多维

15、数组元素的输入通过多重循环来实现。由于VB中的数组是按行存储的,因此一般把控制数组第1维的循环变量放在最外层的循环中。【例6-2】 设有一个55的方阵,其中的元素是由计算机随机生成的小于100的整数。考虑到要在不同的过程中使用数组,所以首先在模块的通用段声明数组:Dim a(5,5) As Integer29方阵的生成由窗体的Load事件代码完成:Private Sub Form_Load() Randomize For i = 1 To 5 For j = 1 To 5 a(i,j) = Int(Rnd * 99) + 1 Next NextEnd Sub30【例6-3】 将例6-1中的数组

16、在窗体按3行3列输出。Private Sub Form_Activate() Cls Print For i = 1 To 9 If i Mod 3 = 0 Then Print a(i) Else Print a(i); ; End If NextEnd Sub31【例6-4】 将例6-2中的数组在窗体中按5行5列输出。Private Sub Form_Activate() Cls For i = 1 To 5 For j = 1 To 5 Print a(i, j); Next Print NextEnd Sub32格式:33Erase 数组名数组名n对静态数组使用对静态数组使用Erase

17、语句:语句:数值型数组元数值型数组元素值置为素值置为0;可变长度字符串类型数组元素;可变长度字符串类型数组元素值置为零长度字符串。值置为零长度字符串。 Erase语句不能释放语句不能释放静态数组所占的存储空间。静态数组所占的存储空间。n对动态数组使用对动态数组使用Erase语句语句:将释放动态数:将释放动态数组所占的存储空间组所占的存储空间;在下次引用该动态数组之在下次引用该动态数组之前,必须使用前,必须使用ReDim语句来重新定义该数组。语句来重新定义该数组。VB提供了array函数,用于在程序中利用代码对数组初始化,所谓初始化指的是给数组中各个元素赋初值。格式:数组变量名=array(数值

18、表)说明:1.数值表中的值就是数组元素的值,用逗号分隔;若无参数,则创建长度为0的数组。342.下界默认为0,上界由数值个数确定;3.“数组变量名”是已经声明的变量的名称,作为数组使用,必须为可变类型。数组类型由array中数值表的数值类型确定。如:Dim AA=array(”abc”,2,3)4.Array只能给一维数组赋值。35【例6-5】 编写代码实现运行时单击命令按钮Command1,Array函数实现学生成绩输入,标签Label1实现成绩输出。Private Sub Command1_Click() Dim score 定义score为可变类型的变量 score = Array(80

19、, 78, 90, 85, 73, 89, 97) For i = LBound(score) To UBound(score) Label1.Caption = Label1.Caption & Str(score(i) Next iEnd Sub36For Each变量 In 数组名 语句组1 Exit For 语句组2Next 变量37格式格式:功能功能: 首先将数组中的第一个元素赋给首先将数组中的第一个元素赋给“变量变量”,然后进入循环体中执行其中的语句。如果数组中还然后进入循环体中执行其中的语句。如果数组中还有其他元素,则继续将下一个元素赋值给有其他元素,则继续将下一个元素赋

20、值给后执行循环体,当针对数组中的所有元素都执行完后执行循环体,当针对数组中的所有元素都执行完了,便会退出循环,执行了,便会退出循环,执行Next之后的语句。之后的语句。38例例: 以下程序段使用以下程序段使用For Each.Next语句打语句打印一维数组印一维数组X中的所有元素。中的所有元素。 Dim X(15) For Each A In X Print A; Next A比较:比较:For I= 0 To 10 For J=0 To10 Sum=Sum+ Y(I,J) Next JNext I比较:比较:For I= 0 To 15 Print X(i);Next i例例: 求二维数组求

21、二维数组Y的所有元素之和。的所有元素之和。 Dim Y(10, 10) For Each A In Y Sum = Sum + A Next A Print Sum 【例6-6】 用For Each.Next语句,求1!+2!+10!的值。本例采用Print语句直接在窗体上输出结果。Private Sub Form_Load() Dim a(1 To 10) As Long, sum As Long, t As Long, n As Integer Show t = 1 For n = 1 To 10 t = t * n a(n) = t Next n sum = 0 39For Each x

22、 In a sum = sum + x Next x Print 1!+2!+10!=; sumEnd Sub40【例6-7】 求例6-1,例6-3随机整数中的最大值、最小值和平均值。编写命令按钮Command1的Click事件代码。Private Sub Command1_Click() Dim n As Integer, m As Integer, s As Single m = 100: n = 0: s = 0 41For Each x In a If x n Then n = x If x m Then m = x s = s + x NextMsgBox 最大值为: & n

23、 & Chr(13) & 最小值为: & m & Chr(13) & 平均值为: & s / 10 End Sub42见word文档部分43n 在应用程序中,往往要使用一些类型相同、功能相似的控件,可以将这种同一类型的控件定义成一个控件数组。例如,可以将一批文本框定义成一个控件数组,也可以将一批命令按钮定义成一个控件数组。44n同一个控件数组中的控件具有相同的名称、属性和事件方法。n控件数组中的每个控件是该控件数组的一个元素,表示为:45控件数组名控件数组名(索引索引)例如:例如:Text1(0) Text1(1) Text1(2)1在设计阶段创

24、建控件数组 方法1 将多个控件取相同的名称:(1)画出要作为一个控件数组的所有控件。(2) 决定一个控件作为数组的第1个元素,选定该控件并将其Name属性值设置成数组名。(3) 将其他控件的Name属性值改成同一个名称。这时,Visual Basic会显示一个对话框,要求确认是否要创建控件数组,选择“是”则将控件添加到控件数组中。4647方法方法2 复制现有的控件,并将其粘贴到所在复制现有的控件,并将其粘贴到所在的容器中:的容器中:(1) 绘制或选择要作为控件数组的第绘制或选择要作为控件数组的第1个控个控件。件。(2) 选择选择“编辑编辑复制复制”命令,然后选中命令,然后选中容器(如窗体),再使用容器(如窗体),再使用“编辑编辑粘贴粘贴”命命令。令。Visual Basic会显示一个对话框,要求确认是会显示一个对话框,要求确认是否要创建控件数组,选择否要创建控件数组,选择“是是”则将控件

温馨提示

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

评论

0/150

提交评论