5存储多个同类型的数据—数组与集合.ppt





《5存储多个同类型的数据—数组与集合.ppt》由会员分享,可在线阅读,更多相关《5存储多个同类型的数据—数组与集合.ppt(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5章 存储多个同类型的数据数组与集合第3章中介绍了变量,使用变量可以存储数值。然而,当需要存储同一类型的多个数值时,单个变量就无法胜任了。例如,存储全班60个学生某一门课的成绩,也可以声明60个Double类型的变量来存储。但是,采用这种方法,需要记忆所有变量的名称,并且处理起来相当繁琐。本章讲述存储和处理这些数值的一个更简单和有效的方法,就是数组,同时讲述有关集合的相关知识。章节内容5.1 什么是数组5.2 一维数组5.3 多维数组5.4 动态数组5.5 Array类5.6 使用集合代替数组5.1 什么是数组以存储全班60个学生的成绩为例。在数学中,对于这样的一个数字序列,常会用这样的方法
2、表示:S1,S2,S3,S60。显然,对于这样一批同类型的数据来说,完全可以只取一个名称S,然后使用下标来区分它们。在VB.NET中,可以使用数组来表示这样的一组数据,名称相同,仅使用下标(也成为索引)来区分这些数据。每一个数据称为数组的元素,这些元素的下标都是连续的,数组中包含元素的个数称为数组的长度。一个由10个元素组成的Integer类型数组intA(0)intA(8)intA(2)intA(3)intA(4)intA(5)intA(6)intA(7)intA(1)intA(9)数组名,注意该数组中所有元素都使用相同的名字intA1104781290754516550数组intA中元素的
3、下标,代表了该元素在该数组中的位置数组的维数数组可以是一维或者多维的。维是一个方向,可以在此方向上改变数组元素的规范。例如,保存月内每日总销量的数组有一个维(当月日期)。而保存每个部门的月内每日总销量的数组则有两个维(部门编号和当月日期)。数组的维数也称为数组的秩。一维数组一维数组只有一个下标。二维数组二维数组结构类似于表格,需要指明行、列才能确定其中的元素,因此二维数组有两个下标。三维数组三维数组的结构则类似于立方体,拥有三个下标,依此类推,N维数组应该有N个下标。5.2 一维数组仅有一个下标的数组称为一维数组,用于存储和处理线性的数据。使用数组之前,必须先声明这个数组,并为其分配内存空间。
4、数组声明与创建语法格式如下。Dim 数组名(下标上界)As 元素类型数组名后面的圆括号表明这是一个数组,而不是单个变量。仅有一个下标,表示这是一个一维数组。下标必须是常量或者常量表达式,而不能是变量。数组下标从0开始,因此数组可以包含元素的总数,即数组的长度应该为下标上界加1。As后面的类型指明数组元素的类型,如果省略,则默认为Object类型。例子下面代码声明了一个整型的含有10个元素的一维数组。Dim intA(9)As Integer在VB.Net中,将数组作为对象看待,因此数组可以在声明时不指明其长度,而是在使用之前使用New关键字创建,分配相应的内存空间,其语法格式如下。Dim 数组
5、名()As Integer数组名=New 类型名(下标上界)数组元素的引用通过数组名和下标来引用数组元素,语法格式如下。数组名(下标)其使用方式与单个变量很相似,可以出现在任何可以使用单个变量的地方。例子例如,下面代码引用了intA数组中的第1个元素,并将其赋值给另外一个变量a。Dim a As Integera=intA(1)数组初始化数组在使用之前通常要有值。可以在使用New关键字创建数组的时候为其指定初始值,称为数组初始值设定项。intA=New Integer(9)1,2,3,4,5,6,7,8,9,10上面的下标上界可以省略,编译器会根据初始值个数来确定数组的下标上界。也可以在创建时
6、不指明初始值,而在后面使用赋值语句,代码如下。Dim strComments()=New String(20)strComments(1)=FirststrComments(10)=Tenth数组应用数组通常应用于对有序数据的处理。从代码层面来说,在使用数组时,常与循环语句,尤其是For语句结合使用。示例1:Fibaonacci数列题目:如果一对兔子每月能生一对小兔(一雄一雌),而每对小兔在它出生后的第三个月里,假定在不发生死亡的又生了一对小兔,情况下,由一对出生的小兔开始,50个月后会有多少对兔子?分析:在第一个月时,只有一对小兔子,过了一个月,那对兔子成熟了,在第三个月时便生下一对小兔子,
7、这时有两对兔子。再过一个月,成熟的兔子再生一对小兔子,而另一对小兔子长大了,就有三对小兔子。如此推算下去,从第一个月开始,以后每个月的兔子总数是:1,1,2,3,5,8,13,21,34,55,89,144,233若把上述数列继续写下去,得到的数列便称为斐波那契(Fibonacci)数列。该数列的规律为:F1=1 F2=2Fn=Fn-2+Fn-1这是一个有序的一维数列,我们可以声明一个数组来存放它,并将其第一个元素和第二个元素赋值为1。构建“Fibonacci”应用程序Step1:新建一个Windows Form应用程序工程,并命名为“Fibonacci”。Step2:进行窗体界面设计。Ste
8、p3:编写代码。1 Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load2 声明一个含有50个元素的整型数组3 Dim Fib()As Long=New Long(49)4 Dim i As Integer=05 Fibnacci数列的前两个数6 Fib(0)=17 Fib(1)=18 在文本框中显示前两个数字,以逗号分隔9 txbFib.Text=1,110 计算数列中的后续数11 For i=2 To 4912 Fibonacci数列中的数等于
9、前两项的和13 Fib(i)=Fib(i-2)+Fib(i-1)14 在文本框中显示数据15 txbFib.Text&=(,&Fib(i)16 Next17 End Sub计算Fib数列中的项运行结果示例2:使用Eratosthenes筛选法求素数问题:使用Eratosthenes筛选法求1000以内的素数。所谓Eratosthenes筛选法,是指首先留下2(第一个素数),而后把2的倍数统统删除;再留下3(第二个素数),而后把3的倍数统统从数组中删去;再往下是5,7像筛子一样,把不需要的数逐步筛去,留下的就是所求的素数。分析:首先需要声明一个数组来保存这1000个数,下标应当从0到999。其次
10、,从数组中将不需要的数字筛选出去。这个筛选的过程显然应当使用循环结构来实现。最后,如何实现筛选的过程呢?最简单的做法,是直接在该数组中将需要筛选出去的数改为0。构建“PrimeOfEratosthenes”应用程序Step1:新建一个Windows Form应用程序工程,并命名为“PrimeOfEratosthenes”。Step2:进行窗体界面设计。Step3:编写代码。1 Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load2 声明数组3 Di
11、m Sieve()As Integer=New Integer(1000)4 Dim i,k As Integer5 数组初始化6 For i=0 To 10007 Sieve(i)=i8 Next9 清空文本框10txbPrime.Text=“”11 For i=2 To 100012 当前数不为0说明是筛选过后留下的数,即是素数13 If Sieve(i)0 Then14 在文本框中显示素数,以逗号分隔15 txbPrime.Text&=(Sieve(i)&,)16 筛选过程,将该素数的倍数都筛选出去17 For k=i*2 To 1000 Step i18 Sieve(k)=019 Ne
12、xt20 End If21 Next22 End Sub运行结果示例3:使用Boolean数组实现筛选过程对于筛选过程的实现,上面代码是通过直接在数组中将其设为0来实现的。在实际应用中,还可以使用一个Boolean类型的数组来实现。1 Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load2 声明数组3 Dim Sieve()As Integer=New Integer(1000)4 Dim IsPrime()As Boolean=New Boole
13、an(1000)5 Dim i,k As Integer6 数组初始化7 For i=0 To 10008 Sieve(i)=i9 Next10 For I=0 to 100011 IsPrime(i)=True12 Next13 清空文本框14 txbPrime.Text=15 16 For i=2 To 100017 当前数对于的Isprime数组中的值为True,说明是筛选过后留下的数,即是素数18 If IsPrime(i)=True Then19 在文本框中显示素数,以逗号分隔20 txbPrime.Text&=(Sieve(i)&,)21 筛选过程,将该素数的倍数都筛选出去22 F
14、or k=i*2 To 1000 Step i23 IsPrime(k)=False24 Next25 End If26 Next27 End Sub区分数组对象和数组变量数组变量保存指向数组对象的指针,而数组变量一旦声明,就不能再更改它的秩或元素数据类型。但是,在数组变量的生存期内,可以将一系列不同的数组对象分配给它,这些数组对象可以具有不同的维长度。数组对象保存的是数组元素、秩和长度信息,数组对象一旦创建,就不能再更改它的维数、维长度或元素的数据类型,只能更改其元素的内容5.3 多维数组5.3.1 5.3.1 二维数组二维数组有两个下标的数组称为二维数组。二维数组的声明和创建、元素引用、初
15、始化等与一维数组均类似,唯一不同之处在于,二维数组需要通过两个下标来引用其元素,因此其处理常需要使用双重的For循环。二维数组声明语法格式Dim 数组名(下标1上界,下标2上界)As 类型下面代码声明了两个二维数组。Dim populations(200,3)As LongDim matrix(5,15,10)As Single应用示例:盘点某商店一年的销盘点某商店一年的销售情况售情况问题:某商店经营了一年后,在年终盘点的时候,需要计算该商店今年总的销售额、每天的平均销售额以及销售额最大的月份。分析:首先需要使用数组来保存该商店每天的实际销售额。学习了前面内容后,读者可能马上会想到,是否可以用
16、一维数组呢?因为一年有365天。这里请注意,题目中还需要求销售额最大的月份,这意味着存储的数据需要按月存放。这样,仅一维数组就不够用了。我们可以声明一个二维数组:第一维表示月份,第二维表示每个月份的每天实际销售额。构建“SalesAverage”应用程序Step1:新建一个Windows Form应用程序工程,并命名为SalesAverage。Step2:进行窗体界面设计。Step3:进行编码。(1)声明变量1 声明一个存放销售额的二维数组2 Dim intSales(,)As Integer=New Integer(11,30)3 年度总销售额4 Dim lngTotal As Long=0
17、5 声明一个存放每月销售额的数组6 Dim lngMonthSales()As Long=New Long(11)7 最大的月销售额8 Dim max As Long=09 最大销售额的月份10 Dim maxMonth As Integer=011 每天平均销售额12 Dim dblDayAver As Double=013 Dim i,j As Integer(2)生成随机数来模拟销售额。首先,需要创建一个Random类的实例。之后就可以使用该对象的方法来生成伪随机数了objRnd.Next():用于生成非负的伪随机数。objRnd.NextDouble():用于生成0.0到1.0之间的随
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 类型 数据 数组 集合

限制150内