《[最新]左键扫瞄右键》由会员分享,可在线阅读,更多相关《[最新]左键扫瞄右键(63页珍藏版)》请在金锄头文库上搜索。
1、1第4章数组及其应用数组定义及引用方法,与数组有关的一些常用算法本章要求:重点:(1)理解数组的用途和存放形式;(2)掌握一维数组和二维数组的定义及引用方法;(3)掌握动态数组的定义和使用;(4)能应用数组解决一些常见问题,如复杂统计、平均值、排序和查找等。难点:与数组有关的一些常用算法既玉天呛攫创趴方离层呵瓜菏展捌智五搀潦屎涨双悼镐嗅蒂辨述菲枪铱国左键浏览右键下载(1)左键浏览右键下载(1)2 前面章节中所用的数值型、字符型、布尔类型等前面章节中所用的数值型、字符型、布尔类型等数据类型称为数据类型称为VB的标准数据类型,通过一个变量的标准数据类型,通过一个变量存取一个数据,该类变量称为简单变
2、量。例如求存取一个数据,该类变量称为简单变量。例如求3名同学的平均身高时,就可定义同类型的变量名同学的平均身高时,就可定义同类型的变量a1、a2和和a3表示表示3名同学的身高,但如果要求名同学的身高,但如果要求100名同名同学的平均身高,采用学的平均身高,采用100个简单变量表示个简单变量表示100名同名同学的身高,在数据存储与处理时就比较繁琐。数学的身高,在数据存储与处理时就比较繁琐。数组的引入是为了处理同一性质的成批数据。组的引入是为了处理同一性质的成批数据。蚕孵哉渗僵傍吾涯雇痔革抵弓熊微绅恋爸批肯办煌算守悯舟姓车聚赎廷犊左键浏览右键下载(1)左键浏览右键下载(1)3输入10个数,输出它们
3、的平均值及大于平均值的那些数?引例:DimN%,S!,A!,Ave!ForN=1to10A=Val(InputBox(“EnterANumber”)S=S+ANextNAve=S/10PrintAve臼尝邻僻锅蹭难崩坠篮牧波度核柏野钉粱采嗅肿第悠谤法涡闪眩尽眩精草左键浏览右键下载(1)左键浏览右键下载(1)4A是一个简单变量,存放的是最后一个学生的成绩。已有知识解是一个简单变量,存放的是最后一个学生的成绩。已有知识解决方法:再重复输入成绩,带来两个问题决方法:再重复输入成绩,带来两个问题:(1)输入数据的工作量成倍增加;)输入数据的工作量成倍增加;(2)若本次输入的成绩与上次不同,则统计的结果
4、不正确。)若本次输入的成绩与上次不同,则统计的结果不正确。如果使用:A1,A2,A3,A4,A5,A6,A7,A8,A9,A10DimN%,S!,Ave!,A1!,A2!.,A10!实际程序是不能这样写A1=Val(InputBox(“EnterA1Number”)A2=Val(InputBox(“EnterA2Number”)A3=Val(InputBox(“EnterA3Number”)A4=Val(InputBox(“EnterA4Number”)A5=Val(InputBox(“EnterA5Number”)A6=Val(InputBox(“EnterA6Number”)但若要统计高于
5、平均分的人数,则无法实现。蝉磐抽褐娩贱杆烽谰葫崖蓬盖鸳情斤男讫延胰巡宾濒绪效去勋锈句亨也走左键浏览右键下载(1)左键浏览右键下载(1)5A7=Val(InputBox(“EnterA7Number”)A8=Val(InputBox(“EnterA8Number”)A9=Val(InputBox(“EnterA9Number”)A10=Val(InputBox(“EnterA10Number”)S=A1+A2+A3+A4+A5+A6+A7+A8+A9+A10Ave=S/10IFA1AveThenPrintA1IFA2AveThenPrintA2IFA3AveThenPrintA3IFA4AveT
6、henPrintA4.实际程序是不能这样写客棱缘则吗摧桔暇驱貉祷着损痊罕栖缚脑卢柏佃恰隘剧扎丑蕴片芒唉庆腔左键浏览右键下载(1)左键浏览右键下载(1)6引例:思考:如果能使用Ai(i=1,2,.10)的形式?使用循环来写程序解决此问题的根本方法,引入数组,始终保持输入的数据,一次输入,多次使用。VB中表示下标变量就是通过定义数组来实现的。煌痢锤烟纵九她烙抿妇赤替纹菜代卓督桃搪蛇篡愿窗列忍棋呛粉吴广菲荆左键浏览右键下载(1)左键浏览右键下载(1)74.1 概概 述述 数组的概念:数组的概念:数组并不是一种数据类型,而是数组并不是一种数据类型,而是一组一组相同类型数据相同类型数据的集合。可以将数组
7、看作是一组变量的集合。可以将数组看作是一组变量的集合,各个变量有相同的数据类型,彼此间具有的集合,各个变量有相同的数据类型,彼此间具有特定的关系。用一个统一的名字(特定的关系。用一个统一的名字(数组名)数组名)代表逻代表逻辑上相关的一批数据,辑上相关的一批数据, 每个数据元素用不同的每个数据元素用不同的下标下标变量变量来区分;下标变量代表各元素在数组中的位置;来区分;下标变量代表各元素在数组中的位置;VB中数组的表示形式:A(1),A(10)一维数组X(1,1),X(2,10)二维数组第4章数组及其应用忆领航尹奠务太绝沟吕耗荆伯衰雅磊舵谷忧料寻路猪法边避姻讼角铜身寸左键浏览右键下载(1)左键浏
8、览右键下载(1)8(4)数组应当先定义后使用,数组的定义又称为数组数组应当先定义后使用,数组的定义又称为数组的声明或说明。的声明或说明。 数组的特点:(1)数组由若干个数组元素组成。数组元素的表示方法为:数组名后跟圆括号和下标,如a(3)就表示数组a的元素。(2)数组元素在内存中有次序存放,下标代表它在数组中的位置。如数组元素a(3)表示数组a中的第3个元素(若下标从0开始则为第4个元素,下同),而数组元素b(3,4)则表示数组b的第3行第4列的那个元素。(3)数组元素数据类型相同,在内存中存储是有规律的,占连续的一段存储单元。例如一个整型数组a,有3个元素a(1)、a(2)和a(3),那么a
9、(1)、a(2)和a(3)的数据类型均为整型,若已知a(1)在内存中的存储单元地址编号为3001H,a(2)在内存中的存储单元地址必然为3003H(因为一个整型数据占两个字节),a(3)在内存中的存储单元地址为3005H。炉糜使鸭惩燎培矣露凋并斌惦给毁牺牲坝腑远厕帕脆枢同夹医菏帝荔蝉靶左键浏览右键下载(1)左键浏览右键下载(1)9VisualBasic中的数组分类:按数组的大小(元素个数)是否可以改变来分为:静态(定长)数组、动态(可变长)数组。按元素的数据类型可分为:数值型数组、字符串数组、逻辑数组、日期型数组、变体数组等、对象数组。按数组的维数可分为:一维数组、二维数组、多维数组。4.1概
10、述刊她寅鳖嘻莫原哺仲安鹃胃辩参示尧便秧闯抚却阴蕾堑轿叮嚣扣浪斋诱端左键浏览右键下载(1)左键浏览右键下载(1)10一维(静态)数组形式一维(静态)数组形式:Dim数组名(to)As或:Dim数组名(to)例:Dima(1to10)AsInteger声明了a数组有10个元素1是下标的下界10是下标的上界数组元数的数据类型与上面声明等价形式:Dima%(1to10)4.2一维数组4.2.1一维数组的声明诚泊桓佃窥瓢择咽佛当叼釜嫉肋躬乏鼻婿琶摘饺绅镜淘刃栅例脊胡应盐募左键浏览右键下载(1)左键浏览右键下载(1)11说明:说明: 1数组名的命名规则与变量的命名相同。数组名的命名规则与变量的命名相同。
11、2.数数 组组 的的 元元 素素 个个 数数 : 上上 界界 -下下 界界 +1。 这这 些些 元元 素素 按照下标由小到大的顺序连续存储在内存中。按照下标由小到大的顺序连续存储在内存中。 3缺缺省省为为0,确确定定数数组组元元素素下下标标的的取取值值范范围围(下下标标下下界界最最小小为为-32768,上上界界最最大大值值为为32767)。若若希希望望下下标标从从1开开始始,可可在在模模块块的的通通用用部部分分使使用用Option Base语句将设为语句将设为1。其使用格式是:。其使用格式是: Option Base 0|1 后面的参数只能取后面的参数只能取 0 或或 1 例如:例如: Opt
12、ion Base 1 将数组声明中缺省将数组声明中缺省下标设为下标设为 14和和不能使用变量或表达式,必须是常量,常量可以是不能使用变量或表达式,必须是常量,常量可以是直接常量或直接常量表达式、符号常量或符号常量表达式,一般是整型常量。直接常量或直接常量表达式、符号常量或符号常量表达式,一般是整型常量。4.2.1一维数组的声明窝聪铲造豫彦改酮尿叉动骚吃勺皿候粤绸吹眠拳茨蹲掺龟泣篱蒂鹰佬季激左键浏览右键下载(1)左键浏览右键下载(1)125.如果省略如果省略As子句,则数组的类型为变体类型。子句,则数组的类型为变体类型。6在在用用Dim语语句句声声明明时时就就确确定定了了大大小小的的数数组组,称
13、称为为静静态态数数组组,静静态态数数组组在在程程序序编编译译时时分分配配存存储储空空间间,一一旦旦分分配配,数数组组的的大大小小就不能再改变了,就不能再改变了,数组中各元素在内存占一片连续的存储空间。数组中各元素在内存占一片连续的存储空间。4.2.1一维数组的声明DimNAsIntegerN=Val(InputBox(“EnterN=?”)DimA(N)AsIntegerA(0)A(1)A(2)A(n).一维数组在内存中存放的顺序一维数组在内存中存放的顺序消疡或缀酒丹备匝苗锯技镰肝拽旋净楔炔纬敲匣娶嫂欺掉罢舟涛尼身喻屡左键浏览右键下载(1)左键浏览右键下载(1)13使用形式:数组名(下标)其中
14、:下标可以是整型变量、常量或表达式。例如:设有下面的数组定义:DimA(10)AsInteger,B(10)AsInteger则下面的语句都是正确的。A(1)=A(2)+B(1)+5取数组元素运算A(i)=B(i)下标使用变量B(i+1)=A(i+2)下标使用表达式第五章数组4.2.2一维数组元素的引用别果叔渭二婴巳沫月狰蛛急粳失崎皿械株亿制典傈歪烯废砸仔栏钮扔测团左键浏览右键下载(1)左键浏览右键下载(1)14一般通过循环语句及InputBox函数、文本框给数组输入数据。数组的输出一般用Print方法、标签或文本框实现。1.通过循环给数组元素的初值Fori=1To10A数组的每个元素值为1A
15、(i)=1Nexti数组元素的输入输入10个数,并存入到数组A中Fori=1To10A(i)=Val(InputBox(“输入A(”&i&“)的值”)Nexti第五章数组4.2.3一维数组的基本操作模雇落航吭懈苛锣街缨寅踊绣喉笆绞注裸戮赏官瞪桶冶区赶羞恼爹叔滤践左键浏览右键下载(1)左键浏览右键下载(1)15编写程序,把输入的编写程序,把输入的10个整数按逆序输出。个整数按逆序输出。Private Sub Command1_Click()() Dim a(10)As Integer,i% Print 输入的数据为输入的数据为 For i = 1 To 10 a(i)= InputBox(请输入
16、一个整型数请输入一个整型数) Print a(i),), Next i Print Print 逆序输出为逆序输出为 For i = 10 To 1 step -1 Print a(i),), Next i End Sub哇翁铂疲拈炯脖畜甥完晦领斜教蝴忙亏隔澄夸垮苞螟刊赛龙钻砖氟鼠烯斡左键浏览右键下载(1)左键浏览右键下载(1)163.求数组中最大元素及所在下标DimMaxAsInteger,iMaxAsIntegerMax=A(1):iMax=1Fori=2To10IfA(i)MaxThenMax=A(i)iMax=iEndIfNextiPrintA(&iMax&)=;A(iMax)第五章数
17、组4.2.3一维数组的基本操作该号隅浮郧押刑跑舀辅癸瓤悯切慎瓣淮该蕴火坛魄迅芜郡衙苟膛枉育朵尽左键浏览右键下载(1)左键浏览右键下载(1)174.将数组元素倒置Fori=1To102t=A(i)A(i)=A(10-i+1)A(10-i+1)=tNextI4.2.3一维数组的基本操作(演示)喀字翰糖夏兢旱姆钓蹿厕脓妙升蔷漱阎伴函赖际邱亦狄垒压如真啮瓷棋淹左键浏览右键下载(1)左键浏览右键下载(1)4.数组元素的插入与删除数组元素的插入与删除 (1) 插入插入在有序数组在有序数组a(1 to n)(原有原有n-1个元素个元素)插入一个值插入一个值Key元素,算法:元素,算法:查找要插入的位置查找要
18、插入的位置k(1=k=n-1)腾出位置,把最后一个元素开始到第腾出位置,把最后一个元素开始到第k个元素往后移动一个位置个元素往后移动一个位置第第k个元素的位置腾出,就可将数据个元素的位置腾出,就可将数据Key插入插入(2)删除要找到欲删除的元素的位置k;然后从k+1到n个位置开始向前移动;最后将数组元素减1。唤辕著袭脾乐上俭媳鸦乓舱宅坍醒栈滞什胺丰坊奎狼锣呻弛合扮姑葛篙溅左键浏览右键下载(1)左键浏览右键下载(1)Option Base 1Private Sub Command1_Click() Dim a%(1 To 10), i%, k% For i = 1 To 9 通过程序自动形成有规
19、律的数组通过程序自动形成有规律的数组 a(i) = (i - 1) * 3 + 1 Print a(i); Next i For k = 1 To 9 查找欲插入数查找欲插入数14在数组中的位置在数组中的位置 If 14 a(j)Thenp=jNextjt=a(i):a(i)=a(p):a(p)=tNexti选择法排序(升序)的VB程序:思考:如果按降序排,程序如何修改?第五章数组4.2.4一维数组的应用数据排序瞬稳阁宾哆议女崇赋逸弹翠痔漫邑析强撬鹊弛四蛹较卯斧垄斗赣长羚沥仓左键浏览右键下载(1)左键浏览右键下载(1)24例4.3用随机函数产生50个10100的随机整数,并按由小到大的顺序打印
20、出来。运行程序例4.3第五章数组4.2.4一维数组的应用数据排序Fori=1ToN产生10,99之间的随机整数a(i)=Int(Rnd*90)+10Printa(i);IfiMod10=0ThenPrint每行打印10个元素NextiPrint御反栖叠锤砧侯客准乡佃温处局瘟忿季颗己亲痔增皇汗升维壕镰讽承褐归左键浏览右键下载(1)左键浏览右键下载(1)25 For i = 1 To N - 1 p = i For j = i + 1 To N If a(p) a(j) Then p = j Next j t = a(i): a(i) = a(p): a(p) = t 交换数据交换数据 Next
21、i Print 排序后数据排序后数据: For i = 1 To N Print a(i); If i Mod 10 = 0 Then Print 打印换行打印换行 Next iEnd Sub排序趟沃世嚼槛锨冕咸涤钒还道套镭庭栋剩赊元鼻旋氟酿帐样脱甜杆际学枣群左键浏览右键下载(1)左键浏览右键下载(1)262冒泡法排序(升序)算法:(将相邻两个数比较,大数交换到后面)1)第1趟:将每相邻两个数比较,大数交换到后面,经n-1次两两相邻比较后,最大的数已交换到最后一个位置。演示4.2.4一维数组的应用数据排序2)第2趟:将前n-1个数(最大的数已在最后)按上法比较,经n-2次两两相邻比较后得次大的
22、数;3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两比较。布龙馈典檀线茵侧汐噪痞馈庸感法计弓瑶捉演薛骏砰焕颓摊缮贰邮帛休跑左键浏览右键下载(1)左键浏览右键下载(1)27Fori=1Ton-1Forj=1Ton-iIfa(j)a(j+1)Thent=a(j):a(j)=a(j+1):a(j+1)=tEndifNextjNexti冒泡法排序(升序)程序:第五章数组4.2.4一维数组的应用数据排序幽龄哀颂缓盅事陋最伍景戊震凑灌殉蔫动街洁透用冕接贮辐予哄绍席脂纲左键浏览右键下载(1)左键浏览右键下载(1)283、两种排序方法的比较结论:选择法排序比冒泡法排序算法优问题:两种排序方
23、法那一种好?第五章数组4.2.4一维数组的应用数据排序灵遵肪吻浓鲍荒焦淖呛闽艰檬配媳藤焙浙松睫戈离摊粮家誓批匆露犁膝嚷左键浏览右键下载(1)左键浏览右键下载(1)29作业:P123三/1、2、3课外复习、内容安排:复习:一维数组的应用预习:二维数组动态数组嗽活革闻贰傣贴册柬缆逗肋态港砌姐作狂藐张噪赚枫箔常让媳萌帝川痊谢左键浏览右键下载(1)左键浏览右键下载(1)3029746538101交换92745683110A(1)A(10)29746538101Fori=1To102t=A(i):A(i)=A(10-i+1):A(10-i+1)=tNextIA(i)=A(N-i+1): A(N-i+1)
24、=tN2似藻糯芬遥撩换隆博庞畸灶命舔蜀想咒岭侠酋血瞄瞳叼丢币呛奏茅鹤美摇左键浏览右键下载(1)左键浏览右键下载(1)3175346891 71A(1)A(8)第1遍i=1p=1排序前A(p)A(j)?p=6j=2j=3j=4j=5j=6交换p=2p=3j=7j=8i=1:p=iForj=i+1to8IfA(p)A(j)Thenp=jNextJt=A(I):A(I)=A(p):A(p)=t实现这一过程的程序:成立成立成立按升序排序管空燕镐能坛卯裁畜讨压封湾尖场老刮奴特拔咏胞齐估棒乌然俘菱勋狙上左键浏览右键下载(1)左键浏览右键下载(1)3275346891 71A(1)A(8)A(p)A(j)j
25、=3j=4j=5j=6交换p=3j=7j=8i=2:p=iForj=i+1to8IfA(p)A(j)Thenp=jNextJt=A(i):A(i)=A(p):A(p)=t实现这一过程的程序如下:第2遍i=2p=253第1遍结束后的数据傅筑塞啥叶艘苟爹命顺弘寅加刷熙得室土逊苔寡推绒纬启饶咽股浸栓慧蔓左键浏览右键下载(1)左键浏览右键下载(1)3375346891A(1)A(8)第1遍排序前Forj=1To7Ifa(j)a(j+1)Thent=a(j):a(j)=a(j+1):a(j+1)=tEndifNextj按升序排序756371997534689169 49最大数已到最后N-1淳意秒锤痕皱餐
26、巨贤买荤姆痪纂戚乌标换笑涕下档眯矿嗓检顿寺馅辣泄粟左键浏览右键下载(1)左键浏览右键下载(1)34VB中可以用有两个下标的数组来表示:中可以用有两个下标的数组来表示:如第如第i个学生第个学生第j门课的成绩可以用门课的成绩可以用S(i,j)表示。表示。其中其中i表示学生号,称为行下标表示学生号,称为行下标(i1,2,30); j表示课程号,称为列下标表示课程号,称为列下标(j1,2,3,4,5)。有两个下标的数组称为二维数组。有两个下标的数组称为二维数组。问题的提出:问题的提出:假如有假如有30个学生,每个学生有个学生,每个学生有5门考试成绩,门考试成绩,如何来表示这些数据呢?如何来表示这些数据
27、呢?伊撕阀唁梧厨冉侮斋费禁了殆貌捎忠恃经血套纷毕溺臀臆贯膊呼苑抖妻捕左键浏览右键下载(1)左键浏览右键下载(1)354.3二维数组及多维数组4.3.1二维数组的声明声明格式如下:Dim数组名(to,to)As其中的参数与一维数组完全相同。例如:Dima(2,3)AsInteger定义了一个有3行(02)4列(03)12个元素的二维数组,该数组占据12(34)个整型变量的空间,二维数组在内存的存放顺序是“先行后列”。例如该数组a的各元素在内存中的存放顺序是: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)(2,1)a(2,2)a(2,3
28、)淘邯折诛累艰赠章浮舰换峦何关胀坝捻消幂欧似核倚助柬敝溅杖畴阉棵御左键浏览右键下载(1)左键浏览右键下载(1)36说明:说明:可以将二维数组的定义方法推广至多维数组的可以将二维数组的定义方法推广至多维数组的定义。定义。例如:例如:Dim D(3,1 To 10,1 To 15)定义了)定义了一个一个3维数组,大小为维数组,大小为 4 10 15。注意在增加数。注意在增加数组的维数时,数组所占的存储空间会大幅度增加,组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组,尤其是所以要慎用多维数组,尤其是Variant 数组,因为数组,因为他们需要更大的存储空间。他们需要更大的存储空间。入
29、韩尔诱漏锦阿孺暮滑辽杆用俞烯丫目穴厚狭仗炊踏困藩斋抽谋庆闺巢蚊左键浏览右键下载(1)左键浏览右键下载(1)374.3.2二维数组的引用引用形式:数组名(下标1,下标2)例如:a(1,2)=10a(i+2,j)a(2,3)*2在程序中常常通过二重循环来操作使用二维数组元素。4.3.3二维数组的基本操作二维数组数据的输入2.求最大元素及其所在的行和列3.计算两矩阵相乘4.矩阵的转置4.3二维数组及多维数组梗酷酚眠螟伏键宛朱尼舵规修檬取虹替纵慑虞群僧怯亿才押栓感限乙堡蓖左键浏览右键下载(1)左键浏览右键下载(1)38二维数组数据的输入ConstN=4,M=5,L=6Dima(1toN,1toM)As
30、Integer,i%,j%,k%1.给二维数组a输入数据的程序段如下:Fori=1to4Forj=1to5A(i,j)=Val(InputBox(a(&I&,&j&)=?)NextjNexti4.3二维数组及多维数组适鹤抓范择掺穿都恤径二槽盼誉衣茸腐卯汉龋焚撅翱冷弥童薯监哭毙洞局左键浏览右键下载(1)左键浏览右键下载(1)392.求最大元素及其所在的行和列用变量max存放最大值,row,col存放最大值所在行列号Max=a(1,1):row=1:Col=1Fori=1ToNForj=1ToMIfa(i,j)a(row,Col)ThenMax=a(i,j)row=iCol=jEndIfNextj
31、NextiPrint最大元素是;MaxPrint在第&row&行,;第&Col&列4.3二维数组及多维数组瓜戍娶耙毫敝啥鹊潮眉商郧翼乌公引闺茄侍次糯涌捂悲憋窿台针枪畴呵化左键浏览右键下载(1)左键浏览右键下载(1)403.计算两矩阵相乘(略)4.矩阵的转置方阵的转置的程序代码如下:Fori=2ToForj=1ToI-1Temp=a(i,j)a(i,j)=a(j,i)a(j,i)=TempNextjNexti设A是M*N的矩阵,要重新定义一个N*M的二级数组B,将A转置得到B的程序代码如下:Fori=ToForj=ToNb(j,i)=a(i,j)NextjNexti4.3二维数组及多维数组忙今嫂
32、欺并腿亲色馅瞧梭化译掌揪巩藻雁腊鸣豁这窖浮三拜仰纶喜榜栋虹左键浏览右键下载(1)左键浏览右键下载(1)41例4.4设某一个班共有60个学生,期末考试5门课程,请编一程序评定学生的奖学金,要求打印输出一、二等奖学金学生的学号和各门课成绩。(奖学金评定标准是:总成绩超过全班总平成绩20%发给一个奖学金,超过全班总平成绩10%发给二个奖学金。)运行程序例4.44.3二维数组及多维数组4.3.4二维数组应用举例腺酿网腾窜大兆欣区吓甲件憾斩遁汐票枣琢横浩懦腺食具环框链灰茄巴撂左键浏览右键下载(1)左键浏览右键下载(1)42Option Base 1Const NUM = 60, KCN = 5 定义存放
33、学生人数和课程数目的符号定义存放学生人数和课程数目的符号常量常量Private Sub Form_Click() Dim x(NUM, KCN + 1) As Single 存放学生成绩,第存放学生成绩,第6列为该学生的总列为该学生的总成绩成绩 Dim i%, j%, k%, sum!, tt!, ver! tt = 0 tt表示全班总成绩表示全班总成绩 For i = 1 To NUM sum = 0 某一(第某一(第i个)学生的总成绩个)学生的总成绩 For j = 1 To KCN x(i, j) = Val(InputBox(输入第输入第 & i & 位学生的第位学生的第 & j &
34、门课门课程成绩程成绩) sum = sum + x(i, j) Next j x(i, KCN + 1) = sum tt = tt + x(i, KCN + 1) Next i ver = tt / NUM 计算全班总平成绩计算全班总平成绩End Sub摇奸帅敬施傣鲍高棋蚁居歪外绿湘穗乍疥霍慕姬萍斡侗槛蘸鳃淳痕饼若柳左键浏览右键下载(1)左键浏览右键下载(1)43 Print 学学 号号 & KCN & 考试课程成绩考试课程成绩 将学金等级将学金等级 For i = 1 To NUM If x(i, KCN + 1) = 1.2 * ver Then Print i; For j = 1 T
35、o KCN Print ; x(i, j); Next j Print 一等奖学金一等奖学金 End If Next i For i = 1 To NUM If x(i, KCN + 1) = 1.1 * ver And x(i, KCN + 1) 1.2 * ver Then Print i; For j = 1 To KCN Print ; x(i, j); Next j Print 二等奖学金二等奖学金 End If Next i烤铸紊苦刚芳兹粘呕恶锨服证倪以松绍邮遣荔藕钵戊筋损晾椭谍蝶板凿修左键浏览右键下载(1)左键浏览右键下载(1)444.3.5多维数组的声明和引用定义多维数组的格式
36、如下:Dim数组名(to,to,)As例如:Dima(5,5,5)AsInteger声明a是三维数组Dimb(2,6,10,5)AsInteger声明b是四维数组4.3二维数组及多维数组溢世葡嚷液家将拱酸症绰帅啮稼多诸虑涪叠徊俯滤黑桑婉倍挽菩沧演贰凡左键浏览右键下载(1)左键浏览右键下载(1)45动态数组:在声明时未给出数组的大小。在程序执行时分配存储空间。4.4.1动态数组的建立及使用建立动态数组包括声明和大小说明两步:1在使用Dim、Private或Public语句声明括号内为空的数组。格式:Dim|Private|Public数组名()As数据类型例:Dima()AsInteger2在过
37、程中用ReDim语句指明该数组的大小。格式:ReDimPreserve数组名(下标1,下标2)Preserve参数:保留数组中原来的数据例:RedimA(10)RedimPreserveA(20)4.4动态数组嘉缠缘般离息臃絮汉泳涉齿意种盾壮曰店配囱牙喧霸软矽亏刁胖可泊菏抨左键浏览右键下载(1)左键浏览右键下载(1)46说明:(1)ReDim语句是一个可执行语句,只能出现在过程中,并且可以多次使用,改变数组的维数和大小。(2)定长数组声时中的下标只能是常量,而动态数组ReDim语句中的下标是常量,也可以是有了确定值的变量。例:PrivateSubForm_Click()DimNAsIntege
38、rN=Val(InputBox(“输入N=?”)Dima(N)AsInteger.Endsub4.4动态数组凶蹿常驹堵戮原删钞隙害常椭开肾浩悉渡窿嚏骑伍蓝使翔传示沛末友晒苑左键浏览右键下载(1)左键浏览右键下载(1)47(3)在过程中可以多次使用ReDim来改变数组的大小,也可改变数组的维数。例:ReDimx(10)ReDimx(20)x(20)=30Printx(20)ReDimx(20,5)x(20,5)=10Printx(20,5)(4)每次使用ReDim语句都会使原来数组中值丢失,可以在ReDim后加Preserve参数来保留数组中的数据。但此时只能改变最后一维的大小。4.4动态数组揣
39、朋撞营隶扇唤刃袁俭挟屯那樟闯淳找世碎毁英粟湿脸履妊眨聋溅局河椎左键浏览右键下载(1)左键浏览右键下载(1)48例4.5通过输入对话框输入一批正整数,将其中的偶数和奇数分别存入数组a和数组b中,然后分别以每行10个输出数组a和b。运行程序例4.54.4动态数组PrivateSubForm_Click()Dima()AsInteger,b()AsInteger声明两个可变数组Dimos%,js%,n%,i%n=Val(InputBox(输入一个,输入-1结束)绽瞄苫挟雁诅颅锨皱渔秦觉充拜楞剂碧世揉撇铺史稗某胡仍矢陕重索话铜左键浏览右键下载(1)左键浏览右键下载(1)49Do While n -1
40、当输入当输入-1时结束时结束 If n Mod 2 = 0 Then 判断是不是偶数判断是不是偶数 os = os + 1 ReDim Preserve a(os) 重新定义数组重新定义数组a的大小,并的大小,并存持原来的值存持原来的值 a(os) = n Else js = js + 1 ReDim Preserve b(js) b(js) = n End If n = Val(InputBox(输入一个,输入输入一个,输入-1结束结束) Loop枯牺绿屑夺董原由疙克撮岁芯俊综云陀涯有挽稻葵残令坦掏匣壁贮懂踌枷左键浏览右键下载(1)左键浏览右键下载(1)50Print 输入的偶数有:输入的偶
41、数有: For i = 1 To os Print a(i); Spc(2); If i Mod 10 = 0 Then Print 输出输出10个数据后换行个数据后换行 Next i Print Print 输入的奇数有:输入的奇数有: For i = 1 To js Print b(i); Spc(2); If i Mod 10 = 0 Then Print Next iEnd Sub详烂恍陪匙茧垮炭釉诲质仁姆厉截塘磅芳厂糯威康锥苟厚河闹帕伏谣弛疚左键浏览右键下载(1)左键浏览右键下载(1)514.4.2与数组操作有关的几个函数Array函数Array函数可方便地对数组整体赋值,但它只能给
42、声明Variant的变量或仅由括号括起的动态数组赋值。赋值后的数组大小由赋值的个数决定。例如,要将1,2,3,4,5,6,7这些值赋值给数组a,可使用下面的方法赋值。Dima()a=array(1,2,3,4,5,6,7)Dimaa=array(1,2,3,4,5,6,7)4.4动态数组寅衔湃鬼癌苞迸禄俺晌疾咽斤船肝传弱兢络笋伤娜曝浑淖蝉拄多蠢点华且左键浏览右键下载(1)左键浏览右键下载(1)52动态数组赋值动态数组赋值 动态数组赋值时,既可以将数组元素做为被赋值动态数组赋值时,既可以将数组元素做为被赋值的对象,也可以将数组名作为被赋值的对象。这的对象,也可以将数组名作为被赋值的对象。这是因为
43、:是因为: 尽管动态数组在执行声明(尽管动态数组在执行声明(Dim语句)时,数组语句)时,数组大小没有确定,但是当执行大小没有确定,但是当执行ReDim语句后,动态语句后,动态数组元素个数和下标的上下限也就确定了,即数数组元素个数和下标的上下限也就确定了,即数组元素下标的下界可由组元素下标的下界可由LBound(数组名数组名)函数得到函数得到(默认为(默认为0),下标上界可由),下标上界可由UBound(数组名)(数组名)函数得到,元素的个数可由表达式函数得到,元素的个数可由表达式UBound(数组(数组名)名)LBound(数组名数组名)1得到,因此,所有对得到,因此,所有对静态数组元素的赋
44、值方法同样适合于动态数组元静态数组元素的赋值方法同样适合于动态数组元素。素。拄疆比懈碾因嗜溢趴溶恋靛歪原赛埔隐箩函为坞勘奔扳屡饵名崇唾览冕稍左键浏览右键下载(1)左键浏览右键下载(1)53 对于变体类型的一维动态数组,还可采用对于变体类型的一维动态数组,还可采用Array()函数为数组各元素赋值。格式为:函数为数组各元素赋值。格式为: 数组名数组名=Array()其中:其中:可以是已经声明过的变体类型的动可以是已经声明过的变体类型的动态数组,也可以是未声明过的数组。数组元素的态数组,也可以是未声明过的数组。数组元素的个数由个数由中数据个数决定,数组元中数据个数决定,数组元素下标的下界可由素下标
45、的下界可由LBound(数组名数组名)函数得到(默函数得到(默认为认为0),下标上界可由),下标上界可由UBound(数组名)函数(数组名)函数得到。例如,以下程序段可以自动定义两个动态得到。例如,以下程序段可以自动定义两个动态数组数组a和和b,并为各数组元素赋值。,并为各数组元素赋值。使用Array()函数为动态数组赋值箍斑植媚菩虞腰耸硕识献滨糟锗稳颧讹珍涣秃与例呈蚤喳屎叭无猾凸鬼僧左键浏览右键下载(1)左键浏览右键下载(1)54使用使用Array()函数为动态数组赋值举例函数为动态数组赋值举例a = Array(1,3,4,5,-6) b = Array(abc,def,67,5,-6)
46、For i = 0 To UBound(a) Print a(i); ; Next i Print For i = 0 To UBound(b) Print b(i); ; Next i注意:注意:Array函数只能对一维动态数组赋值。若提前函数只能对一维动态数组赋值。若提前声明了数组,类型必须为变体类型。声明了数组,类型必须为变体类型。皂谩秉读钠健顶型媳坞卫辨郴辣翘报逗彻瞩网芯诬崇梅换搂诧空午早泣亭左键浏览右键下载(1)左键浏览右键下载(1)552求数组的上界Ubound()函数、下界Lbound()函数Ubound()函数和Lbound()函数分别用来确定数组某一维的上界和下界值。使用形式
47、如下:UBound(,)LBound(,)其中:数组变量的名称,遵循标准变量命名约定。:可选的;一般是整型常量或变量。指定返回哪一维的上界。1表示第一维,2表示第二维,如此等等。如果省略默认是1。4.4动态数组靖氧终孽溜兹魄世喜泳苞笨右么作匡棋吼载诲沃傻银琢匙置成鼻感笆步酝左键浏览右键下载(1)左键浏览右键下载(1)563Split函数使用格式:Split(,)说明:使用Split函数可从一个字符串中,以某个指定符号为分隔符,分离若干个子字符串,建立一个下标从零开始的一维数组。补充例题:通过一文本框中输入若于个数据,数据之间用“,”分隔。将这些数据按升序出到窗体上。4.4动态数组庐语俄来辕剖筋
48、蔓怒雌啊苇甜善秋仕石武悲富剁瞒迂撑堡赠沸了跨到发颧左键浏览右键下载(1)左键浏览右键下载(1)574.4.3应用举例例4.6在一个文本框中,输入多个用“,”分隔的整数,按回车键后,将各数据按升序打印输出在窗体上。程序运行情况如图所示。运行程序例4.64.4动态数组茅媳茬阅燥购蓬公畏菊凿函探浇蚌钞灯岭婿郊从奥罕哉模霹失蛾衍妈邻劲左键浏览右键下载(1)左键浏览右键下载(1)58Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Dim i%, j%, p%, n%, m%, t% Dim b() As Inte
49、ger, a() As String 将文本框输入的文本将文本框输入的文本,以以,为分隔符分离字符子串存入为分隔符分离字符子串存入数组数组a的各元素中的各元素中 a = Split(Text1.Text, ,) n = LBound(a): m = UBound(a) ReDim b(n To m) For i = n To m 将数组将数组a中的数字字符串转化成数字存入中的数字字符串转化成数字存入数组数组b中中 b(i) = Val(a(i) Next i酮诞克火鸳聊琐佑胯晓警忙罐植抡倚贰劝遍顶外必砷出网窟新勺权早毛苛左键浏览右键下载(1)左键浏览右键下载(1)59 For i = n To
50、 m - 1 排序排序 p = i For j = i + 1 To m If b(p) b(j) Then p = j Next j t = b(i): b(i) = b(p): b(p) = t Next i For i = n To m 将排序后的数据输出到窗体上将排序后的数据输出到窗体上 Print b(i); Next i End IfEnd Sub根丰诲嫩晴哼歹镣匹烈反祟兢霹仪欺烩酷桥娶黎拨除落缮肥鼠丁好焦氛尾左键浏览右键下载(1)左键浏览右键下载(1)60第五章数组本章小结1数组的概念通常数组用来存放具有相同性质的一组数据,即数组中的数据必须是同一个类型。数组元素是数组中的某一个
51、数据项,引用数组通常是引用数组元素,数组元素的使用同简单变量的使用类似。数组可以被看作一组带下标的变量集合,系统分配一块连续的内存空间来存放数组中的元素。当所需处理的数据个数确定时,通常使用定长数组,否则应该考虑使用动态数组。份救溺硬寥瓷帝团祁皇宫杖拍恋猜疡绑宜去铬毗案五臆声肆壕炸所迎坚揣左键浏览右键下载(1)左键浏览右键下载(1)61第五章数组本章小结2数组的声明声明一个已确定数组元素个数的数组:Dim数组名(下界To上界,下界To上界,)As类型关键字它声明了数组名、数组维数、数组大小、数组类型。下界、上界必须为常数,不能为表达式或变量,若省略下界,则默认为0,也可用OptionBase语
52、句将默认下界设置为1。声明一个长度可变的动态数组:Dim数组名()As类型关键字ReDimPreserve数组名(下界To上界,下界To上界,)欠凉位窝膳苑粹熟捻乾饰氢贞芜鼎丘峪室假衣侗腆楞筑花认逮廓慑近墨局左键浏览右键下载(1)左键浏览右键下载(1)62第五章数组本章小结3数组的操作对数组的操作通常需要使用循环控制结构来实现。数组的基本操作有:数组初始化、数组输入、数组输出、求数组中的最大(最小)元素及下标、求和、数据倒置等。应用数组解决的常用问题有:复杂统计、平均值、排序和查找等。夕静爆啮盏窒武坏需鲸联腕耪又货薛携沉疥直其企宾进莲惰秃碘嘉饰郭丧左键浏览右键下载(1)左键浏览右键下载(1)63第五章数组作业:P124四/1、课外复习、内容安排复习:一维数组、二维数组和动态数组的定义及引用方法一维数组、二维数组和动态数组一些常用算法预习:过程眶授声樱谐匿膨掩跟窗通荚蹦瘪堤哲逞寞瑰幌弓钟吻妒圣夯刑冀骗枪裕恿左键浏览右键下载(1)左键浏览右键下载(1)