Visual-Basic程序设计综合教程第5章-数组.ppt
第第5章章 数组数组 在用计算机解决实际问题时,经常会遇在用计算机解决实际问题时,经常会遇到对批量数据进行处理的情况,如为了统到对批量数据进行处理的情况,如为了统计计100个学生的成绩,按简单变量来处理会个学生的成绩,按简单变量来处理会很不方便,由此引入了数组,极大的提高很不方便,由此引入了数组,极大的提高了此类问题的处理效率。本章以数组对批了此类问题的处理效率。本章以数组对批量数据的处理为例,介绍数组的概念及其量数据的处理为例,介绍数组的概念及其应用、部分常用控件列表框和组合框,及应用、部分常用控件列表框和组合框,及直线和形状控件。直线和形状控件。【主要内容主要内容】掌握数组的基本概念及其使用掌握数组的基本概念及其使用掌握数组的基本概念及其使用掌握数组的基本概念及其使用 掌握控件掌握控件掌握控件掌握控件listBox,ComBoxlistBox,ComBox的常用属性及的常用属性及的常用属性及的常用属性及其方法的使用其方法的使用其方法的使用其方法的使用 掌握控件掌握控件掌握控件掌握控件Line,ShapeLine,Shape的常用属性及基本的常用属性及基本的常用属性及基本的常用属性及基本应用。应用。应用。应用。5.1 引例引例5.2 数组数组5.3 控件数组控件数组5.4 直线直线(Line)与形状与形状(Shape)5.5 列表框列表框(ListBox)与组合框与组合框(ComboBox)本章小结本章小结【例例5.1】设设计计一一个个用用于于对对学学生生成成绩绩排排名名的的应应用用程序。程序运行界面如下图程序。程序运行界面如下图5.1(a)所示。)所示。5.1 引例引例图图5.1(a)【例例5.1】运行结果运行结果操作步骤:操作步骤:(1)(1)设计用户界面设计用户界面设计用户界面设计用户界面 根据界面设计要求,创建如图根据界面设计要求,创建如图根据界面设计要求,创建如图根据界面设计要求,创建如图5.15.1(b b)所示用户界)所示用户界)所示用户界)所示用户界面。将所需控件:两个标签(面。将所需控件:两个标签(面。将所需控件:两个标签(面。将所需控件:两个标签(LabelLabel),两个列表框两个列表框两个列表框两个列表框(ListboxListbox)和一个命令按钮()和一个命令按钮()和一个命令按钮()和一个命令按钮(commandcommand)分别放)分别放)分别放)分别放到适当位置,进行相应的属性设置。具体控件属到适当位置,进行相应的属性设置。具体控件属到适当位置,进行相应的属性设置。具体控件属到适当位置,进行相应的属性设置。具体控件属性设置如下表性设置如下表性设置如下表性设置如下表5.15.1所示。所示。所示。所示。图图5.1(b)【例例5.1】用户界面用户界面控件名称控件名称(name)属性属性属性属性值值窗体(窗体(Form1)caption学生成学生成绩绩排名排名标签标签(Label1)caption排名前数据排名前数据标签标签(Label2)caption排序后名次排序后名次命令按命令按钮钮(Command1)caption输输入数据并排入数据并排名名(2)(2)代码编写代码编写代码编写代码编写分析:设置好所需界面后编写相应的事件过程,本例主要事件过分析:设置好所需界面后编写相应的事件过程,本例主要事件过分析:设置好所需界面后编写相应的事件过程,本例主要事件过分析:设置好所需界面后编写相应的事件过程,本例主要事件过程是程是程是程是Command1Command1的的的的ClickClick事件。该事件要求完成:事件。该事件要求完成:事件。该事件要求完成:事件。该事件要求完成:通过输入对话框输入各学生的姓名和成绩,并把当前输入通过输入对话框输入各学生的姓名和成绩,并把当前输入通过输入对话框输入各学生的姓名和成绩,并把当前输入通过输入对话框输入各学生的姓名和成绩,并把当前输入的数据显示在左列表框以便查对,输入完毕后,开始对输入的的数据显示在左列表框以便查对,输入完毕后,开始对输入的的数据显示在左列表框以便查对,输入完毕后,开始对输入的的数据显示在左列表框以便查对,输入完毕后,开始对输入的数据按成绩进行排序,最后把排序后的数据显示在右列表框内。数据按成绩进行排序,最后把排序后的数据显示在右列表框内。数据按成绩进行排序,最后把排序后的数据显示在右列表框内。数据按成绩进行排序,最后把排序后的数据显示在右列表框内。此算法的关键在于如何排序,排序的方法有多种,有选择此算法的关键在于如何排序,排序的方法有多种,有选择此算法的关键在于如何排序,排序的方法有多种,有选择此算法的关键在于如何排序,排序的方法有多种,有选择法,冒泡排序法等。法,冒泡排序法等。法,冒泡排序法等。法,冒泡排序法等。对对对对n n个数个数个数个数a(1)a(1)a(na(n),),采用选择排序法的算法是:采用选择排序法的算法是:采用选择排序法的算法是:采用选择排序法的算法是:n n个数个数个数个数a(1)a(1)a(na(n),),采用选择排序法的算法是:采用选择排序法的算法是:采用选择排序法的算法是:采用选择排序法的算法是:先在先在先在先在n n个数中选最小数,放在数组的第个数中选最小数,放在数组的第个数中选最小数,放在数组的第个数中选最小数,放在数组的第1 1个元素中,个元素中,个元素中,个元素中,即:取第即:取第即:取第即:取第1 1个数,与后面个数,与后面个数,与后面个数,与后面n-1n-1(即(即(即(即2 2与与与与n n)个数逐个)个数逐个)个数逐个)个数逐个比较。若第比较。若第比较。若第比较。若第1 1个数大,则个数大,则个数大,则个数大,则a(1)a(1)与参与比较的数组元与参与比较的数组元与参与比较的数组元与参与比较的数组元素中的值进行互换,再将互换后的第素中的值进行互换,再将互换后的第素中的值进行互换,再将互换后的第素中的值进行互换,再将互换后的第1 1个数与剩下个数与剩下个数与剩下个数与剩下的数据比较,直到最后。的数据比较,直到最后。的数据比较,直到最后。的数据比较,直到最后。再在第再在第再在第再在第2 2至至至至n n个元素中,选最小数,放在第个元素中,选最小数,放在第个元素中,选最小数,放在第个元素中,选最小数,放在第2 2个数个数个数个数组元素中。组元素中。组元素中。组元素中。取第取第取第取第2 2个数,与后面个数,与后面个数,与后面个数,与后面n-2n-2(即(即(即(即3 3到到到到n n)个数逐个比较。)个数逐个比较。)个数逐个比较。)个数逐个比较。若第若第若第若第2 2个数大,则互换,直到最后。个数大,则互换,直到最后。个数大,则互换,直到最后。个数大,则互换,直到最后。重复以上步骤,直至在最后两个数中选取最小数,重复以上步骤,直至在最后两个数中选取最小数,重复以上步骤,直至在最后两个数中选取最小数,重复以上步骤,直至在最后两个数中选取最小数,放在第放在第放在第放在第n-1n-1数组元素中。数组元素中。数组元素中。数组元素中。最后第最后第最后第最后第n n个元素已是最大数了。个元素已是最大数了。个元素已是最大数了。个元素已是最大数了。说明:说明:说明:说明:(1 1)在设计界面时除了以前用过的命令按钮和标签以)在设计界面时除了以前用过的命令按钮和标签以)在设计界面时除了以前用过的命令按钮和标签以)在设计界面时除了以前用过的命令按钮和标签以外,还用到列表框(外,还用到列表框(外,还用到列表框(外,还用到列表框(LlistboxLlistbox)控件)控件)控件)控件,这个控件及其这个控件及其这个控件及其这个控件及其相关的内容将在本章作详细的讲解。相关的内容将在本章作详细的讲解。相关的内容将在本章作详细的讲解。相关的内容将在本章作详细的讲解。(2 2)编写代码时出现的)编写代码时出现的)编写代码时出现的)编写代码时出现的 Dim Dim Name(nName(n)as string)as string属于属于属于属于数组的定义,具体相关数组的使用及有关概念是本数组的定义,具体相关数组的使用及有关概念是本数组的定义,具体相关数组的使用及有关概念是本数组的定义,具体相关数组的使用及有关概念是本章的主要内容之一。章的主要内容之一。章的主要内容之一。章的主要内容之一。(3 3)排序交换数据时,应让姓名和成绩同时交换,若)排序交换数据时,应让姓名和成绩同时交换,若)排序交换数据时,应让姓名和成绩同时交换,若)排序交换数据时,应让姓名和成绩同时交换,若只交换成绩,则最终结果会张冠李戴。只交换成绩,则最终结果会张冠李戴。只交换成绩,则最终结果会张冠李戴。只交换成绩,则最终结果会张冠李戴。【例例5.2】在在窗窗体体上上显显示示6种种可可以以使使用用的的形形状状,通通过过控控件件数数组组来来实实现现,运运行行结结果果如如图图5.2(a)所所示:示:图图5.2(a)【例例5.2】运行结果运行结果操作步骤如下:操作步骤如下:(1 1)设计用户界面:)设计用户界面:)设计用户界面:)设计用户界面:根据程序的运行结果,用户可设计如图根据程序的运行结果,用户可设计如图根据程序的运行结果,用户可设计如图根据程序的运行结果,用户可设计如图5.25.2(b b)所示)所示)所示)所示的界面。的界面。的界面。的界面。图图5.2(b)【例例5.2】用户界面用户界面设计过程如下:设计过程如下:设计过程如下:设计过程如下:先将控件先将控件先将控件先将控件ShapeShape放置在窗体上,并将其激活;放置在窗体上,并将其激活;放置在窗体上,并将其激活;放置在窗体上,并将其激活;执行复制命令(执行复制命令(执行复制命令(执行复制命令(Ctrl+CCtrl+C),将该控件复制;),将该控件复制;),将该控件复制;),将该控件复制;执行粘贴命令执行粘贴命令执行粘贴命令执行粘贴命令(Ctrl+VCtrl+V),将显示一个对话框,询,将显示一个对话框,询,将显示一个对话框,询,将显示一个对话框,询问问问问“已经有一个控件为已经有一个控件为已经有一个控件为已经有一个控件为 Shape1Shape1,是否创建控,是否创建控,是否创建控,是否创建控件数组?件数组?件数组?件数组?”选择选择选择选择“是是是是”,窗体左上角将出现一个控件,它就,窗体左上角将出现一个控件,它就,窗体左上角将出现一个控件,它就,窗体左上角将出现一个控件,它就是控件数组的第二个元素。是控件数组的第二个元素。是控件数组的第二个元素。是控件数组的第二个元素。执行粘切命令执行粘切命令执行粘切命令执行粘切命令(Ctrl+VCtrl+V),建立控件数组的其它元,建立控件数组的其它元,建立控件数组的其它元,建立控件数组的其它元素。将其放在合适的位置并可用菜单栏的素。将其放在合适的位置并可用菜单栏的素。将其放在合适的位置并可用菜单栏的素。将其放在合适的位置并可用菜单栏的“格式格式格式格式”对其进行设置对其进行设置对其进行设置对其进行设置。(2)编写代码)编写代码 在窗体中只放置控件数组,而要输入对应的在窗体中只放置控件数组,而要输入对应的标号需通过标号需通过print方法来实现,对于方法来实现,对于Shape1控件控件数组中各元素的形状由数组中各元素的形状由Shape控件的控件的Shape属性属性来完成,形状的填充由来完成,形状的填充由Shape控件的控件的FillStyle属属性实现,具体的过程如下:性实现,具体的过程如下:Private Sub Form_Click()FontSize=12CurrentX=280Print 0;设置形状对应的标号设置形状对应的标号For i=1 To 5 Shape1(i).Left=Shape1(i-1).Left+800Shape1(i).Shape=i 设置设置shape1控件数组的控件数组的形状形状Shape1(i).FillStyle=i+2 填充填充shape1控件数组控件数组Shape1(i).Visible=True 使得使得shape1(i)可见可见CurrentX=CurrentX+500Print i;Next iEnd Sub (3)(3)运行程序,验证结果运行程序,验证结果运行程序,验证结果运行程序,验证结果 运行程序,单击窗体后出现如图运行程序,单击窗体后出现如图运行程序,单击窗体后出现如图运行程序,单击窗体后出现如图5.25.2(a a)所示结)所示结)所示结)所示结果。果。果。果。说明:说明:说明:说明:(1 1)在设计界面时使用了)在设计界面时使用了)在设计界面时使用了)在设计界面时使用了ShapeShape控件控件控件控件,这个控件及这个控件及这个控件及这个控件及其相关的内容将在本章作详细的讲解。其相关的内容将在本章作详细的讲解。其相关的内容将在本章作详细的讲解。其相关的内容将在本章作详细的讲解。(2 2)编写代码使用了控件数组)编写代码使用了控件数组)编写代码使用了控件数组)编写代码使用了控件数组Shape1Shape1,注意掌握,注意掌握,注意掌握,注意掌握创建数组控件的方法的使用,对于建立控件数组创建数组控件的方法的使用,对于建立控件数组创建数组控件的方法的使用,对于建立控件数组创建数组控件的方法的使用,对于建立控件数组的另一方法将在后面介绍。的另一方法将在后面介绍。的另一方法将在后面介绍。的另一方法将在后面介绍。VBVB中将具有相同名字、不同下标值的一组变量称为中将具有相同名字、不同下标值的一组变量称为中将具有相同名字、不同下标值的一组变量称为中将具有相同名字、不同下标值的一组变量称为数组。数组中的每个变量称为数组元素或下标变量。可用数组。数组中的每个变量称为数组元素或下标变量。可用数组。数组中的每个变量称为数组元素或下标变量。可用数组。数组中的每个变量称为数组元素或下标变量。可用数组名和下标唯一地标识一个数组元素,如数组名和下标唯一地标识一个数组元素,如数组名和下标唯一地标识一个数组元素,如数组名和下标唯一地标识一个数组元素,如Score(5)Score(5)就表就表就表就表示数组名为示数组名为示数组名为示数组名为ScoreScore的数组中下标为的数组中下标为的数组中下标为的数组中下标为5 5的数组元素。一个数的数组元素。一个数的数组元素。一个数的数组元素。一个数组如果只用一个下标就能确定一个数组元素在数组中的位组如果只用一个下标就能确定一个数组元素在数组中的位组如果只用一个下标就能确定一个数组元素在数组中的位组如果只用一个下标就能确定一个数组元素在数组中的位置,则称为一维数组,而由两个或多个下标所组成的数组置,则称为一维数组,而由两个或多个下标所组成的数组置,则称为一维数组,而由两个或多个下标所组成的数组置,则称为一维数组,而由两个或多个下标所组成的数组称为二维数组或多维数组。在其它语言中数组用来存储相称为二维数组或多维数组。在其它语言中数组用来存储相称为二维数组或多维数组。在其它语言中数组用来存储相称为二维数组或多维数组。在其它语言中数组用来存储相同类型的数据,但是在同类型的数据,但是在同类型的数据,但是在同类型的数据,但是在VBVB中数组可用来存放不同类型的中数组可用来存放不同类型的中数组可用来存放不同类型的中数组可用来存放不同类型的数据。数据。数据。数据。VBVB中的数组有两种,一种是静态数组;一种是动态中的数组有两种,一种是静态数组;一种是动态中的数组有两种,一种是静态数组;一种是动态中的数组有两种,一种是静态数组;一种是动态数组。数组必须先声明后使用。数组的声明既可以在模块数组。数组必须先声明后使用。数组的声明既可以在模块数组。数组必须先声明后使用。数组的声明既可以在模块数组。数组必须先声明后使用。数组的声明既可以在模块中的声明,也可以在过程中声明。中的声明,也可以在过程中声明。中的声明,也可以在过程中声明。中的声明,也可以在过程中声明。5.2 数组数组5.2.1 静态数组静态数组5.2.2 动态数组动态数组5.2.3 数组的基本操作数组的基本操作5.2.4 For Each.Next 循环语句循环语句 以一个简单的应用程序的界面为例,介绍组以一个简单的应用程序的界面为例,介绍组以一个简单的应用程序的界面为例,介绍组以一个简单的应用程序的界面为例,介绍组成菜单的基本元素(如所示)。菜单栏由多个菜成菜单的基本元素(如所示)。菜单栏由多个菜成菜单的基本元素(如所示)。菜单栏由多个菜成菜单的基本元素(如所示)。菜单栏由多个菜单名(也叫主菜单)组成,如单名(也叫主菜单)组成,如单名(也叫主菜单)组成,如单名(也叫主菜单)组成,如“文件文件文件文件”、“编辑编辑编辑编辑”等都是菜单标题。某一个菜单标题下拉出一个等都是菜单标题。某一个菜单标题下拉出一个等都是菜单标题。某一个菜单标题下拉出一个等都是菜单标题。某一个菜单标题下拉出一个菜单,包含一个或者多个菜单项,如图菜单,包含一个或者多个菜单项,如图菜单,包含一个或者多个菜单项,如图菜单,包含一个或者多个菜单项,如图8.28.2 所示。所示。图图8.2 菜单的组成元素菜单的组成元素菜单标题菜单标题菜单栏菜单栏快捷键菜单项菜单项分隔线分隔线5.2.1 静态数组静态数组 所谓静态数组是指维数与下标的范围在声明所谓静态数组是指维数与下标的范围在声明所谓静态数组是指维数与下标的范围在声明所谓静态数组是指维数与下标的范围在声明时就已经确定了。声明静态数组使用的语句与声时就已经确定了。声明静态数组使用的语句与声时就已经确定了。声明静态数组使用的语句与声时就已经确定了。声明静态数组使用的语句与声明变量的语句类似。对于一维数组格式为:明变量的语句类似。对于一维数组格式为:明变量的语句类似。对于一维数组格式为:明变量的语句类似。对于一维数组格式为:Dim Dim 数组名(下标说明)数组名(下标说明)数组名(下标说明)数组名(下标说明)As As 类型类型类型类型,数组名(下,数组名(下,数组名(下,数组名(下标说明)标说明)标说明)标说明)As As 类型类型类型类型.例如例如例如例如:Dim A1(5)as integerDim A1(5)as integer Dim A2(2 to 5)as integer Dim A2(2 to 5)as integer对于二维数组,格式为:对于二维数组,格式为:对于二维数组,格式为:对于二维数组,格式为:Dim Dim 数组名数组名数组名数组名 (第一维下标上界,第二维下标上界第一维下标上界,第二维下标上界第一维下标上界,第二维下标上界第一维下标上界,第二维下标上界)as)as 类型名称类型名称类型名称类型名称例如例如例如例如:DimDim B1(2,3)as integer B1(2,3)as integer定义了一个二维数组,数组名为定义了一个二维数组,数组名为定义了一个二维数组,数组名为定义了一个二维数组,数组名为B1B1,类型为,类型为,类型为,类型为integerinteger,该数组有,该数组有,该数组有,该数组有3 3行,行,行,行,4 4列,占列,占列,占列,占1212个整型变量的空间,如个整型变量的空间,如个整型变量的空间,如个整型变量的空间,如下所示:下所示:下所示:下所示:B1(0,0)B1(0,1)B1(0,2)B1(0,3)第第0行行B1(1,0)B1(1,1)B1(1,2)B1(1,3)第第1行行B1(2,0)B1(2,1)B1(2,2)B1(2,3)第第2行行 说明:说明:说明:说明:(1 1)数组名的命名与变量名命名一致,但不能和简单)数组名的命名与变量名命名一致,但不能和简单)数组名的命名与变量名命名一致,但不能和简单)数组名的命名与变量名命名一致,但不能和简单变量重名。变量重名。变量重名。变量重名。(2 2)下标说明又称维定义符,定义了这个维的大小。)下标说明又称维定义符,定义了这个维的大小。)下标说明又称维定义符,定义了这个维的大小。)下标说明又称维定义符,定义了这个维的大小。它有两种表示格式:它有两种表示格式:它有两种表示格式:它有两种表示格式:或或或或 下界和上界必须使用数值型常量表达式,一般直接使用下界和上界必须使用数值型常量表达式,一般直接使用下界和上界必须使用数值型常量表达式,一般直接使用下界和上界必须使用数值型常量表达式,一般直接使用整型常数,它表示数组元素的下标应在下界到上界的整型常数,它表示数组元素的下标应在下界到上界的整型常数,它表示数组元素的下标应在下界到上界的整型常数,它表示数组元素的下标应在下界到上界的范围内,超出范围将出现运行错误。范围内,超出范围将出现运行错误。范围内,超出范围将出现运行错误。范围内,超出范围将出现运行错误。在缺省状态下,起始下标(下界值)为在缺省状态下,起始下标(下界值)为在缺省状态下,起始下标(下界值)为在缺省状态下,起始下标(下界值)为0 0,则,则,则,则Dim Dim Score(100),Score(100),表示声明了一个有表示声明了一个有表示声明了一个有表示声明了一个有101101个元表的数组,个元表的数组,个元表的数组,个元表的数组,它的每个元素分别为它的每个元素分别为它的每个元素分别为它的每个元素分别为Score(0),Score(1)Score(0),Score(1)、Score(100)Score(100)。可以使用专门语句重新设置缺省下界。可以使用专门语句重新设置缺省下界。可以使用专门语句重新设置缺省下界。可以使用专门语句重新设置缺省下界值。格式为:值。格式为:值。格式为:值。格式为:Option Base 0|1Option Base 0|1。例如:例如:例如:例如:Option Base 1 Option Base 1 表示将下界缺省值设置为表示将下界缺省值设置为表示将下界缺省值设置为表示将下界缺省值设置为1 1(3 3)类型指的是数组元素的类型。省略类型则表示为)类型指的是数组元素的类型。省略类型则表示为)类型指的是数组元素的类型。省略类型则表示为)类型指的是数组元素的类型。省略类型则表示为VariantVariant类型。如类型。如类型。如类型。如 Const n=10Const n=10 Dim Name1(n)As String,Dim Name1(n)As String,Score(nScore(n)As Single)As Single(4 4)其它属性)其它属性)其它属性)其它属性 帮助上下文:帮助上下文:帮助上下文:帮助上下文:指定一个唯一的数值作为帮助文本的指定一个唯一的数值作为帮助文本的标识符,可根据该数值在帮助文件中查找适当的帮助主标识符,可根据该数值在帮助文件中查找适当的帮助主题。题。协调位置:协调位置:协调位置:协调位置:与与OLEOLE功能有关,一般取功能有关,一般取0 0值值。复选(复选(复选(复选(CheckedChecked)属性:)属性:)属性:)属性:如果选中(如果选中(),在初次打开菜单项时,该菜单项的左),在初次打开菜单项时,该菜单项的左边显示边显示“”“”。在菜单条上的第一级菜单不能使用该属。在菜单条上的第一级菜单不能使用该属性性。有效(有效(有效(有效(EnabledEnabled)属性:)属性:)属性:)属性:如果选中(如果选中(如果选中(如果选中(),在运行时以清晰的文字出现;未选中),在运行时以清晰的文字出现;未选中),在运行时以清晰的文字出现;未选中),在运行时以清晰的文字出现;未选中则在运行时以灰色的文字出现,不能使用该菜单项。则在运行时以灰色的文字出现,不能使用该菜单项。则在运行时以灰色的文字出现,不能使用该菜单项。则在运行时以灰色的文字出现,不能使用该菜单项。显示窗口列表(显示窗口列表(显示窗口列表(显示窗口列表(WindowListWindowList)属性:)属性:)属性:)属性:当菜单要包括一个打开的所有当菜单要包括一个打开的所有MDIMDI(多文档界面)(多文档界面)子窗口的列表时,选中(子窗口的列表时,选中()此项。)此项。5.2.2 动态数组动态数组 动态数组是指在声明数组时不指明下标的大小动态数组是指在声明数组时不指明下标的大小动态数组是指在声明数组时不指明下标的大小动态数组是指在声明数组时不指明下标的大小(省略括号中的下标),当需要时,再用(省略括号中的下标),当需要时,再用(省略括号中的下标),当需要时,再用(省略括号中的下标),当需要时,再用ReDimReDim语句重新定义其大小。建立动态数组的步骤如下:语句重新定义其大小。建立动态数组的步骤如下:语句重新定义其大小。建立动态数组的步骤如下:语句重新定义其大小。建立动态数组的步骤如下:(1 1)声明动态数组)声明动态数组)声明动态数组)声明动态数组 声明动态数组的格式为:声明动态数组的格式为:声明动态数组的格式为:声明动态数组的格式为:Dim Dim 数组名数组名数组名数组名()As()As 类型类型类型类型名名名名 上述数组定义的语句中,并没有标明数组的维数及上述数组定义的语句中,并没有标明数组的维数及上述数组定义的语句中,并没有标明数组的维数及上述数组定义的语句中,并没有标明数组的维数及数组元素的个数,事实上,它定义了一个空维数数组元素的个数,事实上,它定义了一个空维数数组元素的个数,事实上,它定义了一个空维数数组元素的个数,事实上,它定义了一个空维数组,表明该数组是动态数组。组,表明该数组是动态数组。组,表明该数组是动态数组。组,表明该数组是动态数组。(2 2)用)用)用)用ReDimReDim语句分配数组的实际元素个数语句分配数组的实际元素个数语句分配数组的实际元素个数语句分配数组的实际元素个数ReDimReDim语句是一个可执行语句,它只能出现在过程语句是一个可执行语句,它只能出现在过程语句是一个可执行语句,它只能出现在过程语句是一个可执行语句,它只能出现在过程中,其作用是为数组分配实际空间。格式为:中,其作用是为数组分配实际空间。格式为:中,其作用是为数组分配实际空间。格式为:中,其作用是为数组分配实际空间。格式为:ReDimReDim 数组名数组名数组名数组名(下标说明下标说明下标说明下标说明,下标说明,下标说明,下标说明,下标说明 例如:例如:Dim n as integerDim n as integerDim Name1()as stringDim Name1()as stringn=n=valval()()ReDimReDim Name1(n)Name1(n)说明:说明:上面代码首先定义了一个变量上面代码首先定义了一个变量n n,然后再定义了一个,然后再定义了一个空维数组空维数组NameName,n n的值通过的值通过inputboxinputbox输入,最后输入,最后用用ReDimReDim语句为数组分配实际元素个数。语句为数组分配实际元素个数。注意:注意:可以多次使用可以多次使用ReDimReDim语句来改变数组的大小,但语句来改变数组的大小,但每次使用会使原数组的内容丢失,若想使原数据每次使用会使原数组的内容丢失,若想使原数据不丢失,则可在使用不丢失,则可在使用ReDimReDim语句中使用关键字语句中使用关键字PreservePreserve,格式为:,格式为:ReDimReDim Preserve Preserve数组名(下标说明数组名(下标说明,下标说明,下标说明)不能用不能用ReDimReDim Preserve Preserve语句改变数组原有的数据语句改变数组原有的数据类型。类型。5.2.3 数组的基本操作数组的基本操作数组的基本操作包括数组元素的引用、初始化以及数组的基本操作包括数组元素的引用、初始化以及数组的基本操作包括数组元素的引用、初始化以及数组的基本操作包括数组元素的引用、初始化以及输入输出等。输入输出等。输入输出等。输入输出等。1 1 数组的引用数组的引用数组的引用数组的引用格式:数组名(下标,格式:数组名(下标,格式:数组名(下标,格式:数组名(下标,下标,下标,下标,下标.)声明数组和使用数组元素是不同的,在使用过程注声明数组和使用数组元素是不同的,在使用过程注声明数组和使用数组元素是不同的,在使用过程注声明数组和使用数组元素是不同的,在使用过程注意区别。意区别。意区别。意区别。2 2 数组元素赋初值数组元素赋初值数组元素赋初值数组元素赋初值(1 1)利用循环结构)利用循环结构)利用循环结构)利用循环结构for i=1 to 10for i=1 to 10a(ia(i)=0 a)=0 a数组的每个元素值为数组的每个元素值为数组的每个元素值为数组的每个元素值为0 0next inext i(2 2)利用)利用ArrayArray函数函数Dim a as Variant,b as Dim a as Variant,b as Variant,iVariant,i%a=Array(1,2,3,4,5)a=Array(1,2,3,4,5)b=b=Array(“abc”,“dfd”,”dtttArray(“abc”,“dfd”,”dttt”)”)For i=0 to For i=0 to UBound(aUBound(a)print print a(ia(i);“”;);“”;Next iNext i For i=0 to For i=0 to UBound(bUBound(b)print print b(ib(i);“”;);“”;Next iNext i在使用在使用ArrayArray函数时应注意以下几点:函数时应注意以下几点:ArrayArray函数用来为数组元素赋值,其格式为:函数用来为数组元素赋值,其格式为:函数用来为数组元素赋值,其格式为:函数用来为数组元素赋值,其格式为:数组变量名数组变量名数组变量名数组变量名=Array=Array(数组元素值)(数组元素值)(数组元素值)(数组元素值)其中其中其中其中“数组变量名数组变量名数组变量名数组变量名”是预先定义的数组名,在是预先定义的数组名,在是预先定义的数组名,在是预先定义的数组名,在“数组变量名数组变量名数组变量名数组变量名”之之之之后没有括号。之所以称为后没有括号。之所以称为后没有括号。之所以称为后没有括号。之所以称为“数组变量数组变量数组变量数组变量”,是因为它作为数组,是因为它作为数组,是因为它作为数组,是因为它作为数组使使使使用,但作为变量定义,它既没有维数,也没有上下界。用,但作为变量定义,它既没有维数,也没有上下界。用,但作为变量定义,它既没有维数,也没有上下界。用,但作为变量定义,它既没有维数,也没有上下界。“数数数数组变量值组变量值组变量值组变量值”是需要赋给数组各元素的值,各值之间以逗号分是需要赋给数组各元素的值,各值之间以逗号分是需要赋给数组各元素的值,各值之间以逗号分是需要赋给数组各元素的值,各值之间以逗号分开。开。开。开。声明的数组变量可以通过以下方式定义:显式定义为声明的数组变量可以通过以下方式定义:显式定义为声明的数组变量可以通过以下方式定义:显式定义为声明的数组变量可以通过以下方式定义:显式定义为VariantVariant类型,如:类型,如:类型,如:类型,如:Dim a as VariantDim a as Variant、在定义时不指明类、在定义时不指明类、在定义时不指明类、在定义时不指明类型,如:型,如:型,如:型,如:Dim aDim a、不定义直接使用。、不定义直接使用。、不定义直接使用。、不定义直接使用。ArrayArray函数只适用于一维数组,即只能对一维数组进行初函数只适用于一维数组,即只能对一维数组进行初函数只适用于一维数组,即只能对一维数组进行初函数只适用于一维数组,即只能对一维数组进行初始化,不能对二维或多维数组进行初始化。始化,不能对二维或多维数组进行初始化。始化,不能对二维或多维数组进行初始化。始化,不能对二维或多维数组进行初始化。数组的下界为零,上界由数组的下界为零,上界由数组的下界为零,上界由数组的下界为零,上界由ArrayArray函数括号内的参数个数决函数括号内的参数个数决函数括号内的参数个数决函数括号内的参数个数决定,也可通过函数定,也可通过函数定,也可通过函数定,也可通过函数UboundUbound获得(其中函数获得(其中函数获得(其中函数获得(其中函数UboundUbound用于用于用于用于返回数组指定维的上界,返回数组指定维的上界,返回数组指定维的上界,返回数组指定维的上界,LboundLbound用于返回数组指定维的用于返回数组指定维的用于返回数组指定维的用于返回数组指定维的下界)。下界)。下界)。下界)。3 3 数组元素的输入数组元素的输入数组元素的输入数组元素的输入可以通过可以通过可以通过可以通过ForFor循环及循环及循环及循环及InputBoxInputBox函数输入。函数输入。函数输入。函数输入。4 4 数组元素的输出数组元素的输出数组元素的输出数组元素的输出数组元素的输出一般数组元素的输出一般数组元素的输出一般数组元素的输出一般forfor循环与循环与循环与循环与PrintPrint方法来实现。方法来实现。方法来实现。方法来实现。5 5 举例举例举例举例【例例例例5.35.3】编写程序,求一个编写程序,求一个编写程序,求一个编写程序,求一个nmnm的矩阵中最大值元的矩阵中最大值元的矩阵中最大值元的矩阵中最大值元素所在行和列,并输出其值及行号和列号。素所在行和列,并输出其值及行号和列号。素所在行和列,并输出其值及行号和列号。素所在行和列,并输出其值及行号和列号。分析:分析:分析:分析:该题目要求找到矩阵中最大值,可以使用一个二该题目要求找到矩阵中最大值,可以使用一个二该题目要求找到矩阵中最大值,可以使用一个二该题目要求找到矩阵中最大值,可以使用一个二维数组存放这个矩阵,然后依次比较这个数组中维数组存放这个矩阵,然后依次比较这个数组中维数组存放这个矩阵,然后依次比较这个数组中维数组存放这个矩阵,然后依次比较这个数组中的各个元素的值,求得最大值。由于的各个元素的值,求得最大值。由于的各个元素的值,求得最大值。由于的各个元素的值,求得最大值。由于n,mn,m未知,未知,未知,未知,所以必须先通过所以必须先通过所以必须先通过所以必须先通过InputBoxInputBox函数输入其值。函数输入其值。函数输入其值。函数输入其值。5.2.4 For Each.Next 循环语句循环语句 For Each.Next For Each.Next 循环语句与前面的循环语句循环语句与前面的循环语句循环语句与前面的循环语句循环语句与前面的循环语句For.NextFor.Next类类类类似,都是用来执行指定重复次数的循环。但似,都是用来执行指定重复次数的循环。但似,都是用来执行指定重复次数的循环。但似,都是用来执行指定重复次数的循环。但For Each.NextFor Each.Next 语句专门用于数组或对象集合中的每一成员。语法格式为:语句专门用于数组或对象集合中的每一成员。语法格式为:语句专门用于数组或对象集合中的每一成员。语法格式为:语句专门用于数组或对象集合中的每一成员。语法格式为:For Each For Each 成员成员成员成员 In In 数组名数组名数组名数组名 循环体循环体循环体循环体 Exit ForExit For Next Next 成员成员成员成员说明:说明:说明:说明:(1 1)“成员成员成员成员”是一个是一个是一个是一个Variant Variant 变量,它实际上代表数组中每变量,它实际上代表数组中每变量,它实际上代表数组中每变量,它实际上代表数组中每一个元素。一个元素。一个元素。一个元素。(2 2)本语句可以对数组元素进行读取、查询或显示,它所)本语句可以对数组元素进行读取、查询或显示,它所)本语句可以对数组元素进行读取、查询或显示,它所)本语句可以对数组元素进行读取、查询或显示,它所重复执行的次数由数组中元素的个数确定。也就是说,分重复执行的次数由数组中元素的个数确定。也就是说,分重复执行的次数由数