




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章数组和记录
5.1数组的概念
5.2数组的定义
5.3数组的基本操作
5.4数组的应用
5.5控件数组
5.6记录
5.7常用算法(二)第5章数组和记录5.1数组的概念15.1数组的概念
1.数组的作用数组通常和循环一起使用可以大大减少编程的复杂性,有些算法不用数组就无法实现。例5.1计算100个学生某门课的平均分,并统计高于平均分的人数。不用数组就很难编程。Dimmark(1To100)AsInteger,aver!,over%,i%aver=0:over=oFori=1To100mark(i)=InputBox("输入成绩")aver=aver+mark(i)‘计算总分Nextiaver=aver/100‘over=0Fori=1To100If(mark(i)>aver)Thenover=over+1NextIPrintaver,over5.1数组的概念1.数组的作用22.数组的概念数组是一批数据或控件的集合。
普通数组存放一批相同类型的数据控件数组存放一批相同名称的控件例如,定义一个integer型数组a(10),它包含11个同类型的变量:a(0),a(1),……,a(10)Variant型数组则可以存放不同类型的数据又如,在窗体上画一个标签label1,并用复制和粘贴的方法操作5次,可以得到一个名称为label1的控件数组,含6个标签,每个标签的名称均为label1,但各个控件的index属性值分别是0,1,……,5。2.数组的概念3
3.数组元素和数组的维数数组的成员称为数组元素,其名称与数组名相同,其下标表示该元素在数组中的位置。因此,数组元素也称下标变量。数组的维数表示数组元素需要几个下标才能正确表示其在数组中的位置,它代表数组的逻辑结构,最多60维。一维数组的逻辑结构是线性的,只用一个下标表示各个元素在数组中的位置例a(10):含11个元素的一维数组
a(0),a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8),a(9),a(10)二维数组的逻辑结构是一个二维表,用两个下标表示各个元素在数组中的位置:第一个下标表示行,第二个下标表示列。例b(2,3):含三行四列共12个元素的二维数组
b(0,0)b(0,1)b(0,2)b(0,3)b(1,0)b(1,1)b(1,2)b(1,3)b(2,0)b(2,1)b(2,2)b(2,3)3.数组元素和数组的维数4
4.数组的存储结构数组在内存中占用一片连续的存储单元。
一维数组的存储结构与逻辑结构相同,即各个元素按下标顺序依次存放;
二维数组的存储结构是按行的顺序存储各个元素。例如,数组b(2,3)的存储形式为:b(0,0)b(0,1)b(0,2)b(0,3)b(1,0)b(1,1)b(1,2)b(1,3)b(2,0)b(2,1)b(2,2)b(2,3)
三维数组是由若干个二维数组组成的,其存储结构是按顺序存储各个二维数组。例如,数组c(1,2,1)的存储形式为:c(0,0,0)c(0,1,0)c(0,2,0)c(1,0,0)c(1,1,0)c(1,2,0)c(0,0,1)c(0,1,1)c(0,2,1)c(1,0,1)c(1,1,1)c(1,2,1)4.数组的存储结构55.2数组的定义静态数组(定界数组)动态数组(可变数组、可调数组)
静态数组:在定义时明确规定数组的大小,且在程序运行过程中,其大小不能再改变
动态数组:在定义时不指定数组的大小,在运行过程中可以根据需要用ReDim重新规定其大小数组5.2数组的定义数组6
1.静态数组的定义
形式:Dim数组名(维界1[,维界2…])[As类型]维界1、维界2等表示各维的大小,形式为:
[下界To]上界
下界和上界为常数表达式:
-2147483648到2147483647下界缺省时默认0维界用来确定数组的体积。类型缺省时,默认变体型
除了用Dim外,还可以用static、private和public来定义数组,它们可以在不同的窗体和模块内定义,所定义的数组的作用范围也不相同。1.静态数组的定义7下界可以缺省,系统默认的下界缺省值为0。例:DimlArray(0To3,0To4)AsLong等价于:DimlArray(3,4)AsLong
例:Dimmark(1to100)AsInteger下界可以缺省,系统默认的下界缺省值为0。例:Dimmark8如果需要默认的下界缺省值不是0,则可以在通用声明段内用OptionBase语句确定,例如用
OptionBase1来定义下界缺省值为1,此后,若定义Dima(2,3)则等价于Dima(1to2,1to3)注意:(1)在数组定义中,数组名后面括号中数值表示数组的维界,即每一维的大小;而在程序其他地方出现的带扩号的则表示数组中的某一个元素,括号中的数值表示该元素在数组中的位置。两者写法形式相同,但意义不同。Dimx(10)AsInteger‘定义x数组有11个元素x(10)=100‘对x(10)这个数组元素赋值(2)静态数组一经定义,编译系统为其安排存储空间,其维数和各维大小不能再改变如果需要默认的下界缺省值不是0,则可以在通用声明段内用Opt9
2.动态数组的定义定义动态数组时,数组名后面的括号内不含维界。这时,编译系统并不为该数组安排存储空间。而在程序运行时,用ReDim语句指明该数组的大小,并安排存储空间DimsArray()AsSingleSubForm_Load() …ReDimsArray(4,8)‘sArray原有值丢失 …ReDimPreservesArray(4,100)‘sArray原有值保留…EndSub2.动态数组的定义10
(1)重新定义动态数组的大小时,既可以改变其大小,也可以改变其维数,下标可以用常数,也可以用有确定值的变量。例如:Dima()AsInteger‘a为动态数组PrivateSubCommand1_click()ReDima(4,5)‘重新定义动态数组……n=InputBox(“请输入n的值”)ReDima(n)‘重新定义动态数组……EndSub(1)重新定义动态数组的大小时,既可以改变其大小,也可11
(2)定义Variant型动态数组时,可以省略数组名后面的圆括号Dima‘a为variant型变量或数组a=5‘a为简单变量PrintaRedima(5)‘a为数组ForI=0to5a(I)=IPrinta(I);NextI(2)定义Variant型动态数组时,可以省略数组名后面12
(3)每次使用ReDim语句都会使数组中原有的数据丢失,当希望改变数组大小而又要保留数组中原有的数据时,可以在数组名前面增加Preserve关键字,这时,只能改变多维数组中最后一维的上界,而不允许改变其它维的大小及最后一维的下界。Dima()AsInteger……ReDima(10,10)……ReDimPreservea(10,Ubound(a)+2)‘正确……ReDimPreservea(Ubound(a)+2,10)‘错误(3)每次使用ReDim语句都会使数组中原有的数据丢失,当135.3数组的基本操作1.数组元素的赋值(1)静态数组只能对数组元素逐一赋值,不能用数组名整体赋值Dima(4)AsIntegerFori=0To4 a(i)=10‘a数组的每个元素值为10NextI是允许的。
a=(1,2,3,4,5)是不允许的。
5.3数组的基本操作1.数组元素的赋值14
(2)变体型动态数组可以用Array函数定界和整体赋值DimaAsVariant,b()Asvariant,i%a=Array(1,2,3,4,5)b=Array(“abc”,”derf”,67,True)Fori=Lbound(a)ToUbound(a)Picture1.Printa(i)NextiFori=Lbound(b)ToUbound(b)Picture1.Printb(i)NextI其中,Lbound()和Ubound()用来确定数组的下界和上界(2)变体型动态数组可以用Array函数定界和整体赋值15
(3)动态数组也可以用同类型的静态数组整体赋值Dima(4)AsInteger,b()AsIntegera(0)=1:a(1)=3:a(2)=5:a(3)=-8:a(4)=7
b=a‘将数组a整体赋给数组b,b为动态数组其中,b=a相当于Fori=Lbound(a)ToUbound(a)b(i)=a(i)Nexti(3)动态数组也可以用同类型的静态数组整体赋值162.数组的输入
可以用InputBox函数或文本框实现数组的输入DimsB(4,5)AsInteger,i%,j%Fori=0To4Forj=0To5
sB(i,j)=InputBox("输入sB("&i&","&j&)"的值")NextjNextiFori=0To4Forj=0To5PrintFormat$(sB(i,j),"00");spc(2);NextjPrintNexti用inputbox输入数组2.数组的输入用inputbox输入数组173.数组的输出数组的输出只能对数组的各个元素进行。例:输出方阵sc中的下三角元素
Dimsc(4,4)AsInteger
Fori=0To4Forj=0Toisc(i,j)=i*5+jPrintsc(i,j);““;NextjPrintNexti如何输出上三角?3.数组的输出如何输出上三角?184.求数组中最大元素及所在下标及各元素之和
OptionBase1
DimMaxAsInteger,iMaxAsIntegerDimSumAsInteger,iA(10)…… Max=iA(1):iMax=1:Sum=iA(1)Fori=2To10IfiA(i)>MaxThen‘求最大值Max=iA(i)iMax=iEndIfSum=Sum+iA(i)‘求各元素之和NextiPicture1.PrintMax,iMax,Sum4.求数组中最大元素及所在下标及各元素之和195.将数组iA(10)中第一个元素与最后一个元素交换,第二个元素与倒数第二个元素交换,直到整个数组各元素按逆序存放。
Fori=1To10\2t=iA(i)iA(i)=iA(10-i+1)iA(10-i+1)=tNexti5.将数组iA(10)中第一个元素与最后一个元素交换,第二201.控件数组的概念一组相同的控件可以组成一个控件数组,它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index=0,1,2,...),类似数组的下标。使用控件数组的最大优点是数组中的各个控制件可以共享同样的事件过程,从而减少编程工作量。例:PrivateSubcmdName_Click(IndexAsInteger)…IfIndex=3then‘处理第四个命令按钮的操作EndIf…EndSub5.4控件数组1.控件数组的概念5.4控件数组212.控件数组的建立(1)在设计阶段建立第一步先建立第一个控件,即在窗体上画出该控件,设置其Name属性,作为控件数组名。第二步选中该控件,进行“复制”和“粘贴”,当弹出的对话框中出现“已经有一个控件为…...,创建控件数组吗”信息时,单击“是”按钮,就建立了一个控件数组,经过若干次“复制”和“粘贴”,可以建立该控件数组的各个元素。每个元素都是一个控件,它们具有相同的Name,各个控件的index属性值为该控件在数组中的位置(索引)号,从0开始。第三步编制控件数组的事件过程。2.控件数组的建立22例5.3建立含有四个命令按钮的控件数组,当单击某个命令按钮,分别显示不同的图形或结束操作。PrivateSubcommand1_Click(IndexAsInteger)Picture1.ClsPicture1.FillStyle=5'填充右斜线图案SelectCaseIndexCase0Picture1.Print"画直线"Picture1.Line(2,2)-(7,7)Case1Picture1.Print"画矩形"Picture1.Line(2,2)-(7,7),,BFCase2Picture1.Print"画圆"Picture1.Circle(4.5,4.5),3.5,,,,1CaseElseEndEndSelectEndSub例5.3建立含有四个命令按钮的控件数组,当单击某个命令按钮23(2)在程序运行阶段建立第一步在窗体上画出某控件(如Label1),并设置该控件的Index属性值为0,表示该控件为数组,从而建立控件数组的第一个元素第二步在编程时通过Load方法添加其余的若干个元素,也可以通过Unload方法删除某个添加的元素。如:Loadlabel1(i)i>=1第三步在程序中为每个新添加的控件数组元素设置Left和Top属性以确定其在窗体的位置,并将其Visible属性设置为True(或-1)。程序运行时会自动按程序中的设置,将各个控件显示在窗体上。(2)在程序运行阶段建立24例5.4通过程序建立的方法在窗体上用64个标签框组成一个国际象棋的棋盘。①先在窗体上画label1控件,设置其Index属性值为0,表示该控件为数组,从而建立控件数组的第一个元素②在Form_load()事件中用两重循环由Load方法自动生成8行8列label1(k),k=8(i-1)+j,并确定每个控件的Left和Top③在label1_click()事件中获得被单击的label1控件的index值,并改变所有控件的颜色用程序建立的方法例5.4通过程序建立的方法在窗体上用64个标签框组成一个国25*VB程序设置颜色的四种方法①用RGB(x,y,z)函数—x、y、z在0~255之间取值黑色RGB(0,0,0)兰色RGB(0,0,255)绿色RGB(0,255,0)青色RGB(0,255,255)红色RGB(255,0,0)洋红色RGB(255,0,255)黄色RGB(255,255,0)白色RGB(255,255,255)②用QuickBASIC提供的颜色函数QBColor(i)0黑色1兰色2绿色3青色4红色5洋红色6黄色7白色8灰色9亮兰色10亮绿色11亮青色12亮红色13亮洋红色14亮黄色15亮白③使用“对象浏览器”中列出的内部常数vbBlack黑vbBlue蓝vbCyan青vbGreen绿vbMagenta洋红vbRed红vbWhite白vbYellow黄④直接用十六进制长整数表示(数值越小颜色越深)&H0&黑……&HFFFFFF&白*VB程序设置颜色的四种方法265.5自定义数据类型(记录)记录的概念记录是由一组相关的数据项(字段)组成的整体。例如,一个学生的记录包括学号、姓名、性别、各门课的分数等,均称为数据项或字段,它们可以是不同的数据类型。
在VB中,每个控件是一个对象,一个对象的所有属性组成一个记录,属性名则是记录的一个数据项(字段)。当用户自己创建类或对象时,就要定义属性记录。5.5自定义数据类型(记录)记录的概念272.记录的定义
定义记录时,要先定义记录类型,然后再定义该记录类型的变量或数组。记录类型的定义
Type自定义类型名元素名[(下标)]As类型名…………元素名[(下标)]As类型名EndType例:TypeStudType NoAsInteger'学号 NameAsString*20'姓名 SexAsString*1 '性别 Mark(1To4)AsSingle'4门课程成绩 TotalAsSingle '总分EndType2.记录的定义定义记录时,要先定义记录类型,然后再定义28
定义记录的语句如果放在标准模块中,可省略public。如果放在窗体中,则必须用private。如在窗体的通用声明处PrivateTypeStuType……EndType在模块的通用声明处[Public]TypeStuType……EndType(2)记录变量或数组的定义可以用已定义的记录类型定义变量或数组。DimaAsStuType,b(20)AsStuType3.记录的引用(1)引用记录的一般形式是
<记录变量名>.<字段名>a.IntNo=123a.StrName=“李明”
定义记录的语句如果放在标准模块中,可省略public。29(2)用With语句引用形式:With<对象名>语句块EndWith其中,对象名可以是记录变量、控件名或其他的对象名作用:对一个对象执行多条语句时,可省略对象名。例如:要给记录变量a赋值,可以用with语句设置。Witha.IntNo=123.StrName=“李明”.strSex=“M”.sngMark(1)=87.sngMark(2)=91.sngMark(3)=79.sngMark(4)=95.blnTag=TrueEndWith(2)用With语句引用30例5.5利用记录类型编程模拟数据库记录的输入、显示和查询。标签:Label1~Label5文本框:Text1~Text3命令按钮:Command1(3)在窗体通用声明段定义记录类型:PrivateTypeStudType用Command1_Click(IndexAsInteger)事件编程新增:添加记录前一个:显示前一条记录后一个:显示下一条记录最高分:显示最高分位置:显示总记录数和当前记录号例5.5利用记录类型编程模拟数据库记录的输入、显示和查询。315.6常用算法(二)
1.分类统计例5.6输入一串字符,统计各字符出现的次数,不区分字母的大小写。5.6常用算法(二)1.分类统计32设计:用一个文本框输入字符串,图形框输出个字符的个数,命令按钮进行统计。算法:为了计算各字母的个数,定义一个含26个元素的一维整型数组a,a(1)存放字母a或A的个数,a(2)存放字母b或B的个数,……。为了对各个字母计数,用Mid$()函数依次取出字符串中的各个字母并进行判断和计数。为了不区分大小写,可用Ucase$()函数将所取出的字母一律转换成大写,也可用Lcase$()将所取出的字母一律转换成小写设计:用一个文本框输入字符串,图形框输出个字符的个数,命令按332.大量数据的输入和编辑例5.7利用文本框可实现大量数字串输入和编辑的功能。用Text1输入一批数字串,Picture1显示数字串中的各个数字,Text2输出数组各元素用a=split(text1,”,”)将text1中的文字按逗号分割成各个数组元素,并显示在图形框picture1中用text2=join(a,”“)将数组a合并成用空格分隔的字符串2.大量数据的输入和编辑用a=split(text1,”,”34设计:两个命令按钮,一个用于通知用户输入数字串;另一个用于合并数组元素。两个文本框,一个用于输入和编辑数据,另一个用于输出结果;图形框用于输出数组a各元素的值。算法:①通过Text1_keypress事件编程只允许输入0~9、“,”、“.”和“-”;②通过Command1_Click事件编程将连续两个逗号分隔符替换成一个逗号,并用a=Split(Text1,”,”)将Text1文本框中的字符串以逗号为分界符分离出各项数据,依次存入数组a中,并在图形框中显示;③通过Command2_click事件编程,用Text2=join(a,”“)将数组a的各元素以空格为分隔符合并成字符串,并在Text2中显示。设计:两个命令按钮,一个用于通知用户输入数字串;另一个用于合353.数组排序(1)选择法排序例5.8对已存放在数组iA中的n个数,用选择法按递增顺序排序。
3.数组排序36选择排序算法
n个数排序要经过n-1轮比较和交换(1)第一轮从n个数中选出最小的数(递增),与第1个数交换位置;(2)第二轮从除第1个数外的其余n-1个数再按(1)的方法选出次小的数,与第2个数交换位置。(3)以后各i轮均从余下的数中找到最小数,并与第i个数交换,直到i=n-1为止。最后构成递增序列。Fori=1Ton-1 iMax=i Forj=i+1TonIfiA(iMax)>iA(j)TheniMax=jendifNextjt=iA(i) iA(i)=iA(iMax)iA(iMax)=tNextI选择排序选择排序算法选择排序37
(2)冒泡法排序例5.9对例5.8用冒泡法按递增顺序排序。冒泡排序算法:n个数排序也要经过n-1轮比较和交换①第一轮从第一个数开始,与第二个数比较,若第一个数大于第二个数,则将二者交换位置;否则,不交换。其后,再将第二个数与第三个数比较,顺序不对的,也同样进行交换,直到倒数第二个数。结果:最大的数沉底,最小数上浮一个位置;②第二轮仍从第一个数开始,依次进行相邻两个数的比较,必要时进行交换,直到倒数第三个数,结果:次大数将落在倒数第二个位置上,最小数继续上浮一个位置;③以后各i轮均从第1个数开始,直到倒数第n-i+1个数,进行相邻两数的比较,直到i=n-1为止,此时最小数将上浮到第一个位置上,从而最后构成递增序列。冒泡排序(2)冒泡法排序冒泡排序38
OptionBase1Dimi%,j%,imax%,t%Fori=1Ton-1Forj=1Ton+1-iIfiA(j)>iA(j+1)Thent=iA(j)iA(j)=iA(j+1)iA(j+1)=tEndIfNextjNextiFori=1TonPicture2.PrintiA(i)Nexti原始数据:869327第一轮683279第二轮632789第三轮326789第四轮236789第五轮236789OptionBase1原始数据:8693394.数组元素的插入和删除进行数组元素的插入或删除时,首先要定位,然后进行数组元素的顺序移动。(1)插入例5.10将一个数k插入到有序数组a(n)中,使插入后的数组仍然有序。插入算法:①先确定k在数组中的位置j②将a(n)~a(j)顺序向后移动一个位置③将k置入a(j)中4.数组元素的插入和删除①先确定k在数组中的位置j40
Dimi%,j%ReDimPreserveiA(10)'保留ia()中的原数据Forj=1To9Ifk<iA(j)ThenExitFor'插入位置定位NextjFori=9TojStep-1iA(i+1)=iA(i)'数据移动NextiiA(j)=kFori=1To10Picture2.PrintiA(i);NextiDimi%,j%41
(2)删除例5.11从例5.10运算结果的10个元素中删除元素13。删除算法:①先确定要删除的元素k在数组中的位置j②将a(j+1)~a(n)顺序向前移动一个位置③用ReDim将数组的体积减少1(2)删除删除算法:42*(3)矩阵运算矩阵相乘:Am,n×Bn,l=Cm,l
nCi,j=ΣAi,k×Bk,j
k=1矩阵转置1234159135678261014910111237111513141516481216矩阵相乘矩阵转置*(3)矩阵运算矩阵相乘矩阵转置43例5.14模拟计算器进行正整数的输入和四则运算,并可进行八、十六进制数的转换。设置3个控件数组:运算符控件数组、数制转换控件数组和数字控件数组。CE控件是清屏按钮。文本框用于显示输入的数据和运算结果。假设,运算符和数制转换控件数组在设计时建立。数字控件数组在设计时仅建立“0”元素,运行时添加“1”~“9”共9个控件数组元素。例5.14模拟计算器进行正整数的输入和四则运算,并可进行八44本章重点静态数组和动态数组的定义、赋值和输入/输出(静态数组和动态数组的区别,确定类型数组和变体型数组的区别)动态数组的重定义及其限制控件数组的使用(设计阶段建立和程序运行阶段建立两种方法)及index属性的作用数组的简单应用:统计、排序、插入和删除记录类型的定义方法和初步使用本章重点静态数组和动态数组的定义、赋值和输入/输出(静态数组45第5章数组和记录
5.1数组的概念
5.2数组的定义
5.3数组的基本操作
5.4数组的应用
5.5控件数组
5.6记录
5.7常用算法(二)第5章数组和记录5.1数组的概念465.1数组的概念
1.数组的作用数组通常和循环一起使用可以大大减少编程的复杂性,有些算法不用数组就无法实现。例5.1计算100个学生某门课的平均分,并统计高于平均分的人数。不用数组就很难编程。Dimmark(1To100)AsInteger,aver!,over%,i%aver=0:over=oFori=1To100mark(i)=InputBox("输入成绩")aver=aver+mark(i)‘计算总分Nextiaver=aver/100‘over=0Fori=1To100If(mark(i)>aver)Thenover=over+1NextIPrintaver,over5.1数组的概念1.数组的作用472.数组的概念数组是一批数据或控件的集合。
普通数组存放一批相同类型的数据控件数组存放一批相同名称的控件例如,定义一个integer型数组a(10),它包含11个同类型的变量:a(0),a(1),……,a(10)Variant型数组则可以存放不同类型的数据又如,在窗体上画一个标签label1,并用复制和粘贴的方法操作5次,可以得到一个名称为label1的控件数组,含6个标签,每个标签的名称均为label1,但各个控件的index属性值分别是0,1,……,5。2.数组的概念48
3.数组元素和数组的维数数组的成员称为数组元素,其名称与数组名相同,其下标表示该元素在数组中的位置。因此,数组元素也称下标变量。数组的维数表示数组元素需要几个下标才能正确表示其在数组中的位置,它代表数组的逻辑结构,最多60维。一维数组的逻辑结构是线性的,只用一个下标表示各个元素在数组中的位置例a(10):含11个元素的一维数组
a(0),a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8),a(9),a(10)二维数组的逻辑结构是一个二维表,用两个下标表示各个元素在数组中的位置:第一个下标表示行,第二个下标表示列。例b(2,3):含三行四列共12个元素的二维数组
b(0,0)b(0,1)b(0,2)b(0,3)b(1,0)b(1,1)b(1,2)b(1,3)b(2,0)b(2,1)b(2,2)b(2,3)3.数组元素和数组的维数49
4.数组的存储结构数组在内存中占用一片连续的存储单元。
一维数组的存储结构与逻辑结构相同,即各个元素按下标顺序依次存放;
二维数组的存储结构是按行的顺序存储各个元素。例如,数组b(2,3)的存储形式为:b(0,0)b(0,1)b(0,2)b(0,3)b(1,0)b(1,1)b(1,2)b(1,3)b(2,0)b(2,1)b(2,2)b(2,3)
三维数组是由若干个二维数组组成的,其存储结构是按顺序存储各个二维数组。例如,数组c(1,2,1)的存储形式为:c(0,0,0)c(0,1,0)c(0,2,0)c(1,0,0)c(1,1,0)c(1,2,0)c(0,0,1)c(0,1,1)c(0,2,1)c(1,0,1)c(1,1,1)c(1,2,1)4.数组的存储结构505.2数组的定义静态数组(定界数组)动态数组(可变数组、可调数组)
静态数组:在定义时明确规定数组的大小,且在程序运行过程中,其大小不能再改变
动态数组:在定义时不指定数组的大小,在运行过程中可以根据需要用ReDim重新规定其大小数组5.2数组的定义数组51
1.静态数组的定义
形式:Dim数组名(维界1[,维界2…])[As类型]维界1、维界2等表示各维的大小,形式为:
[下界To]上界
下界和上界为常数表达式:
-2147483648到2147483647下界缺省时默认0维界用来确定数组的体积。类型缺省时,默认变体型
除了用Dim外,还可以用static、private和public来定义数组,它们可以在不同的窗体和模块内定义,所定义的数组的作用范围也不相同。1.静态数组的定义52下界可以缺省,系统默认的下界缺省值为0。例:DimlArray(0To3,0To4)AsLong等价于:DimlArray(3,4)AsLong
例:Dimmark(1to100)AsInteger下界可以缺省,系统默认的下界缺省值为0。例:Dimmark53如果需要默认的下界缺省值不是0,则可以在通用声明段内用OptionBase语句确定,例如用
OptionBase1来定义下界缺省值为1,此后,若定义Dima(2,3)则等价于Dima(1to2,1to3)注意:(1)在数组定义中,数组名后面括号中数值表示数组的维界,即每一维的大小;而在程序其他地方出现的带扩号的则表示数组中的某一个元素,括号中的数值表示该元素在数组中的位置。两者写法形式相同,但意义不同。Dimx(10)AsInteger‘定义x数组有11个元素x(10)=100‘对x(10)这个数组元素赋值(2)静态数组一经定义,编译系统为其安排存储空间,其维数和各维大小不能再改变如果需要默认的下界缺省值不是0,则可以在通用声明段内用Opt54
2.动态数组的定义定义动态数组时,数组名后面的括号内不含维界。这时,编译系统并不为该数组安排存储空间。而在程序运行时,用ReDim语句指明该数组的大小,并安排存储空间DimsArray()AsSingleSubForm_Load() …ReDimsArray(4,8)‘sArray原有值丢失 …ReDimPreservesArray(4,100)‘sArray原有值保留…EndSub2.动态数组的定义55
(1)重新定义动态数组的大小时,既可以改变其大小,也可以改变其维数,下标可以用常数,也可以用有确定值的变量。例如:Dima()AsInteger‘a为动态数组PrivateSubCommand1_click()ReDima(4,5)‘重新定义动态数组……n=InputBox(“请输入n的值”)ReDima(n)‘重新定义动态数组……EndSub(1)重新定义动态数组的大小时,既可以改变其大小,也可56
(2)定义Variant型动态数组时,可以省略数组名后面的圆括号Dima‘a为variant型变量或数组a=5‘a为简单变量PrintaRedima(5)‘a为数组ForI=0to5a(I)=IPrinta(I);NextI(2)定义Variant型动态数组时,可以省略数组名后面57
(3)每次使用ReDim语句都会使数组中原有的数据丢失,当希望改变数组大小而又要保留数组中原有的数据时,可以在数组名前面增加Preserve关键字,这时,只能改变多维数组中最后一维的上界,而不允许改变其它维的大小及最后一维的下界。Dima()AsInteger……ReDima(10,10)……ReDimPreservea(10,Ubound(a)+2)‘正确……ReDimPreservea(Ubound(a)+2,10)‘错误(3)每次使用ReDim语句都会使数组中原有的数据丢失,当585.3数组的基本操作1.数组元素的赋值(1)静态数组只能对数组元素逐一赋值,不能用数组名整体赋值Dima(4)AsIntegerFori=0To4 a(i)=10‘a数组的每个元素值为10NextI是允许的。
a=(1,2,3,4,5)是不允许的。
5.3数组的基本操作1.数组元素的赋值59
(2)变体型动态数组可以用Array函数定界和整体赋值DimaAsVariant,b()Asvariant,i%a=Array(1,2,3,4,5)b=Array(“abc”,”derf”,67,True)Fori=Lbound(a)ToUbound(a)Picture1.Printa(i)NextiFori=Lbound(b)ToUbound(b)Picture1.Printb(i)NextI其中,Lbound()和Ubound()用来确定数组的下界和上界(2)变体型动态数组可以用Array函数定界和整体赋值60
(3)动态数组也可以用同类型的静态数组整体赋值Dima(4)AsInteger,b()AsIntegera(0)=1:a(1)=3:a(2)=5:a(3)=-8:a(4)=7
b=a‘将数组a整体赋给数组b,b为动态数组其中,b=a相当于Fori=Lbound(a)ToUbound(a)b(i)=a(i)Nexti(3)动态数组也可以用同类型的静态数组整体赋值612.数组的输入
可以用InputBox函数或文本框实现数组的输入DimsB(4,5)AsInteger,i%,j%Fori=0To4Forj=0To5
sB(i,j)=InputBox("输入sB("&i&","&j&)"的值")NextjNextiFori=0To4Forj=0To5PrintFormat$(sB(i,j),"00");spc(2);NextjPrintNexti用inputbox输入数组2.数组的输入用inputbox输入数组623.数组的输出数组的输出只能对数组的各个元素进行。例:输出方阵sc中的下三角元素
Dimsc(4,4)AsInteger
Fori=0To4Forj=0Toisc(i,j)=i*5+jPrintsc(i,j);““;NextjPrintNexti如何输出上三角?3.数组的输出如何输出上三角?634.求数组中最大元素及所在下标及各元素之和
OptionBase1
DimMaxAsInteger,iMaxAsIntegerDimSumAsInteger,iA(10)…… Max=iA(1):iMax=1:Sum=iA(1)Fori=2To10IfiA(i)>MaxThen‘求最大值Max=iA(i)iMax=iEndIfSum=Sum+iA(i)‘求各元素之和NextiPicture1.PrintMax,iMax,Sum4.求数组中最大元素及所在下标及各元素之和645.将数组iA(10)中第一个元素与最后一个元素交换,第二个元素与倒数第二个元素交换,直到整个数组各元素按逆序存放。
Fori=1To10\2t=iA(i)iA(i)=iA(10-i+1)iA(10-i+1)=tNexti5.将数组iA(10)中第一个元素与最后一个元素交换,第二651.控件数组的概念一组相同的控件可以组成一个控件数组,它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index=0,1,2,...),类似数组的下标。使用控件数组的最大优点是数组中的各个控制件可以共享同样的事件过程,从而减少编程工作量。例:PrivateSubcmdName_Click(IndexAsInteger)…IfIndex=3then‘处理第四个命令按钮的操作EndIf…EndSub5.4控件数组1.控件数组的概念5.4控件数组662.控件数组的建立(1)在设计阶段建立第一步先建立第一个控件,即在窗体上画出该控件,设置其Name属性,作为控件数组名。第二步选中该控件,进行“复制”和“粘贴”,当弹出的对话框中出现“已经有一个控件为…...,创建控件数组吗”信息时,单击“是”按钮,就建立了一个控件数组,经过若干次“复制”和“粘贴”,可以建立该控件数组的各个元素。每个元素都是一个控件,它们具有相同的Name,各个控件的index属性值为该控件在数组中的位置(索引)号,从0开始。第三步编制控件数组的事件过程。2.控件数组的建立67例5.3建立含有四个命令按钮的控件数组,当单击某个命令按钮,分别显示不同的图形或结束操作。PrivateSubcommand1_Click(IndexAsInteger)Picture1.ClsPicture1.FillStyle=5'填充右斜线图案SelectCaseIndexCase0Picture1.Print"画直线"Picture1.Line(2,2)-(7,7)Case1Picture1.Print"画矩形"Picture1.Line(2,2)-(7,7),,BFCase2Picture1.Print"画圆"Picture1.Circle(4.5,4.5),3.5,,,,1CaseElseEndEndSelectEndSub例5.3建立含有四个命令按钮的控件数组,当单击某个命令按钮68(2)在程序运行阶段建立第一步在窗体上画出某控件(如Label1),并设置该控件的Index属性值为0,表示该控件为数组,从而建立控件数组的第一个元素第二步在编程时通过Load方法添加其余的若干个元素,也可以通过Unload方法删除某个添加的元素。如:Loadlabel1(i)i>=1第三步在程序中为每个新添加的控件数组元素设置Left和Top属性以确定其在窗体的位置,并将其Visible属性设置为True(或-1)。程序运行时会自动按程序中的设置,将各个控件显示在窗体上。(2)在程序运行阶段建立69例5.4通过程序建立的方法在窗体上用64个标签框组成一个国际象棋的棋盘。①先在窗体上画label1控件,设置其Index属性值为0,表示该控件为数组,从而建立控件数组的第一个元素②在Form_load()事件中用两重循环由Load方法自动生成8行8列label1(k),k=8(i-1)+j,并确定每个控件的Left和Top③在label1_click()事件中获得被单击的label1控件的index值,并改变所有控件的颜色用程序建立的方法例5.4通过程序建立的方法在窗体上用64个标签框组成一个国70*VB程序设置颜色的四种方法①用RGB(x,y,z)函数—x、y、z在0~255之间取值黑色RGB(0,0,0)兰色RGB(0,0,255)绿色RGB(0,255,0)青色RGB(0,255,255)红色RGB(255,0,0)洋红色RGB(255,0,255)黄色RGB(255,255,0)白色RGB(255,255,255)②用QuickBASIC提供的颜色函数QBColor(i)0黑色1兰色2绿色3青色4红色5洋红色6黄色7白色8灰色9亮兰色10亮绿色11亮青色12亮红色13亮洋红色14亮黄色15亮白③使用“对象浏览器”中列出的内部常数vbBlack黑vbBlue蓝vbCyan青vbGreen绿vbMagenta洋红vbRed红vbWhite白vbYellow黄④直接用十六进制长整数表示(数值越小颜色越深)&H0&黑……&HFFFFFF&白*VB程序设置颜色的四种方法715.5自定义数据类型(记录)记录的概念记录是由一组相关的数据项(字段)组成的整体。例如,一个学生的记录包括学号、姓名、性别、各门课的分数等,均称为数据项或字段,它们可以是不同的数据类型。
在VB中,每个控件是一个对象,一个对象的所有属性组成一个记录,属性名则是记录的一个数据项(字段)。当用户自己创建类或对象时,就要定义属性记录。5.5自定义数据类型(记录)记录的概念722.记录的定义
定义记录时,要先定义记录类型,然后再定义该记录类型的变量或数组。记录类型的定义
Type自定义类型名元素名[(下标)]As类型名…………元素名[(下标)]As类型名EndType例:TypeStudType NoAsInteger'学号 NameAsString*20'姓名 SexAsString*1 '性别 Mark(1To4)AsSingle'4门课程成绩 TotalAsSingle '总分EndType2.记录的定义定义记录时,要先定义记录类型,然后再定义73
定义记录的语句如果放在标准模块中,可省略public。如果放在窗体中,则必须用private。如在窗体的通用声明处PrivateTypeStuType……EndType在模块的通用声明处[Public]TypeStuType……EndType(2)记录变量或数组的定义可以用已定义的记录类型定义变量或数组。DimaAsStuType,b(20)AsStuType3.记录的引用(1)引用记录的一般形式是
<记录变量名>.<字段名>a.IntNo=123a.StrName=“李明”
定义记录的语句如果放在标准模块中,可省略public。74(2)用With语句引用形式:With<对象名>语句块EndWith其中,对象名可以是记录变量、控件名或其他的对象名作用:对一个对象执行多条语句时,可省略对象名。例如:要给记录变量a赋值,可以用with语句设置。Witha.IntNo=123.StrName=“李明”.strSex=“M”.sngMark(1)=87.sngMark(2)=91.sngMark(3)=79.sngMark(4)=95.blnTag=TrueEndWith(2)用With语句引用75例5.5利用记录类型编程模拟数据库记录的输入、显示和查询。标签:Label1~Label5文本框:Text1~Text3命令按钮:Command1(3)在窗体通用声明段定义记录类型:PrivateTypeStudType用Command1_Click(IndexAsInteger)事件编程新增:添加记录前一个:显示前一条记录后一个:显示下一条记录最高分:显示最高分位置:显示总记录数和当前记录号例5.5利用记录类型编程模拟数据库记录的输入、显示和查询。765.6常用算法(二)
1.分类统计例5.6输入一串字符,统计各字符出现的次数,不区分字母的大小写。5.6常用算法(二)1.分类统计77设计:用一个文本框输入字符串,图形框输出个字符的个数,命令按钮进行统计。算法:为了计算各字母的个数,定义一个含26个元素的一维整型数组a,a(1)存放字母a或A的个数,a(2)存放字母b或B的个数,……。为了对各个字母计数,用Mid$()函数依次取出字符串中的各个字母并进行判断和计数。为了不区分大小写,可用Ucase$()函数将所取出的字母一律转换成大写,也可用Lcase$()将所取出的字母一律转换成小写设计:用一个文本框输入字符串,图形框输出个字符的个数,命令按782.大量数据的输入和编辑例5.7利用文本框可实现大量数字串输入和编辑的功能。用Text1输入一批数字串,Picture1显示数字串中的各个数字,Text2输出数组各元素用a=split(text1,”,”)将text1中的文字按逗号分割成各个数组元素,并显示在图形框picture1中用text2=join(a,”“)将数组a合并成用空格分隔的字符串2.大量数据的输入和编辑用a=split(text1,”,”79设计:两个命令按钮,一个用于通知用户输入数字串;另一个用于合并数组元素。两个文本框,一个用于输入和编辑数据,另一个用于输出结果;图形框用于输出数组a各元素的值。算法:①通过Text1_keypress事件编程只允许输入0~9、“,”、“.”和“-”;②通过Command1_Click事件编程将连续两个逗号分隔符替换成一个逗号,并用a=Split(Text1,”,”)将Text1文本框中的字符串以逗号为分界符分离出各项数据,依次存入数组a中,并在图形框中显示;③通过Command2_click事件编程,用Text2=join(a,”“)将数组a的各元素以空格为分隔符合并成字符串,并在Text2中显示。设计:两个命令按钮,一个用于通知用户输入数字串;另一个用于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卓越表现国际物流师试题及答案
- 2025年有机废水沼气系统项目投资风险评估报告
- 2025年铝锻压材合作协议书
- 2024年CPMM综合技能试题及答案
- 采购合同管理在供应链中的重要性试题及答案
- 2024年物流与供应链整合试题及答案
- 深度解析2024年图书管理员考试试题及答案
- 统编版语文五年级下册第10课《青山处处埋忠骨》精美课件
- 2024年CPMM知识更新必看试题及答案
- 2024年湖北省网格员转聘社区工作者理论备考试题库(含答案)
- 装修代卖合同范本
- GB/T 4706.9-2024家用和类似用途电器的安全第9部分:剃须刀、电理发剪及类似器具的特殊要求
- 历届淮安中考满分作文范文
- 2025年山东省春季高考数学模拟试卷试题(含答案详解)
- JT-T-1344-2020纯电动汽车维护、检测、诊断技术规范
- 小学三年级数独比赛“六宫”练习题(88道)
- 长沙市天心区2023-2024学年六年级下学期小升初招生数学试卷含解析
- 四川省既有建筑增设电梯工程技术标准
- 基础设施维护保养方案
- 医务人员技术档案
- 教师教学能力大赛-参赛教案-获奖作品(可做模板)
评论
0/150
提交评论