大学计算机vb课程第六章.ppt

上传人:本田雅阁 文档编号:2226948 上传时间:2019-03-07 格式:PPT 页数:58 大小:418.51KB
返回 下载 相关 举报
大学计算机vb课程第六章.ppt_第1页
第1页 / 共58页
大学计算机vb课程第六章.ppt_第2页
第2页 / 共58页
大学计算机vb课程第六章.ppt_第3页
第3页 / 共58页
亲,该文档总共58页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《大学计算机vb课程第六章.ppt》由会员分享,可在线阅读,更多相关《大学计算机vb课程第六章.ppt(58页珍藏版)》请在三一文库上搜索。

1、第六章 数组、枚举和自定义类型 6.1 数组的概念 6.2 数组的基本操作 6.3 控件数组 6.4 枚举类型 6.5 自定义数据类型 6.6 应用举例 数组中常见错误和注意事项 6.1 数组的概念 数组并不是一种数据类型,而是一组相同类型的变 量的集合. 两类数组: 静态和定长数组;动态(可变长)数组 6.1.1 定长数组及声明 形式: Dim 数组名(下标1下界 To 上界,下标2) As 类型 Dim 数组名(下标1上界,下标2上界) As 类型 功能: 声明了数组的名、维数、大小、类型 维数: 几个下标为几维数组 下标: 下界 To 上界 省略下界为0 ,必须为常数。 每一维大小: 上

2、界下界+1 数组大小: 每一维大小的乘积 例:Dim mark(1 to 100) As Integer 6.1 数组的概念 Dim a(5) as Integer 一维数组 维数=1 大小=5-0+1=6 Private b(0 to 3, 4) as string 二维数组 维数=2 大小=4x5 Public c(1 to 1, 0 to 2, 3) as single 三维数组 维数=3 大小=1x3x4 6.1 数组的概念 6.1.1 定长数组及声明 数组声明例子 Dim lArray( 0 To 3, 0 To 4) As Long 共有 45个元素 等价于: Dim lArray

3、(3, 4) As Long 例:Dim mark(1 to 100) As Integer 6.1 数组的概念 6.1.1 定长数组及声明 数组存储格式 1. 虽然下标下界缺省默认为0 ,但也可以自己定义数组的下界是1或0 。 格式: Option Base 1|0 (在通用声明段说明) 例如 Option Base 1 设下标的初值为1 Dim mark(100) As Integer 等价于 Dim mark(1 To 100) As Integer 6.1 数组的概念 6.1.1 定长数组及声明 说明: 2. 在数组声明中的下标说明了数组的整体,即每一维的大小;而在 程序其他地方出现的

4、下标表示数组中的一个元素。 两者写法形式相同,但意义不同。 例如: Dim x(10) As Integer 声明了x数组有11个元素 x(10)=100 对x(10)这个数组元素赋值 6.1.1 定长数组及声明 说明 3. 在同一个过程中,数组名不能与变量同名。 例如:Dim s as integer Dim s(1 to 5) as string 4. 声明数组时,下标值不能是变量或表达式,只能 是常数。 例如:Dim x(1 to n) as integer 是错的 Dim s(1+k to 5) as string 是错的 取得数组下标的上、下界值 Lbound(数组名称,维数) 取得

5、指定数组之某一维的下标下界值 Ubound(数组名称,维数) 取得指定数组之某一维的下标上界值 Dim X(8,1 To 6) Lbound(X,1)=0 Lbound(X,2)=1 Ubound(X,1)=8 Ubound(X,2)=6 下标1的上、下界值 下标2的上、下界值 6.1 数组的概念 6.1.1 定长数组及声明 数据类型与默认数组 声明时,当As 类型缺省或数据类型为Variant时,都是 变体类型。各个元素能够包含不同种类的数据(对象、字 符串、数值等等)。 Private Sub Form_Activate() Dim s(3) As Variant s(0) = 4 : s

