您好,欢迎访问三七文档
第8章数组数组的基本概念数组——一组相同类型的变量,使用同一个名字来组织一个班(48个)学生的成绩Score30种图书的名字BookName100种商品的价格Cost数组元素——数组中的各个变量使用唯一的下标(索引)来标识Score(1)、Score(2)……Score(48)BookName(0)~BookName(29)Cost(0)~Cost(99)数组的长度——数组元素的个数103400702数组的基本概念数组的维数一维数组多维数组二维数组三维数组……(2,5,7,9,10,4,8)071082567107108256713000200013000200011034007020710825671行行×列行×列×层数组的基本概念数组的分类按维数分:一维、二维、三维……按在内存分配是否可变分:静态数组动态数组(可重新定义数组的维数和长度)静态数组的声明---一维数组格式:Dim|Public|Static数组名(下标)[As类型名]只能由常数表示oDimScore(1to48)AsIntegeroDimCost(100)AsSingleoStaticBookName(30)AsString下标的格式[下界to]上界o省略下界,则默认为0o如:DimScore(1to48)AsInteger数组元素:Score(1)、Score(2)……Score(48)oDimCost(100)AsSingleo数组元素:Cost(0)、Cost(1)……Cost(100)格式:Dim数组名(下标1[,下标2…])[As类型名]二维数组:Dimdb(3,1to5)AsIntegerPublicN(5,5)AsSingle三维数组:DimTr(3,4,4)AsLongDimA(1to5,1to5,1to5)AsLong元素:数组db共有4行5列4×5=20个元素db(0,1)db(0,2)db(0,3)db(0,4)db(0,5)db(1,1)db(1,2)db(1,3)db(1,4)db(1,5)db(2,1)db(2,2)db(2,3)db(2,4)db(2,5)db(3,1)db(3,2)db(3,3)db(3,4)db(3,5)静态数组的声明---多维数组二维数组在内存中的存放以列为单位存放!db(0,1)db(0,2)db(0,3)db(0,4)db(0,5)db(1,1)db(1,2)db(1,3)db(1,4)db(1,5)db(2,1)db(2,2)db(2,3)db(2,4)db(2,5)db(3,1)db(3,2)db(3,3)db(3,4)db(3,5)db(0,1)db(1,1)db(2,1)db(3,1)db(0,2)db(1,2)db(2,2)db(3,2)第1列第2列db(0,5)db(1,5)db(2,5)db(3,5)第5列db(0,3)……db(0,4)……第3列第4列动态数组的声明格式:Dim数组名()[As类型名]如:Dims()AsSingle声明时未指定数组的大小动态数组在需要时使用Redim语句指定维数和大小格式:Redim[Preserve]数组名(下标1[,下标2…])[As类型名]如:Redims(10)Redims(2,3)下标可以是常量、变量和表达式;与静态数组的声明不同之处!Dima()AsSingle,iAsInteger……k=5……Redima(3)……Redima(k)……Redima(k*3+1)……Redim的注意点[As类型名]可以省略不省略则必须与Dim语句声明的类型一致;Preserve——保留数组中原有的数据使用Preserve的Redim只能改变最后一维的大小且不能改变维数Dimb()AsInteger……Redimb(1,2)……RedimPreserveb(1,4)b(0,0)b(0,1)b(0,2)b(1,0)b(1,1)b(1,2)b(0,3)b(0,4)b(1,3)b(1,4)b(0,0)b(1,0)b(0,1)b(1,1)b(0,2)b(1,2)b(0,3)b(1,3)b(0,4)b(1,4)二维数组按列存放Redim的注意点Redim语句只能出现在过程内部原因:是VB的执行语句,不是声明语句PrivateSubForm_Click()DimA()AsInteger,iAsIntegerPrint“一维数组:”ReDimA(1To10)‘重新指定数组A为一维数组,大小为10Fori=1To10'使用一维数组AA(i)=Int(Rnd*101)PrintA(i),NextiPrintEndSub若没有Redim语句而直接使用数组的元素则:无论引用哪个元素都将出错,出错类型为:下标越界Redim的注意点PrivateSubForm_Click()DimA()AsInteger,iAsIntegerPrint“二维数组:”ReDimA(1To9,1To5)‘重新指定数组A为二维数组,大小为9×5Fori=1To9'使用二维数组AForj=1To5A(i,j)=10+Int(Rnd*21)PrintA(i,j),NextjPrintNextiEndSub二重循环:i控制行,j控制列但是切不可思维定势!!动态数组—求某个正整数的所有因子X:27ForI=1to13因子个数k动态数组ax=val(text1.text)k=0,目前没有因子Fori=1Tox\2Nexti输出sxModi=0k=k+1,Redima,存放入a(k)是EndIfPrivateSubCommand1_Click()Dima()AsInteger:k=0:x=Val(Text1.Text)Fori=1Tox\2IfxModi=0Thenk=k+1:ReDimPreservea(k)a(k)=iEndIfNexti动态数组—求某个正整数的所有因子要求将输入的10进制正整数根据用户的输入转换为n进制n=2,8,16动态数组—进制转换10—2/8/16101100101210357)()(3572………….11782………….0892………….1442………….0222………….0112………….152………….122………….012………….101010121021)()(212………….1102………….052………….122………….012………….10动态数组—进制转换10—2/8/163381027)()(278………….338………….301F161031)()(3116………….15116………….10动态数组—进制转换10—2/8/16假设使用动态数组bin()asstring存储每一个余数变量k代表余数的个数Num代表要转换的10进制正整数N代表要转换为的进制动态数组—进制转换10—2/8/16K=0‘目前余数个数为0DoLoopunitlnum=0‘当商为0结束循环求出余数,存放在bin数组中num=num\n将数组元素从尾到头组合,输出数量k=k+1数组bin重新定义大小bin(k)=num取n的余数动态数组—进制转换10—2/8/16问题:求得的余数是10进制的,对于16进制而言,要完成10——A11——B……15——F的转换解决:使用一个字符数组chrdimch(15)asstring来完成Ch(1)……Ch(10)Ch(11)Ch(12)Ch(13)Ch(14)Ch(15)1……ABCDEF利用下标与数组元素内容的对应完成转换动态数组—进制转换10—2/8/16k=0Dok=k+1ReDimPreservebin(k)r=numModnbin(k)=ch(r)num=num\nLoopUntilnum=0Fori=kTo1Step–1‘颠倒输出ch=ch+bin(i)Nexti动态数组—进制转换10—2/8/16OptionBase语句格式:OptionBasen(n:0,1)如:OptionBase1位置:模块的通用部分跟OptionExplict语句一样是设置的功能语句;如:OptionBase1……Dima(5)’元素a(1)~a(5)Dimb(3,4)’3行4列,b(1,1)~b(3,4)OptionBase1……Dima(2To5)’元素a(2)~a(5)Dimb(3,4)’3行4列,b(1,1)~b(3,4)LBound(aname[,d])PrivateSubForm_Click()DimA(5)AsInteger,B(3to8,200to208)PrintLbound(A),Lbound(B,1),Lbound(B,2)EndSub03200UBound(aname[,d])PrivateSubForm_Click()DimA(5)AsInteger,B(3to8,200to208)PrintUbound(A),Ubound(B,1),Ubound(B,2)EndSub58208数组的基本操作数组的输入数组的输出数组的查找数组的排序数组的插入数组的删除数组的输入给数组元素赋值(一般采用循环结构)键盘读入——使用InputBox()函数实现①静态数组DimA(1To10)AsInteger,iAsIntegerFori=1To10A(i)=Val(InputBox(“请输入第”&i&“个数据”,“输入”))Nexti②动态数组DimB()AsInteger,iAsInteger,jAsIntegerRedimB(1To10)’一维数组Fori=1To10B(i)=Val(InputBox(“请输入第”&i&“个数据”))NextIRedimB(3,5)’二维数组Fori=1To3Forj=1to5B(i,j)=Val(InputBox(“请输入数据”))NextjNexti在输入前设定数组的长度数组的输入DimiAsInteger,kAsIntegerDimxAsIntegeri=1x=Val(InputBox(请输入第&i&个数据))DoWhilex-999'当输入数据为-999时结束输入ReDimPreserveB(i)'重定义数组保留前面输入的数B(i)=xi=i+1'输入数据的个数x=Val(InputBox(请输入第&i&个数据))Loop56564545882626-999根据用户输入确定数组的长度下标生成适用于数组元素与下标之间存在函数关系DimA(1To10)AsInteger,kAsIntegerFork=1To10A(k)=2*k-1NextkA(1)=1A(2)=3A(3)=5……A(10)=19数组的输入随机数生成---使用Rnd函数实现a(i)=Int(100*Rnd)+1Array函数----对数组整体赋值先定义一Variant的变量Dimm再使用Array函数赋值m=array(1,3,5,7,9)下标从0开始,系统根据Array函数的参数个数决定数组的大小m(0)=1、m(1)=3、m(2)=5、m(3)=7、m(4)=9数组的输入数组的输出一维数组Fori=1To10PrintA(i),'在一行上显示NextIFori=1To100PrintB(i),IfiMod10=0ThenPrint'每10个一行显示Nexti二维数组——二重循环Fori=1To10'控制行Forj=1To5'列PrintC(i,j),NextjPrint'每行行末换行Nexti数组的输出窗体---Print方法Printa(i),’显示元素Print’换行Cls’清除所有显示内容PictureBox---Print方法Picture1.Printa(i),’显示元素Picture1.Print’换行Picture1.Cls’清除所有显示内容文本框---Text属性Text1=Text1&a(i)’显示元素Text1=Text1&ch(13)&ch(10)’换行T
本文标题:VB-数组的用法
链接地址:https://www.777doc.com/doc-2647257 .html