您好,欢迎访问三七文档
1数组教学目的要求:•掌握数组和控件数组的概念及应用教学重点:•数组和控件数组的应用2教学内容变量数组的声明数组排序算法控件数组数组应用举例在程序中处理数据时,对于输入的数据、参加运算的数据、运行结果等临时数据,通常使用变量来保存,由于变量在一个时刻只能存放一个值,因此当数据不太多时,使用简单变量即可解决问题。但是,有些复杂问题,利用简单变量进行处理很不方便,甚至是不可能的。例如:(1)输入50个数,按逆序打印出来。(2)输入100名学生某门课程的成绩,要求把高于平均分的那些成绩打印出来。(3)统计高考中各分数段的人数。(4)某公司有近万名职工,搞一个工资报表。(5)窗体上的几个同类型控件,有着某种关系。这就需要我们构造新的数据结构——数组。引言4问题:从键盘输入10个整数,逆序输出假设输入为:102030405060708090100ix运行过程:第1次循环110第2次循环220第3次循环330......第10次循环10100输出为:第1次循环10010第2次循环9100......第10次循环1100100100100100100100100程序段1:DimIasinteger,xasintegerFori=1to10X=inputbox(“请输入”,”输入”)NextiForprintx;Nexti内存能不能用一个名字代表一批存储单元,用于存储一批数据?i=10to1step-15dimx(9)AsIntegerx(2)x(3)x(4)x(5)x(6)x(7)x(8)x(9)内存X(0)x(1)708090995060708090100一维数组:其逻辑结构是线性序列例:10个学生某一门课的成绩数组元素数组:用一个名字来表示的具有相同性质的一组数据下标:代表数组元素在数组中的顺序默认的下标下界为0,也可由OptionBase1指定为16OptionBase1Dima(10,4)AsSingle二维数组:逻辑结构可以看成是矩阵或称二维表10个学生的4门课成绩a(1,1)a(1,2)a(1,3)a(1,4)a(2,1)a(2,2)a(2,3)a(2,4)a(10,1)a(10,2)a(10,3)a(10,4)......行号列号1个学生的4门课成绩7变量数组控件数组静态(定长)数组动态(不定长)数组8一、变量数组的声明格式:Dim数组名(下标)[AS类型]功能:定义一个数组,并为其分配存贮空间。说明:(1)数组名的命名规则与简单变量相同。(2)只有一个下标的数组为一维数组,有二个及二个以上下标的数组为多维数组。(下标下界1TO)下标上界1(,(下标下界2TO)下标上界2)…(一)静态数组的声明9用OptionBase语句设定下界的默认值VB中允许用户使用OptionBase语句设定数组下标的默认值,格式如下:OptionBase0|1该语句应放置在模块的通用声明部分如有:OptionBase1则在该模块中使用的数组下界均为1,若有个别数组下界不是1,可以使用“下界to上界”的格式重设它的下界DimS(2)AsInteger等价于:DimS(1to2)AsInteger,共有2个元素10Dima(1To40)AsInteger'定义一维数组,有40个元素Dima(40)AsInteger‘定义一维数组,有41个元素OptionBase1Dima(40)AsInteger’定义一维数组,有40个元素Dimb(30,10)AsSingle'定义二维数组,有31*11=341个元素Dimx(1To20,1To10)AsSingle'定义二维数组,有20*10=200个元素Dimy(50,1To6)ASSingle‘定义二维数组,有51*6=306个元素k=2Dima(1Tok)‘错误例:11如有二维数组定义:DimA(-1to2,0to3)AsInteger第一维的大小为4,表示4行,第二维的大小为4,表示4列,则A数组中共有4×4=16个元素A(-1,0)A(-1,1)A(-1,2)A(-1,3)A(0,0)A(0,1)A(0,2)A(0,3)A(1,0)A(1,1)A(1,2)A(1,3)A(2,0)A(2,1)A(2,2)A(2,3)思考:数组的下标可以小于0吗?12假设输入为:102030405060708090100运行过程:第1次循环第2次循环第3次循环输出为:10090......第10次循环80706050403020Fori=1to10X(i)=inputbox(“请输入”,”输入”)NextiFori=10to1step-1printx(i);Nexti程序段3:DimiasInteger,x(1to10)asIntegerix(1)x(2)x(3)x(4)x(5)x(6)x(7)x(8)x(9)x(10)110220330405060708090100第1次循环第2次循环......第10次循环问题:从键盘输入10个整数,逆序输出内存4567891010109113问题:输入学生的人数,由计算机自动产生这若干个学生的成绩,计算平均分和高于平均分的人数,并将这两项放在该数组的最后。1、如果在程序中没有特别声明,即程序中没有使用OptionBasic1语句,缺省下界和关键字TO时,则表示下标的取值—————。A、从0开始,等价于0to上界B、从2开始C、从1开始,等价于1to上界D、等价于nto上界2、使用下列语句定义数组,定义正确的是————。DimnasIntegerConstmasInteger=5DimA(m)asIntegerDimB(1to6)asIntegerDimC(5)asLongDimD(0ton)assingleA、一维数组ABCB、一维数组ABCDC、一维数组ABD知识点回眸3、有如下数组说明语句:dimA(6)asintegerdimB(3,-1to4)assingleA数组的大小为——个数组元素,B数组的大小为——个数组元素。A、6,18B、7,24C、7,12D、6,254、执行下面的程序段:privatesubform_click()dimc(7)asinteger,D(2to6,2000to2005)debug.printLbound(c);“@”;Lbound(D,1);“@”;Lbound(D,2)Endsub程序执行结果为:————。A、0@2@2000B、7@6@2000C、6@2@2000D、7@6@2005下列程序运行时单击Command1,输出的结果是()PrivateSubCommand1_Click()Dima(10)Fork=1To10a(k)=11-kNextPrinta(3+a(6))EndSubA)2B)3C)4D)5下列程序运行时单击窗体,输出的结果是()PrivateSubForm_Click()‘数组声明的语句能对数组进行初始化,使得数值型数组的元素值初始化为0,字符型数组的元素值初始化为空。Dima(4)a(4)=4Fori=1To3a(i)=a(i+1)-1NextPrinta(1)EndSubA)2B)1C)0D)-1下列过程的运行结果是()。PrivateSubForm_Click()DimX(4)AsIntegerFori=1To4X(i)=i*iNextPrintX(i)'此时i为5,越界了EndSubA)16B)9C)25D)显示出错信息一维数组的基本操作1.可通过循环给数组元素赋初值Dima(10)AsIntegerFori=1To10'A数组的每个元素值为1A(i)=1NextiPrinta(1);a(2);……2.数组的输入Fori=1To4A(i)=val(InputBox(“输入第”&i&“个数的值”))NextI3.数组的输出输出如下图所示的数据Dima(5)AsInteger,i%,j%Fori=1To5a(i)=i*5Printa(i);Print'换行Nexti[例4.4]输入一组不重复的数据,找出最大值及其位置PrivateSubForm_Click()ConstLength=5'定义常量Length作为数组最大下标DimTest%(Length),i%,Max%,L%Fori=1ToLength‘通过产生随机数给数组赋值Test(i)=Int(101*Rnd+0)PrintTest(i);NextiPrintMax=Test(1):L=1'设数组第一个元素为最大值Fori=2ToLengthIfMaxTest(i)Then'找到新的最大值,记录其值和位置Max=Test(i)L=iEndIfNextiMsgBox最大值x=&Max&,位置是&LEndSub例:数组元素的累加PrivateSubCommand1_Click()DimData(5)AsIntegerDimSum,IAsIntegerEndSubForI=1To5Data(I)=InputBox(输入第&I&个数据)Sum=Sum+Data(I)NextIPrintsum例1统计某班(假设有30人)程序设计课程考试的平均成绩,并输出高于平均分的成绩。(统计问题)数组的定义及引用分析:1.先声明数组后输入30人的成绩,再进行累加;在循环体外打印平均成绩2.判断是否有平均成绩的,有则一行输出5个PrivateSubForm_Click()ConstNUM=30'定义符号常量代表学生人数Dima(1ToNUM)AsInteger,sum%,ave!,i%,n%Fori=1ToNUM'输出高于平均分的成绩Ifa(i)aveThenPrinta(i);IfnMod5=0ThenPrint'一行输出5个人的成绩Nextave=sum/NUM'求平均成绩Print平均成绩:;avesum=0'初始化求和变量Fori=1ToNUM'输入学生成绩并计算总成绩a(i)=Val(InputBox(请输入第&i&个学生的成绩))sum=sum+a(i)Nexti输入平均成绩比较--输出EndSub例2随机产生10个两位整数,然后将第一个数与最后一个数交换位置、第二个数与倒数第二个数交换位置、依次类推,输出最后的结果。(元素倒置问题)•分析:•首先找出交换的规律,即第i个和第N-i+1个数交换。•然后判断交换的次数为N\2数组的定义及引用a(1)a(2)a(3)……a(8)a(9)a(10)(演示)29746538101交换92745683110A(1)A(10)29746538101Fori=1To10\2t=A(i):A(i)=A(10-i+1):A(10-i+1)=tNextIA(i)=A(N-i+1):A(N-i+1)=tN\2数组的定义及引用PrivateSubForm_Click()Dima(1To10)AsInteger,iAsInteger,tAsIntegerRandomizeFori=1To10a(i)=Int(Rnd*90+10)'随机产生10个两位整数Printa(i);NextiFori=1To10\2‘10个数进行交换5次t=a(i):a(i)=a(10-i+1):a(11-i)=tNextiPrintFori=1To10Printa(i);'将交换后的10个数输出NextiEndSubfibonacci数列问题起源于一个古典的有关兔子繁殖的问题:假设在第1个月时有一对小兔子,第2个月时成为大兔子,第3个月时成为老兔子,并生出一对小兔子(一对老,一对小)。第4个月时老兔子又生出一对小兔子,上个月的小兔子变成大兔子(一对老,一对大,一对小)。第5个月时上个月的大兔子成为老兔子,上个月的小兔子变成大兔子,两对老兔子生出两对小兔子(两对老,一对中,两对小)…。这样,各月的兔子对数为:1,1,2,3,5,8,…。输出斐波那契典例月老(=3个月)中(=2个月)小(=1个月)共计(对数)1112113112411135212563238753513……………裴
本文标题:VB数组课件
链接地址:https://www.777doc.com/doc-3620052 .html