6、(1) = 23.4 s(2) = “Good Morning!“ s(3) = Now() Print s(0), s(1):Print s(2), s(3) End Sub 例6-1平均分和高于平均分的人数 6.1 数组的概念 6.1.1 定长数组及声明 6.1 数组的概念 6.1.2 动态数组、静态数组及声明 动态数组(不定长)-在程序未执行之前并未分配任何单元给该 数组,而是程序执行到该数组声明时,才分配内存单元。 静态数组是指该数组在程序载入到内存时,就已经分配好内 存空间供静态数组使用。 1. 静态数组声明方法 使用Static语句声明维数,大小一定的过程级数组 Static a(

7、5) as integer 当过程结束后,数组的值依然存在 Static a(3) As Integer For i = 1 To 3 a(i) = a(i) + i * 2 Print “a(“; i; “)=“; a(i) Next i Print Dim a(3) As Integer For i = 1 To 3 a(i) = a(i) + i * 2 Print “a(“; i; “)=“; a(i) Next i Print 例6-2 比较用Dim 与 Static的区别 6.1 数组的概念 6.1.2 动态数组、静态数组及声明 2. 动态数组声明方法 (1) 使用Dim、Priv

8、ate或Public语句声明括号内为空 的数组 dim a() as integer (2)在过程中用ReDim语句指明该数组的大小 Redim a(3,4) as integer 6.1 数组的概念 6.1.2 动态数组、静态数组及声明 例 Dim A( ) As Single Sub Form_Click( ) ReDim A(4,8) End Sub Dim、Private、Public变量声明语句是说明性语句,可出现在 过程外或内。 v ReDim语句是执行语句,只能出现在过程内。 v ReDim语句可以多次重复定义数组的大小,但不能改变数组第 一次用ReDim语句所定义的数据类型。

9、v 使用ReDim语句重新定义数组后,会使数组原来的数据丢失, 若想保留,可在ReDim语句之后加参数Preserve。 例6-3 在例6-1基础上,班级人数动态给出 6.1 数组的概念 6.1.2 动态数组、静态数组及声明 说明: 格式: Erase 数组名称 可以将动态数组从内存中清除,将数值型静态 数组清为0,将字符型静态数组清为空字符串。 ReDim aa(5) As Integer Static bb(5) As Integer aa(2) = 5:bb(2) = 8 Print aa(2); bb(2) Erase aa, bb Print Print aa(2) Print bb

10、(2) 例6-4清除数组应用 3. 清除数组 6.1 数组的概念 6.1.2 动态数组、静态数组及声明 1数组元素的输入(赋值) 2数组的初始化 3数组元素的输出 4数组元素的复制 6.2 数组的基本操作 6.2.1 数组元素的输入、输出和复制 6.2.2 For Each Next语句 1数组元素的输入(赋值 ) (1)用赋值语句直接赋值 (2)用循环结构输入 (3)用输入框或文本框输入 6.2 数组的基本操作 6.2.1 数组元素的输入、输出和复制 (1)用赋值语句直接赋值 当数组元素较少或只需对数组中的指定元素赋值 时,可以用赋值语句来实现数组元素的输入。例如: Dim X(2) As

11、Integer, Y(2,2) As Integer X(0)=5 X(1)=15 X(2)=25 Y(1,1)=100 6.2 数组的基本操作 6.2.1 数组元素的输入、输出和复制 (2)用循环结构输入 当数组元素很多或是多维数组时,元素的输入可以通过循 环或多重循环语句来实现。多维数组的存储是按行的顺序存储 的,因此可以把数组的第一维的循环变量放在最外层循环中。 例如: Dim Arr(2,4) For i=0 to 2 按行 For j=0 to 4 按列 Arr(i,j)=i+j 将i+j赋给Arr(i,j) Next j Next i 6.2 数组的基本操作 6.2.1 数组元素的

