版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章数组和用户自定义类型6.1数组的概念6.2定长数组和动态数组的定义6.3
数组的基本操作6.4控件数组6.5滚动条控件(ScrollBar)6.6用户自定义类型和用户自定义类型数组6.7实例分析6.1数组的概念两种数据类型:基本数据类型和构造数据类型。到目前为止,我们使用的数据都属于基本数据类型,如数值型、逻辑型、字符型等。该类数据具有一个共同的特点:在程序运行的任一时刻,每个变量名代表一个确定的数据,用户可以通过变量名访问该变量的值。本章我们学习构造数据类型数据——数组和用户自定义类型的数据。数组是一组相同类型的数据的有序集合;而用户自定义类型数据由若干基本数据类型可不同的元素组成。■数组、数组元素数组是用统一的名字,不同下标、顺序排列的一组变量。数组中的成员(每个变量)称为数组元素。数组元素通过不同的下标来加以区分。因此数组元素又称为下标变量。可以用数组名和下标来唯一地识别一个数组中的某个具体元素。例如a(5)表示名称为a的数组中的序号为5的那个元素。6.1数组的概念■数组、数组元素需要说明的是:(1)数组的命名和简单变量的命名规则相同。(2)数组元素的下标必须用括号括起来。不能把a(5)写成a5,a5会被认为是一个简单变量。(3)数组元素的下标必须是常量,常量可以是直接常量、符号常量或常量表达式,一般是整型常量。(4)数组元素的下标必须是整数,如果是小数,系统会自动按四舍五入取整。如a(4.6)将被视为a(5)。
6.1数组的概念■数组的上界和下界数组下标的最小值称为数组的下界;数组下标的最大值称为数组的上界。6.1数组的概念■数组的类型
VisualBasic中的数据有多种类型,数组也有相应的类型。除了可以声明任何基本类型的数组,还可以声明用户自定义类型和对象数组(如控件数组)。除了数据类型为Variant的数组元素可以是不同类型的数据,一般一个数组的所有元素应是具有相同的数据类型。6.1数组的概念■数组的维数在一个数组中,如果用一个下标就能确定一个元素在数组中的具体位置,则该数组就是一维数组;具有两个或多个下标的数组就是二维或多维数组。数组下标的个数就是数组的维数。6.1数组的概念■数组的形式在VisualBasic中有两种形式的数组:定长数组和动态数组。定长数组一旦定义后,其中的数组元素个数在程序运行过程中不再会发生变化;而动态数组中的元素个数是可变的。6.1数组的概念■定长数组的定义
在定义数组时,已确定数组元素个数的数组都是定长数组。定长数组的定义格式如下:Public|Static|Dim<数组名>[(<维数定义>)][As<数组类型>],…,6.2定长数组和动态数组的定义下面以Dim语句为例加以说明。Dima(6)AsInteger,b(3,2)AsInteger■数组的大小(1)下标下界默认方式在定义数组时,下标下界省略,则默认下标下界为0。例如:Dima(6)AsInteger,b(3,2)AsInteger定义一维数组a有7个元素,下标从0到6。定义二维数组b有12个元素,第一维下标从0到3,第二维下标从0到2。如果不希望数组下标从0开始,可用OptionBase1语句使默认下标下界为1。OptionBase语句的参数只能是0或1。它必须放在数组定义语句之前,且一个模块只能出现一次该语句。6.2定长数组和动态数组的定义■数组的大小(2)下标下界确定方式“维数定义”格式:下界1To上界1,下界2To上界2,…,下界nTo上界n此时OptionBase语句不起作用。例如:Dima(-2To3),b(1To3,-2To2)6.2定长数组和动态数组的定义■数组的类型数组的数据类型是指数组存放什么类型的数据。通常数组的数据类型定义采用以下两种方式。(1)As<数据类型>方式数据类型可以是:Integer,Long,Single,Double,String,String*n,Currency,Boolean,Variant,还可以是用户自定义类型和对象(如控件)类型。说明:As<数据类型>缺省,默认为Variant类型。(2)数组名后加类型符方式类型符可以是:%,&,!,#,$,@等。例如:Dima%(5),b$(6)。6.2定长数组和动态数组的定义■动态数组的定义建立动态数组一般包括声明和大小确定两步:(1)用Public、Static或Dim语句声明括号内为空的数组。格式:Dim数组名()[As<数据类型>](2)在过程中用Redim语句指明该数组的大小。格式:Redim[Preserve]数组名(〈维数定义〉[数据类型])6.2定长数组和动态数组的定义■动态数组的定义例【7-1】动态数组举例。Dima()AsIntegerPrivateSubForm_Click()DimnAsIntegern=5ReDima(n)a(1)=5:a(5)=4Printa(1);a(5);ReDima(2,2)a(2,1)=3Printa(2,1);ReDimPreservea(2,3)Printa(2,1)EndSub6.2定长数组和动态数组的定义■数组的引用
数组一经定义后,即可引用。引用数组元素的方法是在数组名后的圆括号内指定其下标。例如:Dimarr(5)AsInteger‘定义数组
…arr(4)=9‘给数组元素arr(4)赋值6.3数组的基本操作■数组的输入、输出
数组的输入、输出操作是通过对数组中的元素逐个地输入、输出操作实现的。对一维数组的操作通常采用一重循环实现;对二维数组的操作通常采用二重循环,是用外循环控制行标(或列标),内循环控制列标(或行标)。6.3数组的基本操作■数组的输入、输出
6.3数组的基本操作例【7-2】编一窗体单击事件过程。向一维数组输入10个随机数(10~99之间的整数),并在窗体上输出这个数组中的10个数。PrivateSubForm_Click()Dima(1To10)AsIntegerFori=1To10a(i)=Int(Rnd()*90+10)NextFori=1To10Printa(i);NextEndSub■数组的初始化
6.3数组的基本操作数组的初始化就是给数组元素赋初值。在VisualBasic中,可以用Array函数实现数组的初始化,但Array函数只能用于一维数组。格式:<数组名>=Array(<数组元素值列表>)需要说明的是:用Array函数给数组元素赋初值,数组必须是Variant。另外,数组的下标下界默认为0,也可以通过OptionBase语句决定;上界由Array函数括号内参数个数决定,也可以通过UBound函数获得。例如:a=Array(1,2,3,4,5)
■ForEach…Next语句6.3数组的基本操作格式:ForEach<成员>In数组<语句序列>Next需要说明的是:(1)成员:是一个Variant变量,是为循环提供的用于依次代表数组中每一个元素。(2)数组:是一个已定义的数组名,没有括号和下标。(3)功能:根据数组元素的个数,将数组中的每一个元素依次赋给成员,重复执行循环体内的语句序列。
6.3数组的基本操作例【7-3】ForEach…Next语句应用举例。求数组所有元素的和。PrivateSubForm_Click()DimsAsIntegera=Array(9,8,7,6,5)s=0ForEachxInas=s+xNextPrintsEndSub■ForEach…Next语句6.3数组的基本操作单个的数组元素可以像简单变量那样从一个数组复制到另一个数组,而要复制整个数组则仍要使用For循环语句。■数组的复制6.3数组的基本操作UBound函数和LBound函数分别返回数组的上界和下界格式:UBound(arrayname[,n])LBound(arrayname[,n])其中:arrayname是数组名;n表示数组的第几维,若省略,就认为是1。例如:DimA(1To9,3To8,4To12)DimB(10)U1=UBound(A,1)‘返回9U2=UBound(A,3)‘返回12U3=UBound(B)‘返回10L1=LBound(A,1)‘返回1L2=LBound(A,3)‘返回4■获得数组的上、下界6.3数组的基本操作数组一经定义便在内存中占据连续的存储空间。如果数组不再使用,就需要将该数组删除,以便释放数组所占的存储空间。如果数组挪做它用,就需要将该数组的数据清除。这可以用Erase语句来实现。Erase语句格式如下:Erase〈数组名〉[,〈数组名2〉,…]■数组的清除和释放说明:(1)Erase语句用于定长数组时,数组仍然存在,只是数组中的内容被清空。对于数值数组,则把数组中的所有元素置为0;对于字符串数组则把数组中的所有元素置为空串;对于变体数组,则把数组中的所有元素置为Empty。(2)Erase语句用于动态数组时将删除该数组的结构,并释放出所占用的存储空间。如果下次再引用该数组,则必须用Redim语句重新定义数组的大小和维数。
6.3数组的基本操作例【7-4】定长数组的清除。观察运行后的结果,如图7-1所示。OptionBase1PrivateSubForm_Click()DimkAsInteger,a(5)AsInteger■数组的清除和释放Fork=1To5a(k)=kNextPrintPrint"打印原数组:"Fork=1To5Printa(k);NextEraseaPrintPrint"打印清除后数组:"Fork=1To5Printa(k);NextEndSub6.3数组的基本操作冒泡法排序是一种简单的排序法。在每一轮排序中将相邻的数比较,当次序不对就交换,出了内循环最大(或最小)数就已冒出。假设有N个数在a数组(下标从1开始)中,冒泡法升序排序的思路是:(1)将a(1)与a(2)相比较,若a(1)>a(2),则交换a(1)与a(2),然后比较a(2)与a(3),依次类推,直到a(N-1)与a(N)比较完。这个过程称为一次冒泡,其结果是最大数在数组的a(N)中。(2)然后对数组a的前N-1个数进行第2轮同样的操作,其结果是次大数在a(N-1)中。(3)依次类推,N个数排序需排N-1轮。■例【7-5】数组应用举例
6.3数组的基本操作■例【6-5】数组应用举例
6.3数组的基本操作假设数组a中存在6个数,分别为9,8,12,4,7,10。要求用冒泡法排序输出。■例【6-5】数组应用举例
ConstN=6OptionBase1PrivateSubForm_Click()DimiAsInteger,jAsInteger,tempAsIntegera=Array(9,8,12,4,7,10)'输出原数组中的数Print"原数组中的数:“Fori=1To6Printa(i);Next'数组中的数用冒泡法升序排序Fori=1ToN-1Forj=1ToN–i
Ifa(j)>a(j+1)Then
temp=a(j)a(j)=a(j+1)
a(j+1)=tempEndIfNextjNextiPrintPrint"排序后数组中的数:"Fori=1To6Printa(i);NextEndSub6.4控件数组如果在应用程序中用到一些类型相同且功能类似的控件,就可以将这些相同的控件定义为一个数组来使用,这种数组就是控件数组。控件数组的使用方法与数组变量相似,也具备以下特点:(1)相同的名称(Name)(2)以下标索引值(Index)来识别各个控件■控件数组的概念6.4控件数组控件数组是通过设置对象的Index属性来创建的■创建和使用控件数组
1.在设计时建立控件数组可以通过以下步骤建立一个控件数组:(1)在窗体上添加一个控件,然后进行该控件的属性设置;(2)选中该控件,进行“复制”和“粘贴”操作,系统就会弹出一个提示对话框,要求确认是否要创建控件数组。单击“是”按钮,就建立了一个控件数组。此时,系统自动将第一个控件元素的Index属性设置为0,而将复制的第二个控件元素的Index属性设置为1,如此继续下去,经过若干次的“粘贴”操作,就建立了所需的控件数组了。6.4控件数组例【6-6】设计一个简单的能进行和、差、积三种算术运算程序。■创建和使用控件数组
6.4控件数组例【6-6】设计一个简单的能进行和、差、积三种算术运算程序。■创建和使用控件数组
创建步骤:(1)在窗体上添加3个文本框(名称为Text1、Text2和Text3,设置它们的Text属性为空)、2个标签(名称为Label1和Label2),一个包含3个命令按钮的控件数组(名称为Command1,Index属性分别为0、1、2)6.4控件数组例【6-6】设计一个简单的能进行和、差、积三种算术运算程序。■创建和使用控件数组
(2)添加代码如下PrivateSubCommand1_Click(IndexAsInteger)Label2.Caption="="SelectCaseIndexCase0Label1.Caption="+"Text3.Text=Val(Text1.Text)+Val(Text2.Text)Case1Label1.Caption="-"Text3.Text=Val(Text1.Text)-Val(Text2.Text)Case2Label1.Caption="*"Text3.Text=Val(Text1.Text)*Val(Text2.Text)EndSelectEndSub6.4控件数组2.在运行时添加或删除控件数组在程序设计阶段建立控件数组元素后,有时还需要在程序运行时添加(载入)或删除(卸载)数组元素。可以用Load语句实现添加操作,用Unload语句实现删除操作。其格式分别如下:Load控件名(下标)Unload控件名(下标)需要说明的是,使用Load语句实现添加数组元素,在默认情况下是不可见的。因此在添加后需要在程序中将其Visible属性设置为True。■创建和使用控件数组
6.4控件数组2.在运行时添加或删除控件数组例【7-7】设计一个与例【7-6】一样功能(计算和、差、积)的程序。但程序的设计界面如图。在程序运行后添加后2个命令按钮控件数组元素。
■创建和使用控件数组
6.4控件数组创建步骤:1)在窗体上添加3个文本框,2个标签,一个含一个命令按钮控件数组,并按图设计它们的属性。■创建和使用控件数组
2)添加如下代码:PrivateSubForm_Load()DimcmdarrwidthAsSingle,cmdarrtopAsSingleDimiAsIntegercmdarrwidth=Command1(0).Widthcmdarrtop=Command1(0).TopFori=1To2LoadCommand1(i)Command1(i).Left=Command1(i-1).Left+cmdarrwidth+100Command1(i).Top=cmdarrtopCommand1(i).Caption=IIf(i=1,"计算差","计算积")Command1(i).Visible=TrueNextEndSub6.4控件数组PrivateSubCommand1_Click(IndexAsInteger)Label2.Caption="="SelectCaseIndexCase0Label1.Caption="+"Text3.Text=Val(Text1.Text)+Val(Text2.Text)Case1Label1.Caption="-"Text3.Text=Val(Text1.Text)-Val(Text2.Text)Case2Label1.Caption="*"Text3.Text=Val(Text1.Text)*Val(Text2.Text)EndSelectEndSub
■创建和使用控件数组
6.5滚动条控件(ScrollBar)
1.Value属性返回或设置滚动条的当前位置,其返回值始终介于Max和Min属性值之间的整数。2.Max、Min属性返回或设置滚动条所能代表的最小、最大值,其取值范围为-32768~32767。Min属性的默认值为0,Max属性的默认值为32767。3.LargeChange、SmallChange属性LargeChange属性返回和设置当用户单击滚动条和滚动箭头之间的区域时,滚动控件Value属性值的改变量。SmallChange属性返回和设置当用户单击滚动箭头时,滚动控件Value属性值的改变量。LargeChange和SmallChange属性的取值范围是1~32767之间的整数,包括1和32767,默认设置值都为1。
■常用的属性和事件
6.5滚动条控件(ScrollBar)
4.Change事件和Scroll事件在程序运行过程中,每当滚动条的Value属性发生变化时,就发生Change事件。而每当用户用鼠标单击滚动箭头,单击滚动框与滚动箭头之间的区域或沿着滚动条拖动滚动框的动作结束时,滚动条的Value属性值就发生变化。尽管拖动滚动框会引起Value属性值发生变化,但在滚动条内拖动滚动框的过程中,并不发生Change事件。此时将触发滚动条的Scroll事件,当然滚动框的位置改变后,又将触发Change事件。在实际编程中,常用Scroll事件过程来跟踪滚动条在拖动时数值的动态变化;常利用Change事件来获得滚动条变化后Value属性的最终值。■常用的属性和事件
6.5滚动条控件(ScrollBar)
当项目列表很长或者信息量很大时,可以使用滚动条来模拟当前处理所在的位置。例【7-8】随机产生10000个两位整数每次产生一个放在数组中,然后判断这个数是否是3的倍数,若是,则将数组中的这个数显示到列表框中,并且前面给出它是第几个能被3整除的数,直到10000个数值全部处理完毕。用水平滚动条模拟进行的进度。
■滚动条控件的简单应用
6.5滚动条控件(ScrollBar)
■滚动条控件的简单应用
6.5滚动条控件(ScrollBar)
■滚动条控件的简单应用
创建过程:(1)在窗体上添加一个列表框控件(List1),一个命令按钮(Command1)和一个水平滚动条(HScroll1),设置水平滚动条(HScroll1)的属性Max为10000,Min为0。(2)添加如下代码:PrivateSubForm_Load()RandomizeEndSubPrivateSubCommand1_Click()Dima(1To10000)AsInteger,iAsInteger,jasInteger,kAsIntegerFori=1To10000a(i)=Int(Rnd()*90+10)‘利用循环增加一个延迟Forj=1To100000NextIfa(i)Mod3=0Thenk=k+1List1.AddItem(k&""&a(i))List1.Refresh‘强制重画List1EndIfHScroll1.Value=iNextEndSub6.6用户自定义类型和用户自定义类型数组
■用户自定义类型用Type语句来创建用户自定义类型。其语法格式是:[Private|Public]Type<自定义类型名><元素名1>As<类型名>[<元素名2>As<类型名>]……[<元素名n>As<类型名>]EndType说明:Type语句只能在模块级使用,不能在过程内使用。缺省设置是公用的;在对象模块中,只能使用Private限定词;在标准模块中,Private和Public皆可。
例如,以下Type语句定义了一个有关学生信息的自定义类型,名字是Student。PrivateTypeStudent学号AsString*10姓名AsString*8数学AsInteger英语AsInteger计算机AsIntegerEndType6.6用户自定义类型和用户自定义类型数组
■用户自定义类型自定义类型一旦定义后,就可以在变量的声明时使用该类型,语法格式是:Dim变量名As自定义类型名使用语法格式:变量名.元素名6.6用户自定义类型和用户自定义类型数组
■用户自定义类型例【7-9】编写程序显示学生的基本信息。创建一个工程,首先在窗体的通用段中创建自定义类型Student。然后编写如下代码.DimstudAsStudentPrivatesubForm_Load()Stud.学号=10001Stud.姓名=”张三”Stud.数学=67Stud.英语=80Stud.计算机=90EndSubPrivatesubForm_Click()Print“学号”,”姓名”,”数学”,”英语”,”计算机”PrintStud.学号,Stud.姓名,Stud.数学,Stud.英语,Stud.计算机EndSub6.6用户自定义类型和用户自定义类型数组
■用户自定义类型数组用户自定义类型数组是指数组的每个元素都是用户自定义类型。自定义类型数组能够描述更为复杂的数据。例如要描述100个学生的信息。如前面声明一个用户自定义学生类型,再定义一个存放100个学生记录的数组stud:Dimstud(1to100)AsStudentStud就描述了100
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六年级科学上册第二单元形状与结构7桥的形状和结构教案教科版
- 2024-2025学年新教材高中语文第一单元以意逆志知人论世第2课自主赏析湘夫人学案新人教版选修中国古代诗歌散文欣赏
- 2024年床上用织物制品项目合作计划书
- 2024-2025学年新教材高中英语Unit1CulturalHeritageReadingforWriting同步基础练习新人教版必修第二册
- 2024-2025学年新教材高中英语课时分层作业二Unit1Laughoutloud含解析外研版选择性必修第一册
- 玉溪师范学院《健康教育学》2021-2022学年第一学期期末试卷
- 玉溪师范学院《城市绿地系统规划》2023-2024学年第一学期期末试卷
- 2024小型维修合同
- 2024干货调料食品配送合同
- 2024标准建设工程设计合同模板
- 电力专业数据传输(EPDT)通信系统 总体技术规范 标准编制说明
- 普法课件:统计法培训
- 《我和鸟类做朋友》(教学设计)-2023-2024学年五年级上册综合实践活动粤教版
- 关于合同违约扣款的函件
- 苏州2024年江苏苏州市市属事业单位招聘笔试及笔试历年典型考题及考点附答案解析
- NB-T33004-2013电动汽车充换电设施工程施工和竣工验收规范
- 2024版劳动合同合同范本
- 古希腊文明智慧树知到期末考试答案章节答案2024年复旦大学
- 劳务合同不续期通知函
- 印刷品退货处理协议
- 2024年中国邮政集团有限公司校园招聘考试试题参考答案
评论
0/150
提交评论