您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > VB第6章电子讲稿(数组).
利用数组可以有效地存储和处理成批数据本章主要内容数组的概念数组的声明和应用动态数组ForEach...Next循环语句控件数组程序举例第6章数组6.1.1数组与数组元素简单变量用一个变量名标识,不同的变量使用不同的变量名表示。处理成批的数据时,必须使用数组来处理表示100个学生的成绩,采用简单变量来表示:s1,s2,s3,…s99,s100采用数组来表示:t(0),t(1),t(2),…t(98),t(99)t(k)(k=0,1,2,…99)为数组元素(或称下标变量),它表示第k个学生的成绩,k称为下标变量的下标数组的一个主要特点是通过下标(相当于索引)来引用数组元素6.1数组的概念例如计算这100个学生成绩的平均分,可用:S=0Fork=0To99S=S+t(k)‘累加分数NextkAver=S/100‘求平均分数组是一组按一定顺序排列的数据的集合例如,学生成绩T=[t(0),t(1),…t(99)]是一个数组a11a12a13A=a21a22a23a31a31a33也是一个数组数组名(不能与简单变量同名);数组类型又称有序的变量——下标变量默认情况下,下标从0开始例如,由一行共5个元素组成的数组x,它的5个下标变x(0)x(1)x(2)x(3)x(4)由三行四列元素组成的数组y,它的12个下标变量可表y(0,0)y(0,1)y(0,2)y(0,3)y(1,0)y(1,1)y(1,2)y(1,3)y(2,0)y(2,1)y(2,2)y(2,3)下标变量与简单变量具有基本相同的性质和作用数组元素下标用来标明该下标变量在数组中的位置下标可以是常数值,也可以是变量(包括下标变量)或数值表达式例如:若x(2)=10,k=2,则y(x(2))就是y(10),y(x(2)+k)就是y(12)只要有规则地改变下标值,就可以很方便地使下标变量(如a(i))成为所需要的具体下标变量数组的维数6.1.2下标和数组的维数6.2.1数组声明语句使用数组之前,一般需要定义数组,以便让系统分配相应的存储单元。格式为:Dim数组名([下界1to]上界1[,[下界2to]上界2…])[As数据类型]功能:指定数组的维数、各维的上下界和数据类型举例:DimSum(10)AsLong‘下标号从0~10,共11个元素DimAry(1to20)AsInteger‘下标号从1~20,共20个元素Dimd(1to5,1to10)AsDouble‘定义二维数组还可以使用Public、Static、Private等语句来声明数组6.2数组的声明和应用设定下界的方法OptionBase1‘设定下界为1DimData(10)AsSingle‘下标号从1~106.2.2Array函数使用Array函数可以为数组元素赋值示例DimDAsVariant‘定义数组名(变体类型)D=Array(1,2,3,4)执行结果:1→D(0),2→D(1),3→D(2),4→D(3)例6.1输入某小组5个同学的成绩,计算总分和平均分(取小数后一位)本例利用InputBox函数来输入成绩,输入完毕后经过计算,再采用Print直接在窗体上输出结果6.2.3数组的应用PrivateSubForm_Load()Dimd(5)AsIntegerDimiAsInteger,totalAsSingle,averageAsSingleShowFori=1To5'输入成绩d(i)=Val(InputBox(请输入第&Str(i)&_个学生的成绩,输入成绩))Nextitotal=0Fori=1To5'计算总分和平均分total=total+d(i)Nextiaverage=total/5Print总分:&totalPrint平均分:&Format(average,##.0)EndSub程序中,先通过Dim语句为数组d定义维数及下标范围,也即为数组安排一块连续的内存存储区,但这并不意味着内存里该数组已建立了应有的内容本例中输入数组中的数据是由InputBox函数来实现的,共循环了五次,输入的五个数依次赋值给下标变量d(1)~d(5)建立了数组中的数据后,就可以按要求进行处理(1)创建应用程序的用户界面和设置对象属性例6.2输入10名学生的成绩,求出最高分和最低分功能要求:通过Array函数输入10个分数;单击“查找”按钮(Command2)后,开始查找最高分和最低分,找到后显示在标签Label1上OptionBase1DimscoreAsVariantPrivateSubForm_Load()Label1.Caption=单击“查找”按钮开始查找最高分和最低分score=Array(89,96,81,67,79,90,63,85,95,83)EndSub(2)编写程序代码PrivateSubCommand1_Click()DimmaxAsInteger,minAsIntegermax=score(1)'设定初值min=score(1)Fori=2To10Ifmaxscore(i)Then'找最高分max=score(i)EndIfIfminscore(i)Then'找最低分min=score(i)EndIfNexti'Chr(13)起换行作用Label1.Caption=最高分:+Str(max)+_Chr(13)+最低分:+Str(min)EndSub例6.3分别计算5个学生和3门课的平均分某学习小组有5名学生,成绩如表6.1所示分析:用一个二维数组a(5,3)来描述。程序中设置两重循环,用以实现每行和每列上的累加。本例采用赋值语句来输入学生成绩,并采用Print直接在窗体上输出结果r=1c=1,2,3r=2c=1,2,3r=3c=1,2,3r=4c=1,2,3r=5c=1,2,3求5个学生的平均分下标使用情况OptionBase1PrivateSubForm_Load()Dima(5,3)AsIntegerDimrAsInteger,cAsInteger,sAsIntegerk=Array(数学,英语,计算机)'输入课程名a(1,1)=69:a(1,2)=89:a(1,3)=74'输入学生成绩a(2,1)=94:a(2,2)=80:a(2,3)=90a(3,1)=57:a(3,2)=62:a(3,3)=73a(4,1)=98:a(4,2)=94:a(4,3)=90a(5,1)=73:a(5,2)=76:a(5,3)=63例6.3ShowPrint学生,平均分“'输出20个减号“-”PrintString(20,-)Forr=1To5s=0'累加前清0Forc=1To3'累加同一行数据s=s+a(r,c)NextcPrintr,Format(s/3,##.0)NextrPrintPrint课程,平均分PrintString(20,-)Forc=1To3s=0Forr=1To5'累加同一列数据s=s+a(r,c)NextrPrintk(c),Format(s/5,##.0)NextcEndSub程序运行结果解题方法:(1)利用Int(91*Rnd+10)产生值为10到100使用Randomize得到不同的随机数序列(2)将10个数放入数组aa(1),a(2),a(3),…,a(10)①从这10个下标变量中,选出最小值,通过交换把该值存入a(1)中②除a(1)之外(a(1)已存放最小值),从其余9个下标变量中选出最小值(即10个数中的次小值),通过交换把该值存入a(2)中③选出a(3)~a(10)中的最小值,通过交换,把该值存入a(3)④重复上述处理,至a(8),可使a(1)~a(8)按小到大排列⑤第9次处理,选出a(9)及a(10)中的最小值,通过交换把该值存入a(9)中,此时a(10)存放的就是最大值例6.4随机产生十个10~100的整数,用“选择排序法”按值从小到大顺序排序,最后输出结果排列要求小大示例:a(1)a(2)a(3)a(4)906465591.a(1)与a(2)~a(4)比较,选出最小值,结果599065642.a(2)与a(3)~a(4)比较,选出次小值,结果596490653.a(3)与a(4)比较,选出较小值,结果59646590i=1j=2,3,4i=2j=3,4i=3j=4Fori=1to3Forj=i+1to4……NextjNexti程序结构完成上述比较及排序处理过程,可以采用两重循环结构,外循环的循环变量i从1到9,共循环九次;内循环的循环变量j从i+1到10本例采用默认的用户界面,所需数据由随机函数产生,处理后结果信息通过PrintPrivateSubForm_Load()ShowRandomizeDima(1To10)AsIntegerPrint原始数据:Fori=1To10'产生10个随机数a(i)=Int(91*Rnd+10)Printa(i);Nexti(3)程序结构Print:PrintFori=1To9Forj=i+1To10Ifa(i)a(j)Thent=a(i):a(i)=a(j):a(j)=t'交换位置EndIfNextjNextiPrint排序结果:Fori=1To10Printa(i);NextiEndSub改写中间程序段“Fori=1To9”~“Nexti”(共7个程序行)Fori=1To9k=i‘k用来记录每次选择的最小值的下标Forj=i+1To10Ifa(k)a(j)Thenk=jEndIfNextjt=a(k):a(k)=a(i):a(i)=t'交换位置Nexti变量k记录每一次选出的最小值的下标,在本次比较结束后,使a(i)与a(k)一次换位即可两种形式的数组:静态数组和动态数组静态数组是指数组元素的个数固定不变;动态数组的元素个数,在程序运行时可以改变动态数组可以在运行过程中改变数组的大小,提高存储区的使用效率6.3.1建立动态数组建立动态数组的步骤:第一步:声明一个没有下标(或称空维数)的数组为动态数组第二步:在过程中用ReDim语句重新定义带下标的动态数组ReDim语句格式:ReDim[Preserve]数组名([下界1T0]上界1[,[下界2T0]上界2…])[As数据类型]功能:重新定义动态数组,按定义的上下界重新分配存储单元6.3动态数组声明F为动态数组的示例:PrivateSubCommand1_Click()DimF()AsInteger‘声明一个整型动态数组……Size=20ReDimF(Size)……EndSub每次执行ReDim时,系统会清除指定数组的内容若采用:ReDimPreserveF(Size)则能保留数组中原有的数据PrivateSubForm_Load()Dima()AsIntegerShowReDima(800)k=0Forx=200To600Step3IfxMod8=0Thenk=k+1a(k)=xEndIfNextxReDimPreservea(k)Fori=1TokPrinta(i)NextiEndSub例6.5ReDim语句应用示例数组刷新语句可以作用于动态数组和静态数组格式:Erase数组名[,数组名]…功能:该语句用来清除静态数组的内容,或者释放动态数例如:DimArray1(20)AsIntegerDimArray2()AsSingleReDimArray2(9,10)……EraseArray1,Array2对静态数组,Erase语句将数组重新初始化;对动态数组,Erase语句将释放动态数组所使用的内存6.3.2数组刷新语句(Erase)与前面的循环语句For...Next类似,都是用来执行指定重复次数的循环。但ForEach...Next语句专门作用于数组或对象集合中的每一成员。语法格式:ForEach成员In数组名循环体[ExitFor]Next成员“成员”是一个Variant变量,它实际上代表数组中每一个元素本语句可以对数组元素进行读取、查询或显示,它所重复执行的次数由数组中元素的个数确定在不知道数组中元素的数目时非常有用6.4ForEach...Next循环语句Pri
本文标题:VB第6章电子讲稿(数组).
链接地址:https://www.777doc.com/doc-2865916 .html