VB程序设计及数据库开发技术4

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章数组与过程学习目标:掌握数组和过程的概念掌握数组的定义和应用掌握Sub过程和Function过程的应用掌握过程的参数传递与过程的作用域了解Shell函数第4章数组与过程教学内容:4.1数组4.2过程4.3Shell函数4.1数组-数组的概念数组用于保存大量的、逻辑上有联系的数据数组的特点:数据中的元素在类型上是一致的数组元素在内存空间上是连续存放的数组元素的引用可通过下标进行数组在使用前必须要定义(声明)返回目录4.1数组-一维数组的定义和使用1.数组的定义(声明)Dim数组名([下界To]上界)As数据类型例如:DimData(1To40)AsInteger定义数组可以使用类型符例,DimData%(1To40)下界的默认值为0例,DimSalary(1000)AsCurrency通过数组名和下标可引用数组中的元素例,Data(25)=95Form1.PrintData(25)返回目录4.1数组-一维数组的定义和使用说明-1:数组定义后的初值:数值型数组各元素为0,逻辑型数组各元素为False,字符串数组各元素为空串()。可同时声明几个数组,用逗号分隔,例如DimA%(10To100),B(800)AsLong定义数组时,下标的下界和上界值只能是常数或常数表达式。下例的定义是错误的N=100:DimData(N)AsInteger定义时,数组的上界值不得超出长整型范围,且数组的上界值不得小于下界值。返回目录4.1数组-一维数组的定义和使用说明-2:数组的元素个数称为数组长度。Lbound()、Ubound()函数可测定数组的下界与上界值例如:PrivateSubForm_Click()DimA%(12To24)PrintLBound(A),UBound(A)EndSub用OptionBasen可设定数组的默认下界n的取值只能是0或1设定方法:在代码窗口的通用声明段中输入OptionBase0或OptionBase1返回目录4.1数组-一维数组的定义和使用2.数组元素的使用通过数组名和下标[例4.1]PrivateSubCommand1_Click()DimData(5)AsIntegerDimSum,IAsIntegerForI=1To5'输入5个数据到数组中Data(I)=InputBox(输入第&I&个数据)NextIForI=1To5'完成5个数组元素的相加Sum=Sum+Data(I)NextIPrintSumEndSub返回目录ForI=1To5Data(I)=InputBox(输入第&I&个数据)Sum=Sum+Data(I)NextI4.1数组-一维数组的定义和使用说明:数组实际上是用一个变量名字代表一组数,这组数是连续排列的,用顺序号作为下标区分各个数。数组下标是一个整型量,如果有小数则自动按四舍五入取整。例如,Data(3.4)=3,而Data(3.5)=2。数组常见的错误:下标出界返回目录Test(1)=4Test(2)=3Test(3)=2Test(4)超出定义4.1数组-一维数组应用例题[例4.3]输出斐波那契级数的前20项PrivateSubForm_Click()DimF(20)AsInteger,IAsIntegerF(1)=1:F(2)=1'第一、第二项为1ForI=3To20'第三项起每项为前二项之和F(I)=F(I-2)+F(I-1)NextIForI=1To20'在窗体上输出PrintF(I);IfIMod5=0ThenPrintNextIEndSub返回目录4.1数组-一维数组应用例题[例4.4]输入一组不重复的数据,找出最大值及其位置PrivateSubForm_Click()ConstLength=5'定义常量Length作为数组最大下标DimTest%(Length),I%,Max%,L%ForI=1ToLength'通过键盘输入给数组赋值Test(I)=InputBox(输入第&I&个数据)NextIMax=Test(1):L=1'设数组第一个元素为最大值ForI=2ToLengthIfMaxTest(I)Then'找到新的最大值,记录其值和位置Max=Test(I)L=IEndIfNextIMsgBox最大值x=&Max&,位置是&LEndSub返回目录4.1数组-一维数组应用例题[例4.5]产生10个整数到数组中,将其顺序颠倒后输出PrivateSubForm_Click()ConstLength=10:DimD(Length)AsInteger,I%,Temp%ForI=1ToLength'给数组赋值并输出D(I)=14+I:PrintD(I);NextIPrint:Print'换行ForI=1ToLength/2'交换Temp=D(I)D(I)=D(Length-I+1)D(Length-I+1)=TempNextIForI=1ToLength'交换后输出PrintD(I);NextIEndSub返回目录D(1)与D(10)交换D(2)与D(9)交换……D(I)与D(10-I+1)4.1数组-一维数组应用例题[例4.8]产生100个不重复的3位随机整数,并按每行7列的格式输出PrivateSubForm_Click()DimData(100)AsInteger,I%,J%RandomizeTimer'设置随机化种子,保证每组数据不重复ForI=1To100'循环产生100个数据Data(I)=Int(Rnd()*900)+100ForJ=1ToI–1'与已经产生的数据比较IfData(I)=Data(J)Then'数据已存在则舍弃,重新产生I=I-1ExitFor'提前退出数据比较的循环EndIfNextJNextI返回目录4.1数组-一维数组应用例题I=1:J=1DoWhileI=100ForJ=1To7'每行打印7列IfI100ThenExitForPrintData(I);I=I+1NextJPrint'打印换行LoopEndSub返回目录ForI=1To100PrintData(I);IfIMod7=0ThenPrintNextI4.1数组-一维数组应用例题[例4.10]统计成绩分布PrivateSubForm_Click()DimN(10)AsInteger,IAsInteger,XAsIntegerConstm=10ForI=1TomX=InputBox(请输入+Str(I)+个学生的成绩)X=Int(X/10)'也可写成X=X\10N(X)=N(X)+1NextIPrint100;--;100;N(10)ForI=9To0Step-1Print10*I;--;10*I+9;N(I)NextIEndSub返回目录4.1数组-排序问题1.选择法排序(N个数据升序)1)先假设第1个数据最小,依次同第2、第3、…、第N个数据进行比较,一旦第1个数据大于其它值则交换。这样,第1轮比较完毕,找出了最小数据作为第1个数据。2)以第2个数据为最小数据,依次同第3、第4、…、第N个数据进行比较,若第2个数据大于其它值则交换。这样,第2轮交换完毕,则找出第二小的数据作为第2个数据。3)依此类推,第N-1轮比较将找出第N-1小的数据,剩下的一个数据就是最大数,排列在最后。以6个数据为例:返回目录原始序列:30,20,10,90,50,60第1轮比较结果:10|30,20,90,50,60第2轮比较结果:10,20|30,90,50,60第3轮比较结果:10,20,30|90,50,60第4轮比较结果:10,20,30,50|90,60第5轮比较结果:10,20,30,50,60|904.1数组-排序问题[例4.11]用选择法完成10个随机数据的升序排序。ConstN=10:DimD(N)AsInteger,I%,J%,T%RandomizeTimerForI=1ToND(I)=Rnd*100:PrintD(I);'排序前的数据序列NextIPrint:PrintForI=1ToN-1'挑出前N-1个小的数ForJ=I+1ToNIfD(I)D(J)Then'数据元素交换T=D(I):D(I)=D(J):D(J)=TEndIfNextJNextIForI=1ToN'输出排序结果PrintD(I);NextI返回目录找最小数据作为第1个数据:I=1ForJ=2ToN'这里2等价I+1IfD(1)D(J)ThenT=D(1):D(1)=D(J):D(J)=TEndIfNextJ4.1数组-排序问题2.选择法排序(N个数据升序)1)第1轮比较:从第1个元素开始,两两相邻比较到N-1,值大的放在后面。比较完毕,最大的数成为第N个元素(沉底)。2)第2轮比较:从第1个元素开始,两两相邻比较到N-2,值大的放在后面。比较完毕,最大的数成为第N-1个元素。3)依此类推,直至最后一次比较。返回目录第1轮比较:原序列:30,20,10,90,50,60第1次比较结果:20,30,10,90,50,60第2次比较结果:20,10,30,90,50,60第3次比较结果:20,10,30,90,50,60第4次比较结果:20,10,30,50,90,60第5次比较结果:20,10,30,50,60,90第2轮比较:原序列:20,10,30,50,60,90第1次比较结果:10,20,30,50,60,90第2次比较结果:10,20,30,50,60,90第3次比较结果:10,20,30,50,60,90第4次比较结果:10,20,30,50,60,904.1数组-排序问题[例4.12]用冒泡法完成10个随机数的升序排序ConstN=10:DimD(N)AsInteger,I%,J%,T%RandomizeTimerForI=1ToND(I)=Rnd*100:PrintD(I);NextIPrint:PrintForI=N-1To1Step-1'大数逐个沉底ForJ=1ToIIfD(J)D(J+1)ThenT=D(J):D(J)=D(J+1):D(J+1)=TEndIfNextJNextIForI=1ToN'输出排序结果PrintD(I);NextI返回目录最大的数成为第N个元素(沉底):I=N-1ForJ=1ToN-1'这里N-1等价IIfD(J)D(J+1)ThenT=D(J):D(J)=D(J+1):D(J+1)=TEndIfNextJ4.1数组-排序问题[例4.13]PrivateSubForm_Click()DimS_Name(7)AsString,S_Age(7)AsIntegerDimI%,J%,N%N=7S_Name(1)=李大明:S_Age(1)=18S_Name(2)=王超:S_Age(2)=21S_Name(3)=张弓:S_Age(3)=20S_Name(4)=陈卫国:S_Age(4)=24S_Name(5)=马太原:S_Age(5)=25S_Name(6)=吴济贫:S_Age(6)=19S_Name(7)=戴天:S_Age(7)=18返回目录对字符串数组S_Name和S_Age赋值4.1数组-排序问题ForI=1ToN-1'用选择法排序ForJ=I+1ToNIfS_Age(I)S_Age(J)ThenS_Age(0)=S_Age(I)S_Age(I)=S_Age(J)S_Age(J)=S_Age(0)S_Name(0)=S_Name(I)S_Name(I)=S_Name(J)S_Name(J)=S_Name(0)EndIfNextJNextIForI=1ToNPrintLeftB(S_Name(I),2);S_Age(I);;NextIEndSub返回目录在交换年龄值的同时,也要交换姓名,以保持姓名和年龄下标的一致。函数LeftB()表示按字节取出指定数量的字符。一个汉字占两个字节。4.1数组-动态数组与静态数组1.动态数组的声明与使用声明:说明数组的名称和类型(不说明下标范围)使用前用R

1 / 54
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功