12、输入、输出和复制 (3)用输入框或文本框输入 数组元素的输入也可以通过输入框。例如,在6.1节例1中 学生成绩的输入就应用了InputBox函数。程序段如下: For i = 1 To 30 sum(i) = Val(InputBox(“请输入学生成绩”) sum_mt = sum_mt + sum(i) Next i 当然,对于大量的数据输入,为了便于编辑一般不用 InputBox函数,而用文本框(见6.2.2节例6-7)。 6.2 数组的基本操作 6.2.1 数组元素的输入、输出和复制 2.数组的初始化 所谓数组的初始化,就是给数组的各元素赋初值。 VB提供的Array函数则可以使数组在程

13、序运行之前初 始化得到初值。 格式:数组变量名= Array(数组元素值表) 功能:将数组元素值表中的值,赋给具有自由类型 (Variant)的数组变量名的对应元素。 6.2 数组的基本操作 Dim ib As Variant ib = Array(“abc“, “def“, 67) For i = 0 To UBound(ib) Picture1.Print ib(i); “ “; Next i 6.2.1 数组元素的输入、输出和复制 (1)预先定义的数组(将被赋值的数组)可以声明为没有下标 和维数的可调数组或连圆括号都可省略的数组,且类型只能是自 由类型(Variant)。 (2)由于建立

14、的数组是Variant类型数组,所以数组元素值 表中的值可以是任意数据类型,数据类型也可以不必完全一样 。若参数的个数超过两个,中间必须用逗号隔开。 (3)数组的下界默认为0,也可以通过Option Base语句设定 ;上界由Array函数括号内的元素个数决定,也可通过Ubound函 数获得。 (4)Array函数只能给一维数组赋值,对二维以上的多维数组 不适用。 2 数组的初始化 Array函数使用说明: 6.2.1 数组元素的输入、输出和复制 Option Base 1 Private Sub Form_Activate() Dim week As Variant mydate = #5/

15、1/2002# week = Array(“日“, “一“, “二“, “三“, “四“, “五“, “六“) Print Print “今天是:星期“ + week(Weekday(Now) Print Print “2002年5月1日是星期“ + week(Weekday(mydate) End Sub 例6-5利用Array函数显示今天是星期几 2 数组的初始化 6.2.1 数组元素的输入、输出和复制 Option Base 1 Private Sub Form_Activate() Dim Number(4, 4) As Integer For i = 1 To 4 i代表行号 For

16、 j = 1 To i j 代表列号 Number(i, j) = i * j 输入数组元素 Print Number(i, j); 输出数组元素 Next j Print 换行显示 Next I End sub 数组元素可以象输出其他数据一样,用Print、标签、文本框等实 现。例6-6打印下三角图形 3.数组的输出 6.2 数组的基本操作 6.2.1 数组元素的输入、输出和复制 4.数组的复制 在VB6.0中,提供了数组直接对数组的赋值。例如: Dim a() As Variant, b() As Variant, i% a = Array(1, 2, 3, 4, 5) ReDim b(U

17、Bound(a) b = a For i = 0 To UBound(a) b(i) = a(i) Next i 注意:赋值号左边的数组只能声明为Variant的动态可调数组或 简单变量。数组元素复制时,赋值号两边的数据类型必须一致。 6.2 数组的基本操作 6.2.1 数组元素的输入、输出和复制 格式: For Each 变量 In 数组名称 循环体 Exit for Next 变量 根据数组元素的个数,通过循环将数组各元素的值依 次赋给变量。 注意: (1)变量必须是使用As Variant声明的自由类型数据 (2)循环次数=数组元素的个数 6.2.2 For Eachnext数组循环语句

18、 6.2 数组的基本操作 例子: 用For Each next数组循环显示数组内容,并显示 其累加和 Option base 1 dim score() as variant,total as integer dim e_score as variant Score=array(90,20,80) total=0:I=0 For Each e_score In score I=I+1 total=total+e_score Print I;e_score;total Next 6.2 数组的基本操作 6.2.2 For Eachnext数组循环语句 例子:显示四个成绩及成绩和 Option b

19、ase 1 dim score(2,2) as integer,total as integer dim e_score as variant score(1,1)=90: score(1,2)=20: score(2,1)=80 score(2,2)=60:total=0:I=0 For Each e_score In score I=I+1 total=total+e_score Print I,e_score,total Next 6.2 数组的基本操作 6.2.2 For Eachnext数组循环语句 例6-7 对6-1进行改进, 利用For Each 循环完成 Private Sub

20、 Command2_Click() Dim avg As Integer For Each e_sum In sum total = total + e_sum Next avg = total / k For Each e_sum In sum If e_sum avg Then n = n + 1 求高出平均分的人数 Next Label2.Caption = “共输入“ + Str(k) + “个学生成绩*“ _ + “其平均成绩为:“ + Str(avg) + “分*“ _ + “超过平均分的人数为:“ + Str(n) End Sub 6.2 数组的基本操作 6.2.2 For Ea

21、chnext数组循环语句 6.3 控件数组 1控件数组的基本概念 控件数组是一组具有相同名称和类型的控件。它们 的事件过程也相同。通常用于对若干个控件执行大致 相同的操作。当建立控件数组的时候,系统给每个元 素赋一个唯一的索引值(Index)或称下标值,第一个 控件的下标值是0,第二个为1,依次类推,通过属性 窗口的Index属性,不仅可以知道该控件的下标值是多 少,也可以将该控件的下标值设为其它值。 2建立控件数组的方法 控件数组的建立有设计时创建和运行时添加两种方式: (1)设计时创建控件数组有以下三种方法: 方法1 将相同名字赋予多个控件. 方法2 复制现有的控件并将其粘贴到窗体上。 方

22、法3 将控件的 Index 属性设置为非空数值。 6.3 控件数组 3. 控件数组应用 在用控件数组设计程序时,由于它们的事件过程也 相同。为了区分控件数组中的各个元素,VB会把下标 值 传递给过程,例如,建立一个选项按钮数组Option1, 单击任意一个选项按钮,都会调用如下同一个过程: Sub Option1_Click(Index As Integer) 只是根据传递给过程的Index值的不同,给出不同 的 结果。 6.3 控件数组 Private Sub Option1_Click(Index As Integer) Select Case Index Case 0 Print “单击

23、了第一个选项按钮” Case 1 Print “单击了第二个选项按钮” Case 2 Print “单击了第三个选项按钮” End Select End Sub 6.3 控件数组 3. 控件数组应用 Label1 Label5 Label4 Label2 Label3 Comman d1 Option1控件数组 Frame 1 Text1 Text2 例6-8 输入两个数, 通过运算符的选择给出结果 6.3 控件数组 3. 控件数组应用 (2)运行时添加控件数组 在运行时,可用 Load 和 Unload 语句添加和删除 控件数组中的控件,然而,添加的控件必须是现有控 件数组的元素。建立控件数

24、组的步骤如下: 步骤1 在设计时创建一个(在大多数情况下)Index 属 性为 0 的控件,表示该控件是控件数组的第一个元素 。 步骤2 在编程时通过Load 和 Unload 语句添加或删除控 件数组中的元素。 步骤3 每个新添加的控件数组元素通过Left和Top属性 ,确定其在窗体的位置,并将Visible属性设置为True 。 6.3 控件数组 2建立控件数组的方法 Load 和 Unload 语句格式: 【格式】Load 控件名(下标值) 【功能】添加控件数组元素。 【格式】Unload 控件名(下标值) 【功能】删除控件数组元素。 【说明】 u 控件名:在控件数组中添加或删除的控件名

25、称。 u 下标值:控件在数组中的索引值。 例如,Laod Option1(1),UnLaod Option1(1)。 6.3 控件数组 2建立控件数组的方法 添加前 添加后 例6-9 单击命令按钮,可以添加选项按钮,通过选择 不同的选项按钮,实现显示不同的图形 6.3 控件数组 2建立控件数组的方法 6.4 枚举类型 所谓“枚举”就是把变量的值一一列举出来,变量的值只 限于列举出来的值的范围。 枚举只能通过在标准模块或公用类模块中的声明部分 ,用 Enum 语句声明一个枚举类型来创建。Enum 语句格 式如下: 【格式】 Public|PrivateEnum 类型名称 成员名=常数表达式 成员

26、名=常数表达式 End Enum 例6-10 利用枚举类型输出是否是工作日 用“文件”菜单中的“新建工程”命令建立一个工程,然后 执行“工程”菜单中的“添加模块”命令,在模块窗口中输入 下面的枚举类型定义: Public Enum WorkDays Saturday Sunday =0 Monday Tuesday Wednesday Thursday Friday Invalid = -1 End Enum Private Sub Form_Click() Dim MyDay As WorkDays MyDay = Wednesday If MyDay Max Then Max=a(i):

27、iMax=i Next I a(1)= a(2)= a(3)= a(4)= a(5)= 原始数据 5 14 9 24 2 第1次循环 条件 a(2)maxa(1)满足max=a(2) imax=I=2 第2次循环 条件 a(3)maxa(2)不满足 第3次循环 条件 a(4)maxa(2)满足 max=a(4) imax=I=4 第4次循环 条件 a(5)maxa(4) 不满足 最后 最大值 max=a(4)=24 imax=I=4 例题6-13求数组中最大元素及所在下标 6.6 应用举例 数组中各元素的交换实质上是找下标之间的规率 。例如,要求将数组第一个元素与最后一个元素交换 ,第二个元素

28、与倒数第二个元素交换,以此类推。解 决的方法为,首先找出数组下标的中间值,若数组有n 个元素,则中间值为n/2,为了避免出现小数,用整除 n2取中间值;然后通过循环语句,利用某个中间变量 ,将数组的元素交换。 2. 将数组中各元素交换 6.6 应用举例 将数组中各元素交换 a(I) a(10-I+1) For i =1 To 102 第1次循环 a(1) a(10) t=A(i) 第2次循环 a(2) a(9) A(i)=A(10-i+1) 第3次循环 a(3) a(8) A(10-i+1)=t 第4次循环 a(4) a(7) Next I 第5次循环 a(5) a(6) 2 9 t A(I)

29、 A(10-I+1) 交 换 1 2 3 例题6-14 6.6 应用举例 对已知存放在数组中的n个数,用选择法按递增顺序排序。 (1) 从n个数的序列中选出最小的数(递增),与第1个数交换 位置; (2) 除第1个数外,其余n-1个数再按(1)的方法选出次小的 数,与第2个数交换位置; (3) 重复(1)n-1遍,最后构成递增序列。 For i = 1 To n - 1 iMax= i For j = i+1 To n If A(j) A(iMax) Then iMax = j Next j t= A(i): A(i) = A(iMax): A(iMax) = t Next I 选择法排序 F

30、or i = 1 To n -1 iMax= i For j = i+1 To n If A(j) A(iMax) Then iMax = j Next j t= A(i): A(i) = A(iMax) : A(iMax) = t Next I 递增递减 6.6 应用举例 对已知存放在数组中的n个数,用冒泡法按递增顺序排序。 从数据的第一项开始,每一项(I)都与下一项(I+1)进行 比较,如果下一项的值较小,就将这两项的值交换,从而使较 小的数据项排在前面。这样反复处理,直到结束,然后再回到 开头进行重新处理。 For i = n To 2 step -1 For j = 1 To i-1

31、If A(j) A(j+1) Then t= A(j): A(j) = A(j+1): A(j+1) = t end if Next j Next I 6.6 应用举例 冒泡法 5 7 9 2 3 5 7 9 2 3 5 7 2 9 3 5 7 2 3 9 5 7 2 3 9 5 2 7 3 9 5 2 3 7 9 2 5 3 7 9 2 3 5 7 9 a(1) a(2) a(3) a(4) a(5) 7 5 9 2 3 For i = 5 To 2 step -1 For j = 1 To i-1 If A(j) A(j+1) Then t= A(j): A(j) = A(j+1) A(j

32、+1) = t end if Next j Next I I=5 I=4I=3 2 3 5 7 9 无交换 I=2 6.6 应用举例 冒泡法 For i = n To 2 step -1 For j = 1 To i-1 If A(j) A(j+1) Then t= A(j): A(j) = A(j+1): A(j+1) = t end if Next j Next I For i = 2 To n For j = n To i step -1 If A(j) A(j-1) Then t= A(j): A(j) = A(j-1): A(j-1) = t end if Next j Next I

33、 递增递减 6.6 应用举例 思路:在数据序列中,由第一个元素开始按顺序用关键 值与数组中的元素逐一比较,直到找到结果或全部数据 查找完毕为止。 例6-16利用顺序查寻法查寻一组数据中是否含有数5, 若有,则是第几个数。 4.顺序查找 6.6 应用举例 例6-16 若有n个数,则顺序查找法的平均查找次数为 n/2 Option Base 1 Dim Arr, num%, inum% Arr = Array(3, 6, 12, 5, 8, 24) num = 5 :inum = 0 For i = 1 To UBound(Arr) If Arr(i) = num Then inum = i Ne

34、xt i Print If inum = 0 Then Print “查无此数据“; num Else Print “第“; inum; “个数据是“; num End If 6.6 应用举例 1. 静态数组声明下标出现变量 n = InputBox(“输入数组的上界“) Dim a(1 To n) As Integer 2数组下标越界 引用的下标比数组声明时的下标范围大或小。 Dim a(1 To 30) As Long, i% a(1) = 1: a(2) = 1 For i = 1 To 30 a(i) = a(i - 2) + a(i - 1) Next I 数组中常见错误和注意事项: 3数组维数错 数组声明时的维数与引用数组元素时的维数不一致。 Dim a(3, 5) As Long a(1)=10 4Aarry函数使用问题 只能对Variant 的变量或动态数组赋值。 5获得数组的上界、下界 UBound 、Lbound函数 数组中常见错误和注意事项:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1