《第6章 数组ppt课件.pptx》由会员分享,可在线阅读,更多相关《第6章 数组ppt课件.pptx(40页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第6章 数组本章内容u理解理解数组的概念及作用。数组的概念及作用。u掌握数组的定义和处理方法。掌握数组的定义和处理方法。u掌握结构数组的定义和处理方法。掌握结构数组的定义和处理方法。u掌握数组的应用。掌握数组的应用。2第第6 6章章 数组数组36.1 6.1 数组数组的定义的定义数组是具有相同类型的一组变量的有序数组是具有相同类型的一组变量的有序集合集合。数组中的每一项数据称为一个数组元素,每个数组元素数组中的每一项数据称为一个数组元素,每个数组元素有一个惟一的顺序号有一个惟一的顺序号下标。例如下标。例如:要记录一个班级要记录一个班级3030名同学的名字,可以定义一个字符串型数组名同学的名字,
2、可以定义一个字符串型数组Student(30)Student(30) 。数组数组中的第一个元素的下标称为下标的界,最后一个元中的第一个元素的下标称为下标的界,最后一个元素的下标称为下标的上界,其余元素的下标为下界和上界素的下标称为下标的上界,其余元素的下标为下界和上界之间的连续整数。之间的连续整数。数组可以是一维的,也可以是多维的。数组维数又叫数组可以是一维的,也可以是多维的。数组维数又叫做秩做秩, ,,由数组元素中下标的个数决定,数组只有一个下,由数组元素中下标的个数决定,数组只有一个下标表示数组为一维数组,有两个下标表示数组为二维数标表示数组为一维数组,有两个下标表示数组为二维数组组。根据
3、。根据问题的需要,还可以选择使用问题的需要,还可以选择使用三维数组等三维数组等多维多维数组数组。41 1数组的定义数组的定义定义定义一个数组就是指定其数组名、类型、维数和数组的一个数组就是指定其数组名、类型、维数和数组的大小大小。语句语句格式如下:格式如下:Public| Private| Dim Public| Private| Dim 数组名数组名( (下标下标1 1上界上界 ,下标,下标2 2上上界界) As ) As 数据类型数据类型例如例如,Dim A(10) As Integer Dim A(10) As Integer 声明了声明了A A是是IntegerInteger型一维数型
4、一维数组,有组,有A(0)A(0)、A(1)A(1)、A(10)A(10)共共1111个元素个元素;Dim Dim C(5C(5,4) As Long 4) As Long 声明声明了了LongLong型二维数型二维数组组C C,有有C(0,0) C(0,0) 、C(0,1)C(0,1)、C(5,4)C(5,4)共共6 65 5共共3030个元素个元素。n 数组的定义语句数组的定义语句6.1 6.1 数组数组的定义的定义52数组的引用数组的引用数组数组元素的引用形式为:元素的引用形式为:数组名数组名(下标下标1,下标,下标2,)例如:例如:A(1)70 将数组元素将数组元素A(1)赋值为赋值为
5、70 A(3) A(1) 5 将数组元素将数组元素A(1)的值加的值加5后赋给元素后赋给元素A(3) Debug.Print B(5,4,3) 输出三维数组的元素输出三维数组的元素B(5,4,3)的的值值【例【例6-1】随机产生一批】随机产生一批0到到9之间的整数,统计并输出每个数出现之间的整数,统计并输出每个数出现的次数。的次数。定义一定义一个整型数组个整型数组a(9),a(0)a(9)分别存放分别存放09这这10个整数的个数个整数的个数。 Dim a(9) As Integer, x As Integer, i As Integer For i = 1 To 100 x = Int(Rnd
6、() * 10) a(x) = a(x) + 1 Next i For i = 0 To 9 Label1.Text = Label1.Text & i & 有有 & a(i) & 个个 & vbCrLf Next i6.1 6.1 数组数组的定义的定义6n 数组元素的初始化数组元素的初始化创建数组时可以对数组中所有元素的值初始化(即赋初创建数组时可以对数组中所有元素的值初始化(即赋初值),语句格式为:值),语句格式为:Dim Dim 数组名数组名() As () As 数据类型数据类型=常量常量1 1,常量,常量nnDim Dim 数组名数组名() As () As 数据类型数据类型=第第1
7、 1行各常量行各常量,第第n n行行各常量各常量例如:例如: Dim x() As Single = 1, 2, 3, 4, 5 Dim x() As Single = 1, 2, 3, 4, 5 Dim y() As Integer = 1, 2, 2, 3, 3, 4 Dim y() As Integer = 1, 2, 2, 3, 3, 4返回数组的下标上界返回数组的下标上界UboundUbound函数的格式:函数的格式:UBound(UBound(数组名数组名 ,n)n)指定返回第指定返回第n n维的下标上界,如果缺省维的下标上界,如果缺省n n,默认返回第,默认返回第1 1维的下标上
8、界。例如:维的下标上界。例如: Label2.Text = UBound(x) Label2.Text = UBound(x) Label1.Text = UBound(y, 2) Label1.Text = UBound(y, 2)6.1 6.1 数组数组的定义的定义7n 动态动态数组数组动态数组是指数组元素的个数在程序的运行期间可动态数组是指数组元素的个数在程序的运行期间可以改变的数组。以改变的数组。定义动态数组分以下两步:定义动态数组分以下两步:(1)(1)定义数组的维数和类型,语句定义数组的维数和类型,语句格式:格式:Public Public | Private |Dim | Pri
9、vate |Dim 数组名数组名(下标下标1 1 , 下标下标22, ) As ) As 数据类型数据类型 (2)(2)数组操作前用数组操作前用ReDimReDim语句为动态数组分配存储空间,语句为动态数组分配存储空间,语句语句格式:格式:ReDim Preserve ReDim Preserve 数组名数组名( (下标下标11,下标,下标2 2,) ) As As 数据类型数据类型6.1 6.1 数组数组的定义的定义8【例【例6-26-2】生成若干个】生成若干个0 09999之间的整数存于数组之间的整数存于数组a a,删除,删除指定位置的元素,并显示删除前、后结果指定位置的元素,并显示删除前
10、、后结果。6.1 6.1 数组数组的定义的定义9删除指定位置的元素后,数组中元素的个数比创建时少,删除指定位置的元素后,数组中元素的个数比创建时少,定义一个动态数组,在删除元素后,重新指定数组大小定义一个动态数组,在删除元素后,重新指定数组大小。程序程序如下:如下: Dim a(), m, n, k As Integer m = InputBox(输入要生成多少个元素:输入要生成多少个元素:) - 1 ReDim a(m) Label1.Text = 原数组:原数组: & vbCrLf For n = 0 To m a(n) = Int(Rnd() * 100) Label1.Text &=
11、a(n) & Space(2) Next n k = InputBox(输入要删除元素的位置:输入要删除元素的位置:) - 1 For n = k To m - 1 a(n) = a(n + 1) Next n m = m - 1 ReDim Preserve a(m) Label2.Text = 删除后的结果:删除后的结果: & vbCrLf For n = 0 To m Label2.Text &= a(n) & Space(2) Next n6.1 6.1 数组数组的定义的定义106.2 6.2 数组数组的处理的处理n 数组的输入数组的输入 定义定义数组并初始化时赋值。数组并初始化时赋值
12、。例如:例如:Dim weekday() As String = Sun, Mon, Tue, Wed, Thu, Fri, Sat 直接直接使用赋值语句。使用赋值语句。例如例如:A(1) 70。 使用使用InputBox函数结合函数结合For循环控制结构来输入。循环控制结构来输入。例如:例如:Dim number(3) As IntegerDim i As IntegerFor i=0 To 3 Number(i)=InputBox(请输入第请输入第+Str(i+1)+ 个元素的值个元素的值)Next i11n 数组数组的其他操作的其他操作1数组的复制数组的复制数组复制直接数组复制直接将一个
13、数组的值赋给另一个数组。例如:将一个数组的值赋给另一个数组。例如: Dim a(,) As Integer = 1, 2, 2, 3, 3, 4, 4, 5 Dim b(,) As Integer Dim i,j As Integer b = a For i = 0 To UBound(b, 1) For j = 0 To UBound(b, 2) Label1.Text = Label1.Text & Str(b(i, j) Next j Label1.Text = Label1.Text & vbCrLf Next i注意注意: 赋值号两边的数据类型必须一致。赋值号两边的数据类型必须一致。
14、 如果赋值号左边必须是一个动态数组,复制时系统自动将如果赋值号左边必须是一个动态数组,复制时系统自动将动态数组定义成右边同样大小的数组。动态数组定义成右边同样大小的数组。6.2 6.2 数组数组的处理的处理12n 数组数组的其他操作的其他操作2Erase语句语句用于用于删除整个数组结构并释放该数组所占用的内存空间删除整个数组结构并释放该数组所占用的内存空间。语句语句格式为:格式为:Erase 数组名数组名,数组名,数组名, 在下次引用该数组之前,必须用在下次引用该数组之前,必须用ReDim语句重新定义该数组语句重新定义该数组的每一维的大小,但不能重新定义数组维数。的每一维的大小,但不能重新定义
15、数组维数。3.Lbound函数和函数和Ubound函数函数语法形式如下:语法形式如下:Lbound(ArrayName,Dimension)Ubound(ArrayName,Dimension)参数参数ArrayName指定数组名指定数组名,Dimension指定第几维,函数指定第几维,函数Lbound返回指定数组指定维的下标返回指定数组指定维的下标下界下界0。函数。函数Ubound返返回指定数组指定维的下标上界。回指定数组指定维的下标上界。6.2 6.2 数组数组的处理的处理13n System.ArraySystem.Array类类Array类的常用属性类的常用属性6.2 6.2 数组数组
16、的处理的处理14n System.ArraySystem.Array类类Array类的常用方法类的常用方法6.2 6.2 数组数组的处理的处理15【例例6-3】 将数组将数组x的前的前2个元素复制数组中。个元素复制数组中。 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim i, y(1) As Integer Dim x() As Integer = 8, 6, 5, 4, 1, 9 Array.Copy(x, y, 2) For i = 0 To 1 Label1.Tex
17、t &= y(i) & Space(2) NextEnd Sub6.2 6.2 数组数组的处理的处理16n 使用使用For EachFor EachNextNext语句处理数组语句处理数组For EachNextFor EachNext语句用于语句用于数组或对象集合的操作,其数组或对象集合的操作,其一般形式为:一般形式为:For Each For Each 成员成员 In In 数组数组循环体循环体 Next Next 成员成员 说明:说明:成员也叫控制变量成员也叫控制变量。是。是一个和数组同类型的一个和数组同类型的变量。变量。在循环执行时,控制变量将遍历数组中的每一个在循环执行时,控制变量将
18、遍历数组中的每一个元素。元素。成员只能表示数组元素的值,但是不能用成员为数组成员只能表示数组元素的值,但是不能用成员为数组赋值赋值。6.2 6.2 数组数组的处理的处理17【例例6-4】利用利用For Each Next结构输出结构输出String型数组型数组a中中的每个元素。的每个元素。 Dim a(), x As String 声明动态数组声明动态数组a Dim n, i As Integer n = InputBox(请输入一个整数请输入一个整数) ReDim a(n) 以变量以变量n定义数组定义数组a的大小的大小 For i = 0 To n a(i) = 第第 & i & 个元素个元
19、素 Next i For Each x In a Debug.Print(x) Next6.2 6.2 数组数组的处理的处理186.3 6.3 结构结构类型类型n 结构类型的定义结构类型的定义语句语句格式为:格式为:Public|Private Structure 数据类型名数据类型名 Dim 元素名元素名1 As 类型名类型名 Dim 元素名元素名2 As 类型名类型名 Dim 元素名元素名n As 类型名类型名End Structure 元素元素的类型可以是基本数据类型,也可以是其他的自的类型可以是基本数据类型,也可以是其他的自定义数据类型。定义数据类型。 19【例例6-5】定义一个学生类
20、型,含有学号、姓名、总成绩和系别定义一个学生类型,含有学号、姓名、总成绩和系别4个元素,其中系别元素的数据类型为结构类型个元素,其中系别元素的数据类型为结构类型Department。Department类型含有系编号和系名称两个元素。类型含有系编号和系名称两个元素。定义定义结构类型结构类型Department: Structure Department Dim DepartmentNo As String Dim DepartmentName As String End Structure定义定义结构类型结构类型Student: Structure Student Dim StudentNo
21、As String Dim StudentName As String Dim StudentScore As Single Dim StudentDep As Department End Structure6.3 6.3 结构结构类型类型20n 结构变量的引用结构变量的引用(1)单成员的引用)单成员的引用引用某一结构变量的成员,用以下形式:引用某一结构变量的成员,用以下形式:结构变量名结构变量名(下标下标).成员名成员名定义了上述定义了上述Student类型之后,就可以将变量说明成类型之后,就可以将变量说明成Student类型,例如:类型,例如: Dim Stu1, Stu2 As Stu
22、dent然后可以像引用对象的属性那样引用类型的各个成员,然后可以像引用对象的属性那样引用类型的各个成员,例如:例如: Stu1.StudentNo = 12010601016.3 6.3 结构结构类型类型21(2)结构变量的整体操作)结构变量的整体操作使用使用With语句,语句格式如下:语句,语句格式如下:With 结构变量结构变量 End With例如,对结构变量例如,对结构变量Stru1的各成员赋值:的各成员赋值: With Stu1 .StudentNo = 120101 .StudentName = 张卫张卫 .StudentScore = 658.5 .StudentDep.Depa
23、rtmentNo = 012 .StudentDep.DepartmentName = 材料院材料院 End With6.3 6.3 结构结构类型类型22n 结构数组结构数组定义语句格式定义语句格式如下:如下:Dim 数组名(上界)数组名(上界) As 结构名结构名例如:例如: Dim St(30) As Student引用某一结构数组元素的引用某一结构数组元素的成员的形式成员的形式:结构数组名结构数组名(下标下标).成员名成员名例如:例如: St(1).StudentNo = 12010601016.3 6.3 结构结构类型类型23【例例6-6】 建立一个同学通信录,其中有两项信息:姓建立一
24、个同学通信录,其中有两项信息:姓名、电话号码。输入名、电话号码。输入10个同学的信息,然后将所有信息个同学的信息,然后将所有信息显示出来。显示出来。(1)定义一个结构类型。)定义一个结构类型。 Structure Student Dim Name As String Dim Tele As Single End Structure6.3 6.3 结构结构类型类型24(2)利用)利用InputBox输入信息,每次将一个人的信息全部输入,输入信息,每次将一个人的信息全部输入,各项信息间以空格间隔。利用各项信息间以空格间隔。利用Split函数分割信息函数分割信息。Private Sub Button
25、1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim stu(10) As Student Dim s(1) As String, i As Integer For i = 0 To 9 s = Split(InputBox(请输入第请输入第 & i + 1 & 个人信息:个人信息:), ) With stu(i) .Name = s(0) .Tele = s(1) Debug.Print(.Name & Space(4) & .Tele) End With Next End Sub6.3 6.3 结构结构类型类
26、型256.4 6.4 数组数组的应用的应用n 一维数组的应用一维数组的应用【例例6-7】从键盘输入从键盘输入10个整数存入一个一维数组,然个整数存入一个一维数组,然后将数组最大值与第一个元素互换,最小值与最后一个元后将数组最大值与第一个元素互换,最小值与最后一个元素互换,其余元素不变。素互换,其余元素不变。程序程序如下:如下: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim a(9), k, x, m, n As Integer For k = 0 To 9 a(k) =
27、 InputBox(请输入第请输入第 & k + 1 & 个数:个数:) Next k For Each x In a Label1.Text &= x & Space(2) Next26 m = 0 : n = 0 For k = 1 To 9 If a(k) a(n) Then n = k Next k k = a(0) : a(0) = a(n) : a(n) = k k = a(9) : a(9) = a(m) : a(m) = k For Each x In a Label2.Text &= x & Space(2) Next End Sub6.4 6.4 数组数组的应用的应用27【
28、例例6-8】输入若干个字符,分别统计元音字母输入若干个字符,分别统计元音字母A、E、I、O、U出现的次数。出现的次数。在窗体上添加一个标签、在窗体上添加一个标签、1个文本框,文本框个文本框,文本框TextBox1的的MultiLine属性设为属性设为True。程序程序如下:如下: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim c(4), s_len, k As Integer Dim s As String, s1 As Char Dim ch() As Char =
29、A, E, I, O, U s = TextBox1.Text s_len = Len(s) 6.4 6.4 数组数组的应用的应用28For k = 1 To s_len s1 = Mid(s, k, 1) Select Case s1 Case A, a c(0) = c(0) + 1 Case E, e c(1) = c(1) + 1 Case I, i c(2) = c(2) + 1 Case O, o c(3) = c(3) + 1 Case U, u c(4) = c(4) + 1 End Select Next k For k = 0 To 4 Label1.Text &= 字母字
30、母 & ch(k) & 有有 & c(k) & 个个 & vbCrLf Next End Sub6.4 6.4 数组数组的应用的应用29【例例6-9】把一个数插入到有序数列中,插入后数列仍把一个数插入到有序数列中,插入后数列仍然有序。然有序。一个数列放在数组一个数列放在数组a(1)a(n)中,待查找的数放在中,待查找的数放在x 中中,变量变量k表示表示a数组元素下标,数组元素下标,k初值为初值为1,使,使x与与a(k)比较,比较,如果如果x不等于不等于a(k),则使,则使kk1,不断重复这个过程;一,不断重复这个过程;一旦旦x等于等于a(k)或或k大于数组长度,则退出循环。大于数组长度,则退出
31、循环。 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim n, k, i, x, y As Integer Dim a() As Integer = 2, 5, 7, 9, 12, 15, 20 n = UBound(a) ReDim Preserve a(n + 1) x = Val(InputBox(输入要插入到数列中的数:输入要插入到数列中的数:) k = 1 6.4 6.4 数组数组的应用的应用30Do While x a(k) And k x(j) Then t
32、= x(i) x(i) = x(j) x(j) = t End If Next j Next i For Each i In x Label1.Text &= i & Space(2) Next End Sub6.4 6.4 数组数组的应用的应用33算法算法3:冒泡排序法。冒泡排序法的基本思路是将相邻的:冒泡排序法。冒泡排序法的基本思路是将相邻的两个数两两进行比较,使小的在前,大的在后。两个数两两进行比较,使小的在前,大的在后。n表示排序数的个数表示排序数的个数6.4 6.4 数组数组的应用的应用34程序如下:程序如下: Private Sub Button1_Click(sender As
33、Object, e As EventArgs) Handles Button1.Click Dim n, i, j, t As Integer Dim x() As Integer= 8, 6, 9, 3, 2, 7 n = UBound(x) n是是数组上界数组上界 For i = 0 To n - 1 For j = 0 To n - i - 1 If x(j) x(j + 1) Then t = x(j) x(j) = x(j + 1) x(j + 1) = t End If Next j Next i For Each i In x Label1.Text &= i & Space(2
34、) Next End Sub6.4 6.4 数组数组的应用的应用35【例例6-11】数据检索问题。检索是从一组数据中找出具有某种特征的数据检索问题。检索是从一组数据中找出具有某种特征的数据项。数据项。顺序检索基本顺序检索基本思想是对所存储的数据从第一项开始,依次与所要检思想是对所存储的数据从第一项开始,依次与所要检索的数据进行比较,直到找到该数据,或将全部元素都找完还没有找到索的数据进行比较,直到找到该数据,或将全部元素都找完还没有找到该数据为止该数据为止。设有设有n个数已存在数组个数已存在数组a中,要找的数据为中,要找的数据为x,顺序检索过程,顺序检索过程的程序如下:的程序如下: Priva
35、te Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim a() As Integer= 8, 6, 9, 3, 2, 7 Dim x As Integer, n As Integer, i As Integer x = InputBox(请输入一个数:请输入一个数:) n = UBound(a) For i = 1 To n If a(i) = x Then Exit For Next i If i n Then MsgBox(没有找到这个数。没有找到这个数。) Else MsgBox(找
36、到了这个数。找到了这个数。.这个数是这个数是a( & i & ).) End If End Sub6.4 6.4 数组数组的应用的应用36若若被检索的是一组有序数据被检索的是一组有序数据,例如:,例如:a1a2an ,数据数据存储在数组存储在数组a(1),a(2),a(n)中中,在,在1到到n中间选一个正整数中间选一个正整数k,用,用k把原来有把原来有序的数列分成序的数列分成3个序列:个序列:a(1),a(2),a(k1)。a(k)。a(k1),a(k2),a(n)。然后,用然后,用a(k)与与x比较,若比较,若xa(k),查找过程结束;若,查找过程结束;若xa(k),也用同样的方法把序列也用
37、同样的方法把序列a(k1),a(k2),a(n)分成分成3个序列,直个序列,直到找到到找到x或得到或得到“x找不到找不到”的结论为止的结论为止。这。这是一种应用是一种应用“分治策略分治策略”的解题思想的解题思想。当当kn/2时,称为二分检索法。时,称为二分检索法。6.4 6.4 数组数组的应用的应用37Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim a() As Integer = 2, 3, 6, 7, 8, 9 Dim x, n, L, H, M As Integer
38、 Dim f As Boolean x = InputBox(请输入一个数:请输入一个数:) n = UBound(a) L = 0 : H = n f = False Do While Not f And L a(M) Then L = M + 1 ElseIf x = a(M) Then f = True Else H = M - 1 End If Loop If (f) Then MsgBox(a( & m & ) & x) Else MsgBox(没有找到这个数。没有找到这个数。) End If End Sub6.4 6.4 数组数组的应用的应用38n 二维数组的应用二维数组的应用【例
39、例6-12】输入一个输入一个3行行4列矩阵,输出其转置矩阵。列矩阵,输出其转置矩阵。 Dim B(,) = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 Dim A(,), i, j As Integer For i = 0 To UBound(B, 1) For j = 0 To UBound(B, 2) Console.Write(B(i, j) & Space(2) Next j Console.WriteLine() Next i ReDim A(UBound(B, 2), UBound(B, 1) For i = 0 To UBound(B, 2) Fo
40、r j = 0 To UBound(B, 1) A(i, j) = B(j, i) Console.Write(A(i, j) & Space(2) Next j Console.WriteLine() Next i6.4 6.4 数组数组的应用的应用39【例例6-13】利用随机函数生成一个利用随机函数生成一个45的矩阵,矩阵元素是的矩阵,矩阵元素是9999之间的整数。求:之间的整数。求:矩阵所有元素之和及平均值。矩阵所有元素之和及平均值。保留所有大于平均值的元素,其余元素清零。保留所有大于平均值的元素,其余元素清零。 Private Sub Button1_Click(sender As O
41、bject, e As EventArgs) Handles Button1.Click Dim a(4, 5), i, j, s As Integer Dim a_ave As Single Randomize() For i = 1 To 4 For j = 1 To 5 If Rnd() 0.5 Then a(i, j) = Fix(-Rnd() * 100) Else a(i, j) = Fix(Rnd() * 100) End If Console.Write(a(i, j) & Space(2) s = s + a(i, j) Next j Console.WriteLine() Next i6.4 6.4 数组数组的应用的应用40 a_ave = s / 20 Debug.Print(平均值是:平均值是: & a_ave) For i = 1 To 4 For j = 1 To 5 If a(i, j) = a_ave Then a(i, j) = 0 Console.Write(a(i, j) & Space(2) Next j Console.WriteLine () Next iEnd Sub6.4 6.4 数组数组的应用的应用
限制150内