第八章数组引子8.1数组的概念8.2数组的声明和使用例:定义一个数组a,共包含15个元素:a(1)~a(15)。该数组中的 各个数组元素均只能存放整型数值。【例8-2】通过调用函数LBound和UBound获取数组b的下界和上界,以此控制数组元素 的输出。◇数组元素的输出数组元素的输出Print语句,同时与循环语句相结合进行。Dima(3,4),b( 4,3)AsIntegerPrint"随机产生的矩阵是:"Fori=1To3Forj= 1To4a(i,j)=Int(100Rnd())Printa(i,j); NextjPrintNexti8.4 控件数组控件数组是由一组相同类型的控件组 成,它们拥有相同的控件名字,具有相同的属性设置。数组中的每个控件都有唯一的下标,被称为索引号。控件数组元素的引用也是把数组名和括号 中的下标结合起来的。【例8-8】在窗体上分别设置4个命令按钮和4个标签,按钮上分别显示春、夏、秋、冬4个字,用户按这4个按钮 时,在按钮右边的标签里分别显示兰、竹、菊、梅4个字。要求使用控件数组,控件数组如图所示。代码:PrivateSubComm and1_Click(IndexAsInteger)n=IndexSelectCasenCa se0ch="兰"Case1ch="竹"Case2ch ="菊"Case3ch="梅"EndSelectLabel1(n).Caption =chEndSub8.5综合应用例:结合动态数组、控件数组及一些常用的算法,实现从数组中“找 出最大值”、“数组反向输出”以及“数组从小到大排序后输出”等功能,任务如下图所示,单击“数据生成”按钮,弹出输入对话框“请输入一维 数组的长度”,然后单击相应的单选项后,单击“运用算法”按钮,实现相应的结果第八章VisualBAS IC程序设计理解数组的概念,掌握静态数组、动态数组的声明及其应用,以及控件数组的建立和使用。熟悉数组元素的引用形式,以及 如何与循环控制语句结合进行针对数组元素的逐一操作。本章要求:如何通过两层循环控制对二维数组进行逐行逐列地操作。数组作为参数在 过程之间传递的方式。区分静态数组和动态数组的不同,以及控件数组的建立和使用过程。本章重点:本章难点:PrivateSu bForm_click()Dima1,a2,a3,a4AsStringa1="zhao"a2= "qian"a3="sun"a4="li"Form1.Printa1Form1.Printa 2Form1.Printa3Form1.Printa4EndSubPrivateSubForm_Clic k()DimaAsVarianta=Array("zhao","qian","sun", "li")Fori=0To3Form1.Printa(i)NextiEndSub数组是 一组具有有序下标的相关数据形成的元素集合,可以用统一的名称和确定的下标来引用数组元素。数组的一般形式为A(n) 。其中,A代表数组名,n代表下标变量,一个数组可以有若干个下标变量。数组的维数及下标范围:Dima(5 )AsInteger ''数组a是一维数组下标范围是0-5 Dimf(1To3,2To5)AsString ''表示3行4列的二维数组 ,行下标的范围是1~3,列下标的范围是2~5数组名的命名规则和一般变量的命名规则相同8.2.1静态数组及其声明1 .一维数组的声明静态数组是指元素个数在声明数组时就设定的数组,一般使用关键字Dim声明。【格式】Public|P rivate|Static|Dim<数组名>([<下界>To]<上界>)As<类型名>【说明】Public、Privat e、Static、Dim关键字分别界定了数组使用的不同范围:(1)建立全局数组时,在模块的声明段用Public声明。(2)建立 窗体、模块级数组时,在窗体、模块的声明段用Private或Dim声明。(3)建立局部过程中的数组时,在过程的声明段用Static 或Dim声明。As的用法与变量定义中的As功能一样。Dima(1To15)AsInteger若欲存放不同数 据类型: Dimc(15)AsVariant或者Dimc(15)如果不指定下标的下界,一般默认值为0,即下 界从0开始。如果想修改默认下界,则要执行OptionBase语句。例如:在执行OptionBase1之前Dima(5 )AsInteger ‘数组a的下标范围是0~5,含6个元素在执行OptionBase1之后Dim a(5)AsInteger ''数组a的下标范围是1~5,含5个元素多维数组的声明方法和一维数组的声明基本一致,需要对每 一维的上界、下界做出声明。例如:Dima(1To8,6)AsInteger Dimb(9,9,9) AsSingle二维数组a可以存放8×7个元素,相当于一个8行7列的矩阵;三维数组b可以存放10×10×10个元素。多 维数组元素的引用,仍然通过数组名和元素对应的下标号指定。2.多维数组的声明3.数组下标测试函数定义了数组的下界和上界之 后,可以调用函数LBound和UBound来获取数组下界值和上界值,以便作为控制数组元素变化范围的依据。【格式】LBound (数组名[,维数序号])UBound(数组名[,维数序号])[维数序号]用于指定返回某 一维的下界。1表示第一维,2表示第二维,以此类推。如果省略,则返回第一维的下界。若将LBound函数与UBound函数一起使用,可 用来确定一个数组的大小。Dimb(-2To5)Print"元素下标号:";Fori=LBound (b,1)ToUBound(b,1)Printi;NextIPrintPrint"对应元素值 :";Fori=LBound(b,1)ToUBound(b,1)b(i)=2iP rintb(i);NextiPrintPrint"数组的第一个元素值是:";b(LBound(b,1))8 .2.2动态数组及其声明在声明数组时,有时可能遇到不能确定数组上下界和元素个数的时候。当预计到数组存储元素的个数可能不断变化 时,就需要声明一个动态数组。和静态数组不同的是,动态数组不需声明上下界,或用变量为下界定值。【格式】Dim<数组名>( )As<类型名>例如:Dima()AsVariant在使用动态数组的过程中,如果确定了元素个数,需要对数组 的上下界进行补充声明,并重新分配存储单元,使用ReDim语句。【格式】ReDim[Preserve]<动态数组名>([< 下界>To]<上界>)执行ReDim语句后,原来存储在数组中的数据随即全部丢失。如果想保留原值,则要在ReDim 后加上Preserve关键字,原来的元素则成为最前面的元素,以后新增的元素排在后面。可以使用ReDim语句反复地改变数组的元素及维 数,但是ReDim语句不能改变该数组的数据类型。注意:ReDim语句只能出现在事件过程或通用过程中。8.3数组的基本操 作数组的基本操作包括:◇引用◇赋值 ◇复制◇输出这些操作都是针对数组元素而不是整个数组进行的。对数组元素的使用 和一般变量的使用一致,只是数组元素的名称上有自己的特点。【格式】数组名(元素下标)注意:数组名、类型、维数及元素下标的范 围要与声明数组时一致。例如:Dime(3To7),则e(3)、e(4)、e(5)、e(6)、e(7)表示数组e的5个元素 。对元素的非法引用,会产生越界错误,例如e(2)e(8).8.3.1数组元素的引用◇数组元素的赋值: 在程序中,凡是简单变量出现的地方都可以用数组元素代替。而给普通变量赋值的方法同样适用于数组元素。例如:e(3)=123 e(4)="hello" .利用Array函数来完成数组的赋值。Array函数的作用是返回一个数组变量,各 数组元素的值就是Array函数括号中用逗号隔开的参数。【格式】数组变量名=Array(数组元素值表)8.3.2 .数组元素的赋值与输入【例8-4】定义一个存储3个人情况的数组,并分行输出3个人的情况,数组赋值如图8-3所示。Pri vateSubForm_click()DimaAsVarianta=Array("张三" ,"男",80,"李四","女",87,"王五","男",90)Print"姓名","性别"," 平均分"Fori=0To2Printa(3i),a(3i+1),a (3i+2)NextiEndSub当数组元素较少或只对少数几个赋值时,可以直接使用赋值语句逐个地 对其元素赋值;如果数组较大,但输入数组的数据是有规律的,则一般可通过赋值语句、For型循环语句或InputBox函数输入。对 于元素个数不太确定的数组使用ForEach…Next语句将更为方便。【格式】ForEach<变量>In<数组名| 对象集合><循环体>Next[ <变量>]◇数组元素的输入【例8-5】声明一个具有10个元素的数组,对每个元素赋值,值为每个元素下标号的平方,赋值后使用F orEach…Next语句输出各个元素的值。PrivateSubCommand1_Click()Dima(1T o10)AsIntegerFori=1To10a(i)=ii ‘ 将10个元素分别赋值为1、4、9、…、100NextiForEachnIna Printn ''逐个输出元素的值NextnEndSub◇数组元素的复制数组元素之间的复制很简单,和一般单个变量之间的复制相同;但要复制整个数组,不能直接在两个数组名之间用赋值号进行,一般要与循环语句相配合,在两个数组的元素之间一一对应地赋值,从而达到整体复制的目的。1.控件数组的建立(1)相同取名法(2)复制控件法(3)设置索引号2.控件数组的使用【格式】<控件数组名>(<下标号>).<属性名>【说明】对按钮型的控件,当程序执行时,用户对其中的某个按钮进行某种操作,系统会把该按钮的Index值传递给该组控件的相应事件过程的形式参数,接下来就可以在过程中根据形式参数的值进行对应的操作。 |
|