资源预览内容
第1页 / 共78页
第2页 / 共78页
第3页 / 共78页
第4页 / 共78页
第5页 / 共78页
第6页 / 共78页
第7页 / 共78页
第8页 / 共78页
第9页 / 共78页
第10页 / 共78页
亲,该文档总共78页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第五章 数组,计算机科学学院,ZY CS,第五章 数组,ZY CS,引例: 求一个班100个学生的平均成绩,统计高于平均分的人数,(1) 求一个班100个学生的平均成绩,按以前简单变量的使用和循环结构相结合,求平均成绩程序段如下:,ZY CS,(2) 统计高于平均分的人数,不足: 需重新输入100个数据,输入数据的工作量成倍增加; 容易出错,若本次输入的成绩与上次不同,则统计的结果不正确。,ZY CS,第五章 数组,ZY CS,6.1 数组的概念【重点】,数组是一组相同类型的变量的集合,不是数据类型 数组名代表一批数据,用下标表示该数组中的各个元素 注意:数组必须先声明后使用 数组分为两类:静态数组、动态数组,(声明时确定了大小的数组),(声明时没有确定大小的数组),int,int,int,int,int,int,int,int,int,int,ZY CS,第五章 数组,ZY CS,6.2 静态数组,一个下标表示一维数组 Dim 数组名(下标) As 类型 下标:必须为常数,不可以为变量或含变量的表达式,该数组的大小为100(可存放100个不同的整型数据),数组名,下标,Dim mark(1 To 100) As Integer,ZY CS,多个下标表示多维数组 Dim 数组名(下标1,下标2 ,下标3,) As 类型,6.2 静态数组,静态数组,Dim A(2)As Double 一维数组A,共有三个双精度元素,分别为A(0)、A(1)、A(2)。 Dim B(-2 To 2)As Single 一维数组B,共有5个单精度元素,分别为B(-2)、B(-1)、B(0)、B(1)、B(2) Dim C(2, 1 To 2)As Integer 二维数组C,共有6个整型元素,分别为C(0,1)、C(0,2)、C(1,1)、C(1,2)、C(2,1)、C(2,2)。 Dim D(1,1)As Double 二维数组D,共有4个双精度元素,分别为D(0,0)、D(0,1)、D(1,0)、D(1,1)。,ZY CS,格式: Dim 数组名(下标1,下标2) As 类型 声明了数组的名称、维数、大小、类型 维数:下标个数决定了数组的维数,最多60维。 下标:下界 To 上界 省略下界为0,必须为常数。 每一维的大小:上界-下界+1 数组大小: 每一维大小的乘积,静态数组,静态数组,dim a(3) as integer 静态数组a有多少个元素? dim b(2,3) as integer 静态数组b有多少个元素?,例如: Orange(1 to 5)表示一维数组共有5个元素。 Apple(1 to 3, 2 to 5) 表示二维数组,大小为34,元素总数为二个维数的乘积12,该数组在数学上可表示为3行4列的矩阵。 Pear(1 to 2,1 to 3,2 to 4) 表示三维数组,大小为233,元素总数为三个维数的乘积18,该数组在数学上可以用立体图形来表示。 注意: 在增加数组的维数时,数组所占的存储空间会大幅度增加,由于对每一个下标变量都分配空间,所以声明数组的大小要合适。,静态数组,ZY CS,数组的下标,Dim a (10) As Integer,Dim st(-3 To 5) As String*3,数组a是_维整型数组,有_个元素,下标范围为_,若使用a(11),系统提示_,数组st是_维字符串型数组,有_个元素,下标范围为-35,每个数组元素最多存放3个字符,Dim a%(10),“下标越界”,一,11,010,一,9,注意: 下标越界 数组元素的使用规则与同类型的简单变量相同 数组类型用Variant时,可包含不同类型的数据,数组的下标,生成10个随机数,放到大小为10的数组中,并交换前10个和后10个元素的值,ZY CS,用数组统计高于平均分的人数,Dim mark(1 To 100) As Single aver = 0 For i = 1 To 100 mark(i) = InputBox(输入 Next i For i = 0 To UBound(b) Print b(i); Next i a = Array(1,“abc”,7,8,9,12,“ghj”) 可多次使用Array()函数重新定义数组大小并初始化,a数组,b数组,注:(1)定义的数组变量或动态数组只能为Variant (2)Array函数只适用于一维数组,ZY CS,3. 数组的输入和输出,一维数组的输入和输出,Dim a(10) As Integer For i=1 To 10 a(i)=i Next i For i=1 to 10 Print a(i); Next i,窗体上打印的结果为1 2 3 4 5 6 7 8 9 10,ZY CS,Option Base 1 Dim a(9) As Integer For i=1 To 9 a(i)=i Next i For i=1 To 9 Print a(i); If i mod 3 =0 Then Print Next i,1 2 3 4 5 6 7 8 9,练习2,产生一个如右图所示的矩阵 方法一:采用一维数组,ZY CS,Option Base 1 Dim a(3, 3) As Integer For i=1 To 3 For j=1 to 3 a(i, j)=3 * (i 1) + j Next j Next I For i=1 To 3 For j=1 to 3 Print a(i, j); Next j Print Next i,1 2 3 4 5 6 7 8 9,1a(1,1) 2a(1,2) 3a(1,3) 4a(2,1) 5a(2,2) 6a(2,3) 7a(3,1) 8a(3,2) 9a(3,3),方法二:采用二维数组,二维数组的输入和输出,思考: 如何由在运行时获得用户输入的值到二维数组?,a(i, j)=Val(InputBox(Enter data:),如何实现二维数组的逆置?,Print a(j, i);,1 a(1,1) 4 a(2,1) 7 a(3,1) 2 a(1,2) 5 a(2,2) 8 a(3,2) 3 a(1,3) 6 a(2,3) 9 a(3,3),ZY CS,4. For Each Next语句,格式,For Each 成员 In 数组 循环体 Exit For Next 成员,ZY CS,Dim a(10) As Integer, i%, x For i = 1 To 10 a(i) = Int(100 * Rnd) Next i For Each x In a Print x Next x,说明: 程序运行时,通过Rnd函数和Int函数为每个数组元素随机产生一个 0100之间的随机整数,然后通过For Each Next语句输出每个 数组元素的值。,4. For Each Next语句,使用数组和简单变量主要存在如下区别: (1)输入的简单变量越多,程序就越长,程序本身占用的内存空间就越大。 (2)在一个程序中使用的简单变量个数有限,对大批量数据,简单变量就不能表示了。 (3)简单变量的存储位置呈松散状态,数组却占据着一片连续的存储区域。 (4)在程序结构上,简单变量不适合使用循环的办法来解决,增加了代码的复杂度。,数组的优点,ZY CS,第五章 数组,ZY CS,6.5 控件数组,相关概念 控件数组是由一组相同类型的控件组成 控件数组共用一个控件名,具有相同的属性 控件数组的每个元素有一个唯一的索引号(Index) 控件数组共享相同的事件过程 Private Sub Option1_Click(Index As Integer) End Sub,ZY CS,控件数组的建立 在设计时建立 方法一:Copy和Paste操作 方法二:直接修改控件名和index属性 删除控件数组中的一个控件 在改变该控件的“Name”属性的同时把Index属性置为空(不是0),即可将该控件从控件数组中删除。,6.5 控件数组,ZY CS,ZY CS,控件数组的使用,【例】输入两个整数,进行加、减、乘、除、整除和求余运算,程序界面设计,Dim one As Single Dim two As Single Dim result As Single one = Val(Text1.Text) two = Val(Text2.Text) Select Case Index Case 0: result = one + two Case 1: result = one - two Case 2: result = one * two Case 3: result = one / two Case 4: result = one two Case 5: result = one Mod two End Select Text3.Text = result,任务1 随机产生5个两位整数,求出5个数的平均值、最大值、最小值。思路:5个随机两位数要利用Rnd函数和Int函数,通过循环来产生,求平均值则要先求和,所以要用循环进行累加求和,另外在累加求和过程中通过比较寻找5个数的最大值和最小值。,静态数组,任务2 用数组求1!+2!+10!之和。 Private Sub Form_Click() Dim a(1 To 10) As Long, sum As Long, f As Long Dim n As Integer f = 1 For n = 1 To 10 通过10次循环,分别求出1!10! f = f * n a(n) = f 每求得一个阶乘就赋值给一个数组元素 Next n sum = 0 For n=1 To 10 sum = sum +a(n) Next n Print 1! + 2! + 3! + 10! =; sum End Sub,静态数组,任务3 使用ReDim语句来声明动态数组。 Private Sub Form_Click() Dim a() As Integer ReDim a(5) As Integer a(0) = 100 Print 第一次重新动态分配后:a(0)= max Print 最小值为:; min,ZY CS,2.排序,比较交换法排序 选择法排序 冒泡法排序,ZY CS,比较交换法,基本思想: (1)将a(1)依次与第二个数到 第n个数逐一比较,若a(1) a(j),则交换,第一趟排序完成最小数据放入a(1)中; (2)将a(2)依次与第三个数到 第n个数逐一比较,若a(2) a(j),则交换,第二趟排序完成最小数据放入a(2)中。 (3)重复以上操作,进行n 1趟排序,ZY CS,1 2 3 5 4,2 1 3 5 4,3 1 2 5 4,5 1 2 3 4,5 1 2 3 4,第一轮结束,找到最大值 5,举例 原始数据: 1,2,3,5,4 要求:降序,ZY CS,5 1 2 3 4,5 2 1 3 4,5 3 1 2 4,5 4 1 2 3,第二轮结束,找到第二最大值 4,ZY CS,设置下标默认下界为1:Option base 1 Dim a As Variant a = Array(56, 90, -123, 58, 5, 10, 100, 53, 66, 518) n = UBound(a) For i = 1 To n-1 For j = i + 1 To n If a(i) a(j) Then t = a(i):
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号