已阅读5页,还剩75页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中国药科大学 计算机教研室 Visual Basic 程序设计 第六章 数组 授课教师:潘 蕾 E-Mail: 中国药科大学 计算机教研室 Visual Basic 程序设计 掌握数组的定义和使用 掌握动态数组的定义和使用 掌握控件数组的建立和使用 掌握常用算法 教学要求 中国药科大学 计算机教研室 Visual Basic 程序设计教学内容 6.1 数组的概念 6.2 动态数组 6.3 数组的基本操作 6.4 控件数组 6.5 数组常用算法 中国药科大学 计算机教研室 Visual Basic 程序设计 6.1 数组的概念 6.1.0 数组命名与数组元素 6.1.1 数组定义 6.1.2 数组的结构 6.1.3 数组函数及数组语句 中国药科大学 计算机教研室 Visual Basic 程序设计 输入5名同学的成绩信息,存储并输出: 举例 简单变量实现: Private Sub Command1_Click() Dim a%, b%, c%, d%, e% a = InputBox(“输入成绩:”, “成绩记录 “) b = InputBox(“输入成绩:”, “成绩记录 “) c = InputBox(“输入成绩:”, “成绩记录 “) d = InputBox(“输入成绩:”, “成绩记录 “) e = InputBox(“输入成绩:”, “年龄记录 “) Print a; b; c; d; e End Sub 数组(下标变量)实现: Option Base 1 Private Sub Command1_Click() Dim A(5) As Integer, i As Integer For i = 1 To 5 A(i) = InputBox(“输入成绩:”, “成绩记录 “) Next i For i = 1 To 5 Print A(i); Next i End Sub 注:利用一个数组来存储输入的一组相关信息,操作简洁、灵 活、方便,往往同循环结构结合使用 定义数组 中国药科大学 计算机教研室 Visual Basic 程序设计 前面所说的变量都是指简单变量,即一个变量名对应一 个存储单元,只能存储一个值,各个变量之间无关联。 本章我们要介绍的是一种下标变量数组,是通过一 个数组名和下标的组合来表示多个值。用一个相同的名字引 用一组变量的数据。 数组,是VB支持的一种复合结构的数据类型。 数组,是用于保存一组具有相同数据类型的有序的变量 的集合。 基本概念 中国药科大学 计算机教研室 Visual Basic 程序设计6.1.0 数组命名与数组元素 命名规则与简单变量相同。 数组名不是代表某一变量,而是一组变量。 数组元素: u由数组名和该元素在数组中的编号(索引、下标)唯一确 定,下标是连续的整数。 u数组元素的一般形式: 数组名(下标1,下标2,) eg: a(0),a(1),a(2),a(3),a(4),b(0,0),b(0,1) 数组的维数(例): u一维数组只需一个下标即可唯一确定一个数组元素 u多维数组有两个或两个以上下标的数组,每个下标对 应一个“维” 中国药科大学 计算机教研室 Visual Basic 程序设计6.1.1 数组定义 数组必须先定义后使用。 定义数组时,确定其名称、数据类型、维数、每一维的 上、下界。eg: Dim A(6) As Integer 数组定义时,系统分配连续的内存空间,用于依次保存 所有数组元素。 固定大小数组与动态数组。 固定大小数组:在定义时就确定数组大小,在程序运行过程 中大小不能改变的数组。 动态数组:在程序运行过程中大小可以改变的数组。 eg: Dim A(6) As Integer,B() As Integer 中国药科大学 计算机教研室 Visual Basic 程序设计1、数组说明语句 格式: Public|Private|Static|Dim 数组名( To , To,) As 类型 说明: 声明关键字决定作用域,见下页 TO 决定了每一维的大小,下界指下标 的最小值,上界指下标的最大值,其中 TO可省 略,此时,默认下界是0。 eg: Dim A(1 to 6) As Integer 我们习惯于下标是从1开始,可在模块的“通用”声明 段中使用如下语句 Option Base 1 则在缺省下界的情况下,默认下界是1。 类型指定数组元素的统一数据类型 中国药科大学 计算机教研室 Visual Basic 程序设计 关键字使用位置作用域 Public在标准模块的声明段中全局 Private和Dim在模块的声明段中模块 Dim在过程中局部 Static在过程中局部、静态 注意:全局数组、 全局符号常量和全局定长字符串只能在标准 模块中定义,而全局变量可以在窗体模块或标准模块中定义 中国药科大学 计算机教研室 Visual Basic 程序设计 Dim A(6) as integer Private Name(1999 to 2002) as string *8 Dim b(2,1 to 2) as integer 数组元素分别为:A(0)、A(1)、A(2)、A(3)、A(4)、A(5)、A(6),共7个 数组元素分别为:name(1999) 、 name(2000)、 name(2001)、 name(2002) , 用于保存长度为8的字符串数据。 数组元素分别为:b(0,1),b(0,2),b(1,1),b(1,2),b(2,1),b(2,2) 举例 中国药科大学 计算机教研室 Visual Basic 程序设计2 、数组的类型 可为任一简单数据类型,若缺省则为变体(Variant)类 型 数组说明语句不仅定义了数组、分配了存储空间,还将 数组初始化: u数值型数组元素初始值为零 u变长字符类型数组元素初始值为空字符串 u定长字符类型数组元素初始值为指定长度个数的 空格 u布尔型数组元素初始值为“False” u变体类型数组元素初始值为“Empty” 中国药科大学 计算机教研室 Visual Basic 程序设计 3 、数组的上、下界 上、下界表示下标的最大、最小值; 下界上界; 在固定大小数组定义时,上、下界是常量或常量表达式,不 得是变量; 上、下界应是整数,若不是,则自动四舍五入。 举例: Dim m as integer Const n=5 as integer Dim a(n) as integer Dim b(1 to 6.6) as integer Dim c(1 to 2*3) as integer Dim d(0 to m) as integer 中国药科大学 计算机教研室 Visual Basic 程序设计4 、数组的大小 指数组中包含元素的个数 一维数组元素个数:上界-下界+1 二维数组元素个数: (上界1-下界1+1)*(上界2-下界2+1) 举例: Dim A(6) as integer Dim B(3,1 to 4) as single A数组的大小=6-0+1=7 B数组的大小(3-01)(4-(-1)+1)=46=24 中国药科大学 计算机教研室 Visual Basic 程序设计6.1.2 数组的结构 数组的所有元素是按一定顺序存储在连续的存储单元的。 1.一维数组的结构 u一维数组只能表示线性顺序,相当于一个一维表,一维数 组在内存中存放的次序在形式上与数组的逻辑结构相同,按下 标序号升序排列。 u例:Dim A(3) As Integer u 逻辑结构:(A(0), A(1), A(2) A(3) u 存储结构:按照下标从小到大依次存储 A(0)A(1)A(2)A(3) 中国药科大学 计算机教研室 Visual Basic 程序设计 2 、二维数组的结构 u二维数组的表示形式是由行和列组成的一个二维表,二维数组 的数组元素需要用两个下标来标识,分别表示行号与列号 u例:Option base 1 Dim Y(3,4) as integer u逻辑结构: Y(1,1),Y(1,2),Y(1,3),Y(1,4) Y(2,1),Y(2,2),Y(2,3),Y(2,4) Y(3,1),Y(3,2),Y(3,3),Y(3,4) u存储结构: “按列存放” 中国药科大学 计算机教研室 Visual Basic 程序设计 3 、三维数组的结构 l三维数组是由行,列和页组成的三维表。三维数组也可理 解为几页的二维表,即每页由一张二维表组成,三维数组 的元素是由行号,列号和页号来标识的。 l例如: Option Base 1 Dim Page(3,3,2) As Integer l存储结构:“逐页逐列” 中国药科大学 计算机教研室 Visual Basic 程序设计 6.1.3 数组函数及数组语句 Dim A(5) As Integer, B(2, 3 to 5) As Integer a1=LBound(A) a2=UBound(A) b1=LBound(B,1) b2=LBound(B,2) b3=UBound(B,1) b4=UBound(B,2) Print a1;a2;b1;b2;b3; b4 结果:0 5 0 3 2 5 举例 : 1、返回上、下界函数: 上界:UBound(数组名,d) 下界:LBound(数组名,d) 说明:d代表维数。省略时表示返回第一维的值。 中国药科大学 计算机教研室 Visual Basic 程序设计 格式: Erase a1,a2,. 功能:对普通数组(固定大小数组)重新初始化(按数组类 型给元素赋初值);对动态数组进行存储空间释放。 例:p.89 Option Base 1 Private Sub Form_Click() Dim A(3) As Integer, B() As Integer A(1) = 1: A(2) = 2: A(3) = 3 ReDim B(4) Print A(1), A(2), A(3) Erase A, B Print A(1), A(2), A(3) End Sub 2、 Erase 初始化数组语句 中国药科大学 计算机教研室 Visual Basic 程序设计 格式: For Each Element In 语句块 Exit For 语句块 Next Element 功能:依次(存储次序)处理每一个数组元数,直到数组结束 。 说明: Element是Variant变量,它逐个地代表数组中的每一个 变量。 3、 For Each-Next 数组循环结构 中国药科大学 计算机教研室 Visual Basic 程序设计 Option Base 1 Private Sub Form_Click() Dim E(2, 3) As Integer, V As Variant Dim i As Integer, j As Integer For i = 1 To 2 For j = 1 To 3 E(i, j) = i * 10 + j Print E(i, j); Next j Print Next i For Each V In E Print V; Next V End Sub 处理顺序为该数组的存储顺序按列! 举例 中国药科大学 计算机教研室 Visual Basic 程序设计6.2 动态数组 定义:在程序运行过程中,可重新定义大小的数组。 动态数组的说明分两步: Dim 数组名()as 类型 在变量说明部分 ReDim Preserve (维界定义) 在过程中 Private Sub Form_Click() Dim A( ) As Integer ,B( ) As Integer 说明整型的动态数组A、B Dim x as Integer ReDim A(4) 重新说明数组A,分配4个整型数的内存空间 x=Val(Text1.text) ReDim B(x) 重新说明数组B,按照输入的大小分配空间 . End Sub 注意: - 用Dim语句声明过的数组,只是一个空数组,系统并没有给它分配内存 空间,此时,不能对数组元素进行存取操作,否则出错。必须用ReDim语句重新 定义其大小,系统才给它分配内存,用户才能对此数组元素进行操作。 - 重定义时,维界定义中可以是有了确定值的变量 中国药科大学 计算机教研室 Visual Basic 程序设计 重新定义动态数组时,不能改变数据类型,Redim语句的As Type一般省略,若不省略也必须和数组说明语句一致。 如果Redim重定义的数组不存在,则相当于一个说明语句,系统 会动态创建一个新数组,并分配存储空间。 在过程中可以多次使用ReDim来改变数组的大小,也可改变数组 的维数。(例1) 每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim 语句后加Preserve参数来保留数组中的数据,但使用Preserve只 能改变最后一维的大小,前面几维大小不能改变。(例2) 说 明 中国药科大学 计算机教研室 Visual Basic 程序设计 Option base 1 Dim Dynarry() as integer Dim x as integer,y as integer Dynarry(1)=1 Redim Dynarry(9) Dynarry(1)=1 Print Dynarry(1) x=2:y=4 Redim Dynarry(x,y) Dynarry(1,1)=1 Print Dynarry(1,1) Erase Dynarry Dynarry(1,1)=1 给一维数组元素赋值 给二维数组元素赋值 举例1 非法语句,出错 非法语句,出错 中国药科大学 计算机教研室 Visual Basic 程序设计 Option Explicit Option Base 1 Private Sub Form_Click() Dim i As Integer, a() As Integer ReDim a(4) For i = 1 To 4 a(i) = i Print a(i); Next i Print ReDim Preserve a(6) a(5) = 5 a(6) = 6 For i = 1 To 6 Print a(i); Next i End Sub 如果省去 Preserve,会怎样? 举例2 中国药科大学 计算机教研室 Visual Basic 程序设计 举例3:找出1000以内的所有完数。所谓完数,是指它的所有的 质因子之和等于它本身的数,如6=1+2+3。 l 解题思路: 第一步:找出确定一个数是完数的方法; 第二步:从1到1000依次判断。 l 算法实现: 两层循环: 内层循环用于找出某数 m 的所有因子并相加求和,并 在循环结束后依据因子和是否与该数相等来判断该数是否是 完数; 外层循环则用于穷举所有1000以内的整数。 中国药科大学 计算机教研室 Visual Basic 程序设计 Private Sub Form_Click() Dim i As Integer, f As Integer, s As Integer For i = 1 To 1000 s = 0 For j = 1 To i - 1 If i Mod j = 0 Then s = s + j Next j If s = i Then Print i Next i End Sub 注意s赋初值的位置 中国药科大学 计算机教研室 Visual Basic 程序设计 真题例:找出1000以内的所有完数并以指定的格式在列表框中输出。所 谓完数,是指它的所有的因子之和等于它本身的数,如6=1+2+3。 解题思路: u第一步:找出确定一个数是完数 的方法; u第二步:从1到1000依次判断。 算法实现: 两层循环: 内层循环用于找出某数 m 的所有因子,相加求和,并在 循环结束后依据因子和是否与该数相等来判断该数是否是完 数,如果是则按指定格式输出; 外层循环则用于穷举所有1000以内的整数。 中国药科大学 计算机教研室 Visual Basic 程序设计 Private Sub Command1_Click() Dim i As Integer, j As Integer, s As Integer, k As Integer Dim str1 As String, a() As Integer For i = 1 To 1000 s = 0 For j = 1 To i 1 If i Mod j = 0 Then 是因子,保存进数组并累加求和 s = s + j End If Next j If s = i Then 是完数,按指定格式输出 End If Next i End Sub 注意s、k赋初值的位置 : k = 0 k = k + 1 ReDim Preserve a(k) a(k) = j str1 = CStr(i) Next i Print For i = 1 To 2 For j = 1 To 3 b(i, j) = Int(Rnd * 90) + 10 Print b(i, j); Next j Print Next i End Sub 查看程序 中国药科大学 计算机教研室 Visual Basic 程序设计 格式:变体变量名|变体类型的动态数组名=Array(n1,n2,.) 功能:将一个变体型变量创建成为一个一维数组,并包含指定 的元素。元素的引用方式与一般数组一样。 注意:Array赋值函数只能给变体型变量或动态数组赋值。不能 给其他类型的变量及数组赋值。 3*、Array赋值函数 Option Base 1 Private Sub Form_Click() Dim a As Variant, b As Integer Dim C(4) As Variant a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) Print a(1), a(5), a(10) a = “Array“ Print a b = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 出错 C=Array(1,2,3,4,5) 出错 End Sub ?改为C(1) 是否可以 中国药科大学 计算机教研室 Visual Basic 程序设计 将一个数组内的整个内容赋给另一个数组或变体变量。 赋值后,赋值符左边的数组的维数、每一维的下界和上界都 和赋值符右边的数组相同。 规则: (1)赋值符左边的数组是动态数组 (2)赋值符两边数组的数据类型必须相同 用数组给变体变量赋值时,注意: (1)赋值符右边数组的类型不可以是长度固定的字符串类型 (2)变体变量被赋值后,就被创建成一个包含数组的变体变量 (3)变体变量所包含数组的维数、每一维的下界和上界以及元 素的类型都和赋值符右边的数组相同。例P93 4*、数组赋值 中国药科大学 计算机教研室 Visual Basic 程序设计 6.3.2 数组的输入 1.通过InputBox函数输入 l输入少量数据时可通过InputBox函数输入,例如: Dim Score(3, 4) As Single For i = 1 To 3 For j = 1 To 4 Score(i, j) = InputBox(“输输入第” Next i Print Print “最大数是:“; max; “下标是“; maxp Print “最小数是:“; min; “下标是“; minp End Sub max = Compare(1): min = Compare(1) maxp=1: minp=1 For i = 2 To 10 If Compare(i) max Then max = compare(i):maxp=i ElseIf Compare(i) point then TEMP=A(i):A(i)=A(point):A(point)=TEMP End if Next i 直接排序程序 中国药科大学 计算机教研室 Visual Basic 程序设计 ub=Ubound(a) Switch=True Do While switch switch=false ub=ub-1 For j=1 to ub If a(j) x,则表明x在A(Left)到A(Mid-1)区 间内,查找区间缩小一半,设置Right=Mid-1 (5)重复执行以上操作 (6)结束循环的条件有两个:已经找到;找不到-LeftRight 例5 查找二分查找 341111059678 x=8 Left Right Mid Left Right Mid RightLeft Mid 231111049678 x=5 Left Right MidMid RightLeft Mid Left Mid Left Mid Left Right 中国药科大学 计算机教研室 Visual Basic 程序设计 Le
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论