比较.docx
- 文档编号:11726703
- 上传时间:2023-03-31
- 格式:DOCX
- 页数:20
- 大小:57.69KB
比较.docx
《比较.docx》由会员分享,可在线阅读,更多相关《比较.docx(20页珍藏版)》请在冰豆网上搜索。
比较
VB中的数组
1.引例
求100个学生的平均成绩及超过平均成绩的人数。
如果用一般变量来表示成绩,需要用100个变量,如:
mark1、mary2、……mark100。
若用数组,可以只用一个来表示mark(1
To 100)。
2.基本概念
数组:
是同类型变量的一个有序的集合。
如:
A(1To100),表示一个包含100个数组元素的名为A的数组。
数组元素:
即数组中的变量。
用下标表示数组中的各个元素。
表示方法:
数组名(P1,P2,……)
其中P1、P2表示元素在数组中的排列位置,称为“下标”。
如:
A(3,2)代表二维数组A中第3行第2列上的那个元素。
数组维数:
由数组元素中下标的个数决定,一个下标表示一维数组,二个下标表示二维数组。
VB中有一维数组、二维数组、……最多60维数组。
下标:
下标表示顺序号,每个数组有一个唯一的顺序号,下标不能超过数组声明时的上、下界范围。
下标可以是整型的常数、变量、表达式,甚至又是一个数组元素。
下标的取值范围是:
下界To上界,缺省下界时,系统默认取0。
3.数组声明
数组必须先声明后使用。
声明数组就是让系统在内存中分配一个连续的区域,用来存储数组元素。
声明内容:
数组名、类型、维数、数组大小。
一般情况下,数组中各元素类型必须相同,但若数组为Variant时,可包含不同类型的数据。
静态数组:
声明时确定了大小的数组。
动态数组:
声明时没有给定数组大小(省略了括号中的下标),使用时需要用ReDim语句重新指出其大小。
使用动态数组的优点是根据用户需要,有效地利用存储空间,它是在程序执行到ReDim语句时才分配存储单元,而静态数组是在程序编译时分配存储单元。
静态数组及声明
1. 一维数组
静态一维数组的声明形式:
Dim 数组名(下标)[As 类型]
说明:
(1)下标必须为常数,不可以为表达式或变量;
(2)下标下界最小为-32768,最大上界为32767;省略下界,其默认值为0,一维数组的大小为:
上界-下界+1
(3)如果省略类型,则为变体型
例:
(1)Dim A(10)AsInteger
声明了A是数组名、整型、一维数组、有11个元素,下标的范围是0~10。
(2)Dim B(-3To5)AsString*3
声明了B是数组名、字符串型、一维数组、有9个元素,下标的范围是-3~5,每个元素最多存放3个字符。
2.多维数组
静态多维数组的声明形式:
Dim 数组名(下标1[,下标2…])[As 类型]
说明:
(1)下标个数决定数组的维数,最多60维。
(2)每一维的大小=上界-下界+1;数组的大小=每一维大小的乘积。
例:
Dim C(-1To5,4)As Long
声明了C是数组名、长整型、二维数组、第一维下标范围为-1~5,第二维下标的范围是0~4,占据7x5个长整型变量的空间。
3.注意事项
(1)在有些语言中,下界一般从1开始,为了便于使用,在VB的窗体层或标准模块层用OptionBasen语句可重新设定数组的下界,如OptionBase1。
(2)在数组声明中的下标关系到每一维的大小,是数组说明符,而在程序其他地方出现的下标为数组元素,两者写法相同,但意义不同。
(3)在数组声明时的下标只能是常数,而在其他地方出现的数组元素的下标可以是变量。
动态数组及声明
1. 动态数组的建立与声明
建立动态数组的方法是:
利用Dim、Private、Public语句声明括号内为空的数组,然后在过程中用ReDim语句指明该数组的大小。
语法是:
ReDim 数组名(下标1[,下标2…])[As 类型]
其中下标可以是常量,也可以是有了确定值的变量,类型可以省略,若不省略,必须与Dim中的声明语句保持一致。
例:
DimD()AsSingle
SubForm_Load()
……
ReDimD(4,6)
……
EndSub
2.注意事项
(1)在动态数组ReDim语句中的下标可以是常量,也可以是有了确定值的变量;
(2)在过程中可以多次使用ReDim来改变数组的大小,也可改变数组的维数。
(3)每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数来保留数组中的数据,但使用Preserve只能改变最后一维的大小,前面几维大小不能改变。
数组的基本操作
1. 给数组元素赋初值
(1)利用循环结构
例:
Dim iA(1To10)AsInteger
Fori=1To10
A(i)=0
Nexti
(2)利用Array函数
例:
Dim aAsVariant,bAsVariant,i%
a=Array(1,2,3,4,5)
b=Array("abc","def","67")
Fori=0ToUbound(a)
Picture1.printa(i);"";
Nexti
Fori=0ToUbound(b)
Picture1.printb(i);"";
Nexti
2.数组的输入
(1)通过InputBox函数输入适合输入少量数据。
例:
Dim sB(3,4)Assinger
Fori=0To3
Forj=0To4
SB(i,j)=InputBox("输入"&i&j&"的值")
Nextj
Nexti
(2)通过文本框控件输入
对大批量的数据输入,采用文本框和函数split()\join()进行处理,效率更高。
3.数组的赋值
在VB6.0中可以直接将一个数组的值赋值给另一个数组:
Dima(3)asinteger,b()asinteger
A(0)=2:
A
(1)=5:
A
(2)=-2:
A(3)=2
b=a
在早期的VB中,这需要用循环语句才可以实现:
ReDimb(UBound(a))
ForI=0toUBound(a)
b(I)=a(I)
Nexti
注意:
(1)赋值号两边的数据类型必须一致;
(2)如果赋值号左边的是一个动态数组,则赋值时系统自动将动态数组ReDim成右边相同大小的数组;
(3)如果赋值号左边的是一个大小固定的数组,则数组赋值出错。
4.数组的输出
用For……Next循环语句输出。
5.求数组中最大元素和所在下标及各元素之和
求数组中最大元素及下标,一般假设第一个元素及下标为最大,然后将该数与数组中的其他元素逐一比较,若有比其大的就替换,同时替换下标。
6.交换数组中各元素
交换的要求是将数组第一个元素与最后一个交换,第二个与倒数第二个交换,依次类推。
控件数组
1.控件数组的概念
控件数组是由一组相同类型的控件组成的,它们共用一个控件名,具有相同的数组。
控件数组适用于若干个控件执行的操作相似的场合,控件组共享同样的事件过程。
控件数组通过索引号(属性中的Index)来标识各控件,第一个下标是0。
如:
Text1(0)、Text1
(1)、Text1
(2)、Text1(3)……
2.控件数组的建立
(1)在设计时建立
步骤:
1)在窗体上画出某控件,并进行属性设置。
2)选中该控件进行“复制”和“粘贴”操作,系统提示“是否建立控件数组”,选择是即可。
多次粘贴就可以创建多个控件元素。
3)进行事件过程的编程。
(2)运行时添加控件数组
方法:
1)在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数组。
2)在编程时通过Load方法添加其余若干个元素,也可以通过Unload删除某个添加的元素。
3)每个添加的控件数组通过Left和Top属性,确定其在窗体上的位置,并将Visible设置为True。
使用示例:
建立一个类似国际象棋的棋盘,要求黑白交替,运行时单击某个棋格,会改变颜色并显示其序号。
自定义数据类型
1.自定义数据类型的定义
是指由若干标准数据类型组成的一种复合类型,也称为记录类型。
(1)定义方式:
Type自定义类型名
元素名[(下标)]As类型名
……
元素名[(下标)] As类型名
EndType
元素名:
表示自定义类型中的一个成员
下标(可选):
表示是数组,
类型名:
为标准类型
例:
定义一个学生信息的自定义类型:
Typestudtype
No As Integer '定义学号
Name As String*10 '定义姓名
Sex As String*2 '定义性别
Mark(1TO4)AsSingle '定义4门课程的成绩
TotalAsSingle '定义总分
EndType
(2)注意事项
1)自定义类型一般在标准模块(.bas)中定义,默认是Public
2)自定义类型中的元素可以是字符串,但应是定长字符串
3) 不可把自定义类型名与该类型的变量名混淆
4)注意自定义类型变量与数组的差别:
它们都由若干元素组成,前者的元素代表不同性质、不同类型的数据,以元素名表示不同的元素;后者存放的是同种性质、同种类型的数据,以下标表示不同元素。
2.自定义型变量的声明和使用
使用形式:
Dim变量名 As 自定义类型名
例如:
Dim studentAsstudtype, mystudAsstudtype
自定义类型中元素的表示方法是:
变量名.元素名 如:
student.name student.mark(4)
为了简单起见,可以用With……EndWith语句进行简化。
例:
With student
.no=99001
.name=""
.sex=""
.total=0
forI=1to4
.mark(I)=int(rnd*101) '随机产生0-100之间的分数
.total=.total+.may(I)
nextI
EndWith
Mystud=student '同种自定义类型变量可以直接赋值
VB.NET中的数组
数组是程序中经常要使用到的一种数据类型,VisualBasic.Net中的数组,虽然语法结构等方面保留了和VisualBasic的很多相似之处,但也与VisualBasic存在着很多区别。
其最大,也是各位VisualBasic程序员所最不能容忍的区别就是如下二点:
1.在VisualBasic.Net中申明一个数组,其数组元素中的索引值的起点全部都为“0”,而不是以前VisualBasic中的索引值起点一般都为“1”。
这种定义方法和VisualBasic.Net的孪生姐妹VisualC#非常相似。
2.由于在VisualBasic.Net中数组都有了统一的起点,所以在VisualBasic.Net中定义一个数组,也就不再需要关键字“To”来设定数组的范围。
这样在VisualBasic.Net中申明一个数组将会比VisualBasic中要稍微简洁一点。
关于数组定义将在后面详细介绍。
申明、初始化数组和访问数组中的元素:
在VisualBasic.Net申明一个数组使用的依然是Dim语句,其申明数组和VisualBasic的主要区别在上面内容中已经简单说过了。
下面在VisualBasic.Net申明一个长度为“3”的字符串数组,并对之进行初始化的代码:
DimarrString
(2)AsString={"星期一","星期二","星期三"}
下面代码是申请一个2×2的二维字符串数组,并对之进行初始化:
DimarrDate(1,1)AsString={{"星期一","18号"},{"星期二","19号"}}
静态数组和动态数组的区别就在于静态数组的长度是固定的,而动态数组的长度是不固定的。
上面的申明的二个数组就是静态数组,而下面二段代码的作用就是分别申明一个一维数组和二维数组,并对它们进行初始化:
DimarrString()AsString={"星期一","星期二","星期三"}
'申明一个动态的一维数组,并初始化
DimarrDate(,)AsString={{"星期一","18号"},{"星期二","19号"}}
'申明一个动态的二维数组,并初始化
对其他数据类型和更多维数的数组,其申明和初始化方法和上面的基本差不多,只需根据数组的维数和数据类型的不同进行相应的修改就可以了。
当数组申明和初始化以后,就可以通过元素在数组中对应的索引值来访问,下面二段代码分别是访问上面申明并初始化的一维数组和二维数组中的一个元素:
DimsTemp1AsString=arrString
(1)
'访问arrString数组中的第2个元素
DimsTemp2AsString=arrDate(1,1)
'访问arrDate数组中的第二行、第二列元素
重新申明数组:
在VisualBasic.Net重新申明数组和VisualBasic中基本类似,依然使用的是ReDim语句。
在VisualBasic.Net中使用ReDim语句要注意以下三点:
1.ReDim语句仅可以在过程级出现。
这意味着不可以在类或模块级代码区使用ReDim语句来重新申明数组。
2.ReDim语句只是更改已被正式声明的数组的一个或多个维度的大小,但不能更改该数组的维数。
3.ReDim语句无法更改数组中元素的数据类型,和Dim语句申明数组的区别在于无法在ReDim语句中初始化重新申明的数组。
在使用ReDim重新申明数组时,最为常见的关键字就是“Preserve”。
“Preserve”的作用是表明在重新申明数组时,是否要在重新申明的数组中复制原数组中的元素。
请比较下面二段代码:
代码一:
DimarrString
(2)AsString={"星期一","星期二","星期三"}
ReDimPreservearrString(4)
'重新申明arrString数组,数组的长度改为5,并且在新数组中复制原数组的元素
arrString(3)="星期四"
arrString(4)="星期五"
代码二:
DimarrString
(2)AsString={"星期一","星期二","星期三"}
ReDimarrString(4)
'重新申明arrString数组,数组的长度改为5,并不往新数组中复制原数组的元素
arrString(0)="星期一"
arrString
(1)="星期二"
arrString
(2)="星期三"
arrString(3)="星期四"
arrString(4)="星期五"
通过比较上述二段代码,可见,在第一段代码中由于ReDim中使用了Preserve关键字,所以在重新申明数组时,就在新数组中复制了原数组的元素,这样就只需要对其中的二个元素进行初始化;而第二段由于没有使用Preserve关键字,就没有在新数组中带入原数组中的任何元素,所以对数组的所有元素都进行初始化。
通过比较相信您对重新定义数组和“Preserve”关键字的使用有了更深的理解。
ForEach….Next语句在数组中的使用:
ForEach….Next语句好像只是为二种数据类型专门度身定做的,其一就是集合,另外一个就是数组了。
通过ForEach….Next语句,可以十分方便的访问数组中的任一元素。
请仔细分析一下下列代码:
DimarrString
(2)AsString={"星期一","星期二","星期三"}
DimTempAsString
ForEachTempInarrString
IfTemp="星期三"Then
MsgBox("在数组中寻找到""星期三""字符串")
ExitFor
'退出ForEach….Next语句
EndIf
Next
上面代码的功能是通过ForEach….Next语句访问arrString数组中各元素,如果发现有元素为字符串“星期三”,则弹出提示框,并退出循环。
同样用For…Next语句也能够实现上面同样的功能,只是感觉有点不专业,并且有点繁琐,下面代码是用For…Next语句实现上面ForEach….Next语句同等功能的代码:
DimiAsInteger
Fori=0TomyString.Length-1
IfarrString(i)="星期三"Then
MsgBox("在数组中寻找到""星期三""字符串")
ExitFor
EndIf
Next
五.申明参数为数组的过程或者函数:
由于数组为引用类型,所以如果以数组为参数过程和函数在定义时候就要多加以注意,下面代码是在VisualBasic.Net申明一个参数为数组的过程的典型代码,可见在调用数组类型之前多了一个关键字“ByVal”,“ByVal”关键字的作用在于在下面调用的过程中的不能更改数组的数值:
SubDisplayArray(ByValmyString()AsString)
EndSub
简要介绍System.Array类及其成员:
Array类是一个基类,是公共语言运行库中所有数组的基类。
它提供了创建、操作、搜索和排序数组的方法。
数组中任一个元素就是Array中的一个值。
Array的长度是它可包含的元素总数。
Array的秩是Array中的维数。
Array中维度的下限是Array中该维度的起始索引,多维Array的各个维度可以有不同的界限。
表01和表02分别是Array类的常用属性和常用方法及其说明:
属性
说明
IsFixedSize
获取指示Array是否具有固定大小的值。
IsReadOnly
获取指示Array是否为只读的值。
Length
获取Array的所有维度中的元素总数。
Rank
获取Array的秩(也就是维数)。
表01:
System.Array类的常用属性及其说明
方法
说明
BinarySearch
使用二进制搜索算法在一维的排序Array中搜索值。
Clear
将Array中的一系列元素设置为零、false或空引用(即:
Nothing),具体操作时设定值取决于元素类型。
Copy
将一个Array的一部分复制到另一个Array中,并根据需要执行强制类型转换和装箱。
CopyTo
将当前一维Array的所有元素复制到指定的一维Array中(从指定的目标Array索引开始)。
GetLength
获取Array的指定维度中的元素数。
GetLowerBound
获取Array中指定维度的下限。
GetUpperBound
获取Array的指定维度的上限。
GetValue
获取当前Array中指定元素的值。
LastIndexOf
返回一维Array或部分Array中某个值的最后一个匹配项的索引。
Reverse
反转一维Array或部分Array中元素的顺序。
SetValue
将当前Array中的指定元素设置为指定值。
Sort
对一维Array对象中的元素进行排序。
表02:
System.Array类的常用方法及其说明
一个处理数组的具体示例:
下面介绍的示例的功能包含了数组的申明、初始化、重新申明、重新初始化、数组中各元素的排序、数组的遍历、查找以及以数组为参数的过程的定义及调用方法等。
下面是此示例实现的具体步骤:
1.启动VisualStudio.Net。
2.选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。
3.将【项目类型】设置为【VisualBasic项目】。
4.将【模板】设置为【Windows应用程序】。
5.在【名称】文本框中输入【数组】。
6.在【位置】的文本框中输入【E:
\VS.NET项目】,然后单击【确定】按钮,这样在“E:
\VS.NET项目”目录中就产生了名称为“数组”的文件夹,并在里面创建了名称为【数组】的项目文件。
7.把VisualStudio.Net的当前窗口切换到【Form1.vb(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应操作:
四个Button组件,分别用来创建一个“创建一维数组”、创建“创建二维数组”、实现对“对一维数组排序”和实现“重定义一维数组”。
并在这四个Button组件拖入Form1的设计窗体后,分别双击这四个组件,这样系统会在Form1.vb文件分别产生这四个组件的Click时间对应的处理代码。
一个ListBox组件,用来显示创建的一维数组的内容。
8.按照表03中数值来设定设定组件的主要属性:
组件类型
组件名称
属性
设置结果
Form
Form1
Text
数组篇
Form1
MaximizeBox
False
Form1
MinimizeBox
False
Form1
FormBorderStyle
FixedSingle
ListBox
ListBox1
ItemHeight
12
ListBox1
LocationPoint
(28,169)
ListBox1
SizeSize
(246,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 比较