vb程序设计教程(潘蕾)vb

上传人:夏** 文档编号:578552838 上传时间:2024-08-24 格式:PPT 页数:79 大小:1.03MB
返回 下载 相关 举报
vb程序设计教程(潘蕾)vb_第1页
第1页 / 共79页
vb程序设计教程(潘蕾)vb_第2页
第2页 / 共79页
vb程序设计教程(潘蕾)vb_第3页
第3页 / 共79页
vb程序设计教程(潘蕾)vb_第4页
第4页 / 共79页
vb程序设计教程(潘蕾)vb_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《vb程序设计教程(潘蕾)vb》由会员分享,可在线阅读,更多相关《vb程序设计教程(潘蕾)vb(79页珍藏版)》请在金锄头文库上搜索。

1、中国药科大学 计算机教研室 Visual Basic 程序设计程序设计第六章第六章 数组数组授课教师:潘 蕾E-Mail: E-Mail: 中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计 掌握数组的定义和使用掌握数组的定义和使用 掌握动态数组的定义和使用掌握动态数组的定义和使用 掌握控件数组的建立和使用掌握控件数组的建立和使用 掌握常用算法掌握常用算法教学要求教学要求2中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计教学内容教学内容教学内容教学内容6.1 6.1 数组的概念数组的概念6.2 6.2 动

2、态数组动态数组6.3 6.3 数组的基本操作数组的基本操作6.4 6.4 控件数组控件数组 6.56.5 数组常用算法数组常用算法3中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.1 6.1 6.1 6.1 数组的概念数组的概念数组的概念数组的概念6.1.0 6.1.0 数组命名与数组元素数组命名与数组元素6.1.1 6.1.1 数组定义数组定义6.1.2 6.1.2 数组的结构数组的结构6.1.3 6.1.3 数组函数及数组语句数组函数及数组语句4中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计输

3、入输入5 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; eEnd Sub数组(下标变量)实现:数组(下标变量)实现:O

4、ption Base 1Private 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 iEnd Sub注:注:利用一个数组来存储输入的一组相关信息,操作简洁、灵利用一个数组来存储输入的一组相关信息,操作简洁、灵活、方便,往往同循环结构结合使用活、方便,往往同循环结构结合使用定义数组定义数组5中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Bas

5、ic 程序设计程序设计 前面所说的变量都是指简单变量,即一个变量名对应一前面所说的变量都是指简单变量,即一个变量名对应一个存储单元,只能存储一个值,各个变量之间无关联。个存储单元,只能存储一个值,各个变量之间无关联。 本章我们要介绍的是一种本章我们要介绍的是一种下标变量下标变量数组数组,是通过一,是通过一个数组名和下标的组合来表示多个值。用一个个数组名和下标的组合来表示多个值。用一个相同的名字相同的名字引引用一组变量的数据。用一组变量的数据。 数组,是数组,是VBVB支持的一种复合结构的数据类型。支持的一种复合结构的数据类型。 数组,是用于保存一组具有数组,是用于保存一组具有相同数据类型相同数

6、据类型的有序的的有序的变量变量的集合的集合。基本概念基本概念6中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.1.0 6.1.0 6.1.0 6.1.0 数组命名与数组元素数组命名与数组元素数组命名与数组元素数组命名与数组元素 命名规则与简单变量相同。命名规则与简单变量相同。 数组名不是代表数组名不是代表某一某一变量,而是变量,而是一组一组变量。变量。 数组元素:数组元素:u由由数数组组名名和和该该元元素素在在数数组组中中的的编编号号(索索引引、下下标标)唯唯一一确确定定,下标是连续的整数。下标是连续的整数。u数组元素的一般形式:数组元素的一般

7、形式: 数组名(下标数组名(下标11,下标,下标2 2,) egeg: a(0),a(1),a(2),a(3),a(4),b(0,0),b(0,1): a(0),a(1),a(2),a(3),a(4),b(0,0),b(0,1) 数组的维数数组的维数( (例例) ):u一维数组一维数组只需一个下标即可唯一确定一个数组元素只需一个下标即可唯一确定一个数组元素u多多维维数数组组有有两两个个或或两两个个以以上上下下标标的的数数组组,每每个个下下标标对对应应一个一个“维维” 7中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.1.1 6.1.1 6.1.

8、1 6.1.1 数组定义数组定义数组定义数组定义 数组必须数组必须先定义后使用先定义后使用。 定定义义数数组组时时,确确定定其其名名称称、数数据据类类型型、维维数数、每每一一维维的的上、下界上、下界。egeg: Dim A(6) As Integer: Dim A(6) As Integer 数数组组定定义义时时,系系统统分分配配连连续续的的内内存存空空间间,用用于于依依次次保保存存所有数组元素。所有数组元素。 固定大小数组与动态数组。固定大小数组与动态数组。固固定定大大小小数数组组:在在定定义义时时就就确确定定数数组组大大小小,在在程程序序运运行行过过程程中中大大小小不不能改变的数组。能改变

9、的数组。动态数组动态数组:在程序运行过程中大小可以改变的数组。:在程序运行过程中大小可以改变的数组。 egeg: Dim A(6) As : Dim A(6) As Integer,BInteger,B() As Integer() As Integer8中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计1 1 1 1、数组说明语句数组说明语句数组说明语句数组说明语句 格式格式 : Public|Private|Static|Dim Public|Private|Static|Dim 数组名数组名( To To1 , To To,)2,) As As

10、 类型类型 说明说明 : 声明关键字决定作用域,见下页声明关键字决定作用域,见下页 TO TO 决决定定了了每每一一维维的的大大小小,下下界界指指下下标标的的最最小小值值,上上界界指指下下标标的的最最大大值值,其其中中 TOTO可可省省略略,此时,默认下界是此时,默认下界是0 0。 egeg: : Dim A(1 to 6) As IntegerDim A(1 to 6) As Integer我我们们习习惯惯于于下下标标是是从从1 1开开始始,可可在在模模块块的的“通通用用”声声明明段段中中使用如下语句使用如下语句 Option Base 1Option Base 1 则在缺省下界的情况下,默

11、认下界是则在缺省下界的情况下,默认下界是1 1。 类型指定数组元素的统一数据类型类型指定数组元素的统一数据类型 9中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计关键字关键字使用位置使用位置作用域作用域PublicPublic在在标准模块标准模块的声明段中的声明段中全局全局PrivatePrivate和和DimDim在在模块的声明段中模块的声明段中模块模块DimDim在在过程中过程中局部局部StaticStatic在在过程中过程中局部、静态局部、静态注意:全局数组、注意:全局数组、 全局符号常量和全局定长字符串只能在标准全局符号常量和全局定长字符串

12、只能在标准模块中定义模块中定义, ,而全局变量可以在窗体模块或标准模块中定义而全局变量可以在窗体模块或标准模块中定义10中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计 Dim A(6) as integer Dim A(6) as integerPrivate Name(1999 to 2002) as string *8Private Name(1999 to 2002) as string *8Dim b(2,1 to 2) as integerDim b(2,1 to 2) as integer 数组元素分别为:数组元素分别为:A(0)A(

13、0)、A(1)A(1)、A(2)A(2)、A(3)A(3)、A(4)A(4)、A(5)A(5)、A(6)A(6),共,共7 7个个 数组元素分别为:数组元素分别为:name(1999) name(1999) 、 name(2000)name(2000)、 name(2001)name(2001)、 name(2002) , name(2002) , 用于保存长度为用于保存长度为8 8的字符串数据。的字符串数据。 数组元素分别为:数组元素分别为:b(0,1)b(0,1),b(0,2)b(0,2),b(1,1)b(1,1),b(1,2)b(1,2),b(2,1)b(2,1),b(2,2) b(2,

14、2) 举例举例11中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计2 2 2 2 、数组的类型、数组的类型、数组的类型、数组的类型可为可为任一任一简单数据类型简单数据类型,若缺省则为变体(,若缺省则为变体(Variant)类型)类型数数组组说说明明语语句句不不仅仅定定义义了了数数组组、分分配配了了存存储储空空间间,还还将将数数组组初始化:初始化:u数值型数组元素初始值为零数值型数组元素初始值为零u变长字符类型数组元素初始值为空字符串变长字符类型数组元素初始值为空字符串u定长字符类型数组元素初始值为指定长度个数的空格定长字符类型数组元素初始值为指定长

15、度个数的空格u布尔型数组元素初始值为布尔型数组元素初始值为“False”u变体类型数组元素初始值为变体类型数组元素初始值为“Empty”12中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计3 3 3 3 、数组的上、下界、数组的上、下界、数组的上、下界、数组的上、下界上、下界表示下标的最大、最小值;上、下界表示下标的最大、最小值;下界下界上界;上界;在在固固定定大大小小数数组组定定义义时时,上上、下下界界是是常常量量或或常常量量表表达达式式,不不得是变量得是变量;上、下界应是整数,若不是,则自动四舍五入。上、下界应是整数,若不是,则自动四舍五入。举

16、例:举例: Dim m as integerDim m as integer Const n=5 as integer Const n=5 as integer Dim a(n) as integer Dim a(n) as integer Dim b(1 to 6.6) as integer Dim b(1 to 6.6) as integer Dim c(1 to 2*3) as integer Dim c(1 to 2*3) as integer Dim d(0 to m) as integer Dim d(0 to m) as integer13中国药科大学中国药科大学 计算机教研室计

17、算机教研室 Visual Basic 程序设计程序设计4 4 4 4 、数组的大小、数组的大小、数组的大小、数组的大小指数组中包含元素的个数指数组中包含元素的个数一维数组元素个数:上界一维数组元素个数:上界- -下界下界+1+1二维数组元素个数:二维数组元素个数: (上界(上界1 1- -下界下界1 1+1+1)* *(上界(上界2 2- -下界下界2 2+1+1)举例:举例: Dim A(6) as integerDim A(6) as integer Dim B(3 Dim B(3,1 to 4) as single1 to 4) as single A A数组的大小数组的大小=6-0+1

18、=7=6-0+1=7B B数组的大小数组的大小(3-0(3-01)(4-(-1)+1)=46=241)(4-(-1)+1)=46=2414中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.1.2 6.1.2 6.1.2 6.1.2 数组的结构数组的结构数组的结构数组的结构 数组的所有元素是按一定数组的所有元素是按一定顺序顺序存储在存储在连续连续的存储单元的。的存储单元的。1.1.一维数组的结构一维数组的结构u一一维维数数组组只只能能表表示示线线性性顺顺序序,相相当当于于一一个个一一维维表表,一一维维数数组组在在内内存存中中存存放放的的次次序序在在

19、形形式式上上与与数数组组的的逻逻辑辑结结构构相相同同,按按下下标标序序号号升升序序排列。排列。 u例:例:Dim A(3) As IntegerDim A(3) As Integeru 逻辑结构逻辑结构:(A(0), A(1), A(2) A(3)(A(0), A(1), A(2) A(3)u 存储结构存储结构:按照下标从小到大依次存储:按照下标从小到大依次存储A(0)A(1)A(2)A(3) 15中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计2 2 2 2 、二维数组的结构、二维数组的结构、二维数组的结构、二维数组的结构u二二维维数数组组的的表

20、表示示形形式式是是由由行行和和列列组组成成的的一一个个二二维维表表,二二维维数数组组的数组元素需要用两个下标来标识,分别表示行号与列号的数组元素需要用两个下标来标识,分别表示行号与列号u例:例:Option base 1Option base 1 Dim Y(3,4) as integer Dim Y(3,4) as integeru逻辑结构:逻辑结构: Y(1,1),Y(1,2),Y(1,3),Y(1,4)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(2,1),Y(2,2),Y(2,3),Y(2,4) Y(3,1),Y(3

21、,2),Y(3,3),Y(3,4) Y(3,1),Y(3,2),Y(3,3),Y(3,4)u存储结构:存储结构: “按列存放按列存放” 16中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计3 3 3 3 、三维数组的结构、三维数组的结构、三维数组的结构、三维数组的结构l三三维维数数组组是是由由行行,列列和和页页组组成成的的三三维维表表。三三维维数数组组也也可可理理解解为为几几页页的的二二维维表表,即即每每页页由由一一张张二二维维表表组组成成,三三维维数数组组的元素是由行号,列号和页号来标识的。的元素是由行号,列号和页号来标识的。l例如:例如:Opt

22、ion Base 1Option Base 1Dim Page(3,3,2) As Integer Dim Page(3,3,2) As Integer l存储结构:存储结构:“逐页逐列逐页逐列”17中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.1.3 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=UBo

23、und(B,2) Print a1;a2;b1;b2;b3; b4结果:结果:0 5 0 3 2 5举例举例: :1 1、返回上、下界函数:、返回上、下界函数:上界:上界:UBoundUBound( (数组名数组名,dd)下界:下界:LBoundLBound( (数组名数组名,dd)说明:说明:d d代表维数。省略时表示返回第一维的值。代表维数。省略时表示返回第一维的值。18中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计格式:格式: Erase a1,a2,.Erase a1,a2,.功能:功能:对普通数组(固定大小数组)重新初始化(按数组类对普

24、通数组(固定大小数组)重新初始化(按数组类型给元素赋初值);对型给元素赋初值);对动态数组动态数组进行存储空间释放。进行存储空间释放。例:例:p.89p.89Option Base 1Private 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 Sub2 2、 Erase Erase 初始化数组语句初始化数组语句19中国药科大学中国药科大

25、学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计格式格式: For Each Element In For Each Element In 语句块语句块Exit ForExit For语句块语句块 Next ElementNext Element功能功能:依次(存储次序)处理每一个数组元数,直到数组结束。:依次(存储次序)处理每一个数组元数,直到数组结束。说明说明: ElementElement是是VariantVariant变量,它逐个地代表数组中的每一个变量,它逐个地代表数组中的每一个变量。变量。3 3、 For Each-Next For Each-Next 数组

26、循环结构数组循环结构20中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计Option Base 1Private 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 VEnd Sub处理顺序为该数组的存储

27、顺序处理顺序为该数组的存储顺序按列按列!举例举例21中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.2 6.2 6.2 6.2 动态数组动态数组动态数组动态数组定义:在程序运行过程中,可重新定义大小的数组。定义:在程序运行过程中,可重新定义大小的数组。动态数组的说明分两步:动态数组的说明分两步: Dim Dim 数组名()数组名()as as 类型类型 在变量说明部分在变量说明部分 ReDimReDim Preserve Preserve (维界维界定义定义) ) 在过程中在过程中Private Sub Form_Click() Dim A(

28、) As Integer ,B( ) As Integer 说明整型的动态数组说明整型的动态数组A A、B B Dim x as Integer ReDim A(4) 重新说明数组重新说明数组A, ,分配分配4 4个整型数的内存空间个整型数的内存空间 x=Val(Text1.text) ReDim B(x) 重新说明数组重新说明数组B,按照输入的大小分配空间,按照输入的大小分配空间 .End Sub注意:注意: - - 用用DimDim语句声明过的数组,只是一个空数组,系统并没有给它分配内存语句声明过的数组,只是一个空数组,系统并没有给它分配内存空间,此时,不能对数组元素进行存取操作,否则出错

29、。空间,此时,不能对数组元素进行存取操作,否则出错。必须用必须用ReDimReDim语句语句重新重新定义其大小,系统才给它分配内存,用户才能对此数组元素进行操作。定义其大小,系统才给它分配内存,用户才能对此数组元素进行操作。 - - 重定义时,维界定义中可以是有了确定值的重定义时,维界定义中可以是有了确定值的变量变量22中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计 重新定义动态数组时,重新定义动态数组时,不能改变数据类型不能改变数据类型,RedimRedim语句的语句的As As TypeType一般省略,若不省略也必须和数组说明语句一致。一般

30、省略,若不省略也必须和数组说明语句一致。 如果如果RedimRedim重定义的数组不存在,则相当于一个说明语句,系重定义的数组不存在,则相当于一个说明语句,系统会动态创建一个新数组,并分配存储空间。统会动态创建一个新数组,并分配存储空间。 在过程中可以多次使用在过程中可以多次使用ReDimReDim来改变数组的大小,也可改变数来改变数组的大小,也可改变数组的维数。(例组的维数。(例1 1) 每次使用每次使用ReDimReDim语句都会使原来数组中的值丢失,可以在语句都会使原来数组中的值丢失,可以在ReDimReDim语句后加语句后加PreservePreserve参数来保留数组中的数据,但使用

31、参数来保留数组中的数据,但使用PreservePreserve只只能改变最后一维的大小,前面几维大小不能改变。(例能改变最后一维的大小,前面几维大小不能改变。(例2 2)说说 明明23中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计Option base 1Dim Dynarry() as integerDim x as integer,y as integerDynarry(1)=1 Redim Dynarry(9)Dynarry(1)=1Print Dynarry(1)x=2:y=4Redim Dynarry(x,y)Dynarry(1,1)=

32、1Print Dynarry(1,1)Erase DynarryDynarry(1,1)=1给一维数组元素赋值给一维数组元素赋值给二维数组元素赋值给二维数组元素赋值举例举例1 1非法语句,出错非法语句,出错非法语句,出错非法语句,出错24中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计Option ExplicitOption Base 1Private Sub Form_Click() Dim i As Integer, a() As Integer ReDim a(4) For i = 1 To 4 a(i) = i Print a(i); N

33、ext i Print ReDim Preserve a(6) a(5) = 5 a(6) = 6 For i = 1 To 6 Print a(i); Next iEnd Sub如果省去如果省去 Preserve,会会怎样?怎样?举例举例2 225中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计举例举例3:找出:找出10001000以内的所有完数。所谓完数,是指它的所有的以内的所有完数。所谓完数,是指它的所有的质因子之和等于它本身的数,如质因子之和等于它本身的数,如6=1+2+36=1+2+3。l 解题思路:解题思路: 第一步:找出确定一个数是完

34、数的方法;第一步:找出确定一个数是完数的方法; 第二步:从第二步:从1 1到到10001000依次判断。依次判断。l 算法实现算法实现: : 两层循环:两层循环: 内内层层循循环环用用于于找找出出某某数数 m m 的的所所有有因因子子并并相相加加求求和和,并并在在循循环结束后依据因子和是否与该数相等来判断该数是否是完数;环结束后依据因子和是否与该数相等来判断该数是否是完数; 外层循环外层循环则用于穷举所有则用于穷举所有10001000以内的整数以内的整数。26中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计Private Sub Form_Clic

35、k() 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 iEnd Sub注意注意s赋初值的位置赋初值的位置27中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计真题例:真题例:找出找出10001000以内的所有完数并以指定的格式在列表框中输出。所以内的所有完数并以指定的格式在列表框中输出。所谓完数,

36、是指它的所有的因子之和等于它本身的数,如谓完数,是指它的所有的因子之和等于它本身的数,如6=1+2+36=1+2+3。 解题思路:解题思路:u第一步:找出确定一个数是完数第一步:找出确定一个数是完数 的方法;的方法;u第二步:从第二步:从1 1到到10001000依次判断。依次判断。 算法实现算法实现: : 两层循环:两层循环: 内内层层循循环环用用于于找找出出某某数数 m m 的的所所有有因因子子, ,相相加加求求和和,并并在在循循环环结结束束后后依依据据因因子子和和是是否否与与该该数数相相等等来来判判断断该该数数是是否否是是完完数数,如果是则按指定格式输出;如果是则按指定格式输出; 外层循

37、环外层循环则用于穷举所有则用于穷举所有10001000以内的整数以内的整数。28中国药科大学中国药科大学 计算机教研室计算机教研室 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 是因子,保存进数组并累加求和是因子,保存进数组并累加求和

38、s = s + j End If Next j If s = i Then 是完数,按指定格式输出是完数,按指定格式输出 End If Next iEnd Sub注意注意s、k赋初值的位置赋初值的位置: k = 0k = k + 1ReDim Preserve a(k)a(k) = jstr1 = CStr(i) & =For j = 1 To k str1 = str1 & CStr(a(j) & +Next jList1.AddItem left(str1,len(str1)-1)29中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.3 6.

39、3 6.3 6.3 数组的基本操作数组的基本操作数组的基本操作数组的基本操作6.3.1 6.3.1 给数组元素赋值给数组元素赋值6.3.2 6.3.2 数组的输入数组的输入6.3.3 6.3.3 数组的输出数组的输出30中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.3.1 6.3.1 给数组元素赋值给数组元素赋值1、用赋值语句进行赋值、用赋值语句进行赋值 l 可以采用赋值语句对数组元素直接赋值,如:可以采用赋值语句对数组元素直接赋值,如: Dim City(100) As StringDim Test(4, 5) As IntegerTest

40、(2, 3) = 87City(0) = NanJingCity(36) = ShangHai31中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.3.1 6.3.1 给数组元素赋值给数组元素赋值2、通过循环进行赋值、通过循环进行赋值l 一一维维数数组组可可通通过过一一重重计计数数循循环环给给数数组组的的每每个个元元素素赋值赋值l 多多维维数数组组可可通通过过多多重重计计数数循循环环给给数数组组的的每每个个元元素素赋值赋值l 可可使使用用InputBox函函数数结结合合循循环环结结构构在在程程序序的的运运行行过程中给数组元素赋值过程中给数组元素赋

41、值32中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计2 2、通过循环进行赋值、通过循环进行赋值l 举例:举例:Option Base 1Private Sub Form_Click() Dim a(6) As Integer,b(2, 3) As Integer,i As Integer,j As Integer For i = 1 To 6 a(i) = InputBox(请输入入a( & i & ), 数数组a赋值) Print a(i); Next i Print For i = 1 To 2 For j = 1 To 3 b(i, j)

42、= Int(Rnd * 90) + 10 Print b(i, j); Next j Print Next iEnd Sub查看程序查看程序33中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计格式:格式:变体变量名变体变量名|变体类型的动态数组名变体类型的动态数组名=Array(n1,n2,.)功能:功能:将一个变体型变量创建成为一个一维数组,并包含指定将一个变体型变量创建成为一个一维数组,并包含指定的元素。元素的引用方式与一般数组一样。的元素。元素的引用方式与一般数组一样。注意:注意:Array赋值赋值函数函数只能给变体型变量只能给变体型变量或动

43、态数组或动态数组赋值赋值。不能不能给其他类型的变量及数组赋值。给其他类型的变量及数组赋值。3*、Array赋值赋值函数函数Option Base 1Private 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) 出错

44、出错End Sub?改为?改为C(1)C(1)是否可以是否可以34中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计 将将一一个个数数组组内内的的整整个个内内容容赋赋给给另另一一个个数数组组或或变变体体变变量量。赋赋值值后后,赋赋值值符符左左边边的的数数组组的的维维数数、每每一一维维的的下下界界和和上上界界都都和和赋赋值符右边的数组相同。值符右边的数组相同。规则:规则:(1)赋值符左边的数组是动态数组)赋值符左边的数组是动态数组(2)赋值符两边数组的数据类型必须相同)赋值符两边数组的数据类型必须相同用数组给变体变量赋值时,注意:用数组给变体变量赋值时

45、,注意:(1)赋值符右边数组的类型不可以是长度固定的字符串类型)赋值符右边数组的类型不可以是长度固定的字符串类型(2)变体变量被赋值后,就被创建成一个包含数组的变体变量)变体变量被赋值后,就被创建成一个包含数组的变体变量(3)变变体体变变量量所所包包含含数数组组的的维维数数、每每一一维维的的下下界界和和上上界界以以及及元元素的类型都和赋值符右边的数组相同。素的类型都和赋值符右边的数组相同。例例P934*、数组赋值、数组赋值35中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.3.2 6.3.2 数组的输入数组的输入1.通过通过InputBox函数

46、输入函数输入l输入少量数据时可通过输入少量数据时可通过InputBox函数输入,例如:函数输入,例如: Dim Score(3, 4) As SingleFor i = 1 To 3For j = 1 To 4Score(i, j) = InputBox(“输入入第第” & i & “个个学学生生的的第第” & j & 门课成成绩:) Next j Next i36中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.3.2 6.3.2 数组的输入数组的输入2通过文本框输入通过文本框输入 l对大批量的数据输入,采用文本框输入效率更高。对大批量的数据输

47、入,采用文本框输入效率更高。输输入入时时可可以以采采用用Instr函函数数获获取取分分隔隔符符的的位位置置,将将文本框内容分割后分别给数组元素赋值文本框内容分割后分别给数组元素赋值.*采采用用Split函函数数将将更更加加方方便便。 Split函函数数返返回回一一个个从从零零开开始始的的一一维维数数组组,赋赋值值号号左左边边必必须须是是一一个个变变体型变量体型变量.Instr举例举例Split举例举例37中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计l补充补充:通过文本框给二维数组元素赋值:通过文本框给二维数组元素赋值38中国药科大学中国药科大学

48、 计算机教研室计算机教研室 Visual Basic 程序设计程序设计Option ExplicitOption Base 1Private Sub Command1_Click() Dim s As String, pos As Integer Dim j As Integer, k As Integer Dim a(3, 3) As Integer, i As Integer s = Text1 For i = 1 To 3 For j =1 To 3 k = 0 pos = pos + 1 Do While Mid(s, pos, 1) And pos = Len(s) pos = po

49、s + 1 k = k + 1 Loop a(i, j) = Mid(s, pos - k, k) Text2 = Text2 & CStr(a(i, j) & Next j Text2 = Text2 & vbCrLf Next iEnd Sub回车换行符,相当于回车换行符,相当于Chr(13)&Chr(10)注意:文本框的注意:文本框的Multiline属性设为属性设为True39中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.3.3 6.3.3 6.3.3 6.3.3 数组的输出数组的输出数组的输出数组的输出用用PrintPrint方法显

50、示在窗体或图片框上方法显示在窗体或图片框上赋值给文本框赋值给文本框的的TextText属性,在文本框中显示属性,在文本框中显示调试时,调用调试时,调用DebugDebug的的PrintPrint方法在方法在“立即立即”窗口中显示窗口中显示注:注: 一维数组用计数循环结合数组元素输出语句进行输出。一维数组用计数循环结合数组元素输出语句进行输出。 二维数组用二重计数循环结合数组元素输出语句,外二维数组用二重计数循环结合数组元素输出语句,外层循环控制行下标变化,内层循环控制列下标变化层循环控制行下标变化,内层循环控制列下标变化40中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Ba

51、sic 程序设计程序设计一维数组的赋值与输出:一维数组一维数组的赋值与输出:一维数组a(20) ,要求按照每行要求按照每行6个元素的个元素的格式输出。数组元素为格式输出。数组元素为100-200之间的随机数。之间的随机数。Option Base 1Private Sub Form_Click() Dim a(20) As Integer Dim i As Integer, j As Integer Randomize For i = 1 To 20 a(i) = Int(101 * Rnd) + 100 Next iEnd Sub For i = 1 To 20 Print a(i) ; Ne

52、xt iIf i Mod 6=0 Then Print举例举例1 1变化41中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计二维数组的赋值与输出:二维数组的赋值与输出:3行行4列,数组元素为列,数组元素为2050随机数随机数Option ExplicitOption Base 1Private Sub Form_Click() Dim i As Integer, j As Integer Dim a(3, 4) As Integer Randomize For i = 1 To 3 For j = 1 To 4 a(i, j) = Int(Rnd

53、* 31 + 20) Next j Next i For i = 1 To 3 For j = 1 To 4 Print a(i, j) ; Next j Print Next iEnd Sub二维数组引用必须用二重循环实现二维数组引用必须用二重循环实现程序分析:程序分析:程序执行时,计数程序执行时,计数变量i和和j的的变化为:为:i=1时,j从1变化到4,结束内层循环,i变成2i=2时,j从1变化到4,结束内层循环,i变成3i=3时,j从1变化到4,结束内层循环,i变成4结束外层循环。结束外层循环。循环变量(i , j)的变化过程为(1,1)()(1,2)()(1,3)()(1,4)(2,1

54、)()(2,2)()(2,3)()(2,4)(3,1)()(3,2)()(3,3)()(3,4)正好和二维数组引用的下标一致。正好和二维数组引用的下标一致。举例举例2 2For i = 1 To 3 For j = 1 To 4 Picture1.Print a(i, j) ; Next j Picture1.Print Next iFor i = 1 To 3 For j = 1 To 4 s=s & a(i, j) Next j s=s & Chr(13) & Chr(10)Next IText1.Text=s42中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic

55、 程序设计程序设计补充:数组元素的引用补充:数组元素的引用补充:数组元素的引用补充:数组元素的引用程序中可以像使用普通变量一样引用数组元素。程序中可以像使用普通变量一样引用数组元素。引用形式:数据名(下标)引用形式:数据名(下标) 注注意意:在在引引用用数数组组元元素素时时,元元素素的的下下标标一一定定要要在在定定义义的的上上下界范围之内,否则下界范围之内,否则“数组越界数组越界”出错。出错。注注意意:在在声声明明语语句句中中的的A A(6 6)是是数数组组说说明明符符,而而在在程程序序其其他语句出现的他语句出现的A A(6 6)是一个)是一个数组元素数组元素。43中国药科大学中国药科大学 计

56、算机教研室计算机教研室 Visual Basic 程序设计程序设计真题例真题例: :下列程序完成在窗体上输出二维数组每行元素之和。回答问题:下列程序完成在窗体上输出二维数组每行元素之和。回答问题: 1 1、程序有没有错?、程序有没有错? 2 2、如果有错在哪里?、如果有错在哪里?Option Base 1Private Sub Form_Click() Dim A(4, 5) As Integer Dim i As Integer, j As Integer Dim sum As Integer For i = 1 To 4 For j = 1 To 5 A(i, j) = Int(101 *

57、 Rnd) + 100 Print A(i, j); Next j Print Next i Print For i = 1 To 4 For j = 1 To 5 sum = sum + A(i, j) Next j Next i Print 第第; i; 行元素之和为:行元素之和为:; sumEnd SubSum=0Print 第第; i; 行元素之和为:行元素之和为:; sum程序执行结果界面程序执行结果界面44中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计有关二维数组的常见问题:有关二维数组的常见问题:有关二维数组的常见问题:有关二维数组

58、的常见问题: 转置转置 求对角线元素之和求对角线元素之和 求周边元素之和求周边元素之和 求上、下三角形元素之和求上、下三角形元素之和 求鞍点、最大、最小元素求鞍点、最大、最小元素 二维数组相乘二维数组相乘45中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计Option Base 1Private Sub Form_Click() Dim i As Integer, j As Integer, a(3, 4) As Integer Randomize For i = 1 To 3 For j = 1 To 4 a(i, j) = Int(Rnd *

59、31 + 20) Print a(i,j); Next j Print Next IEnd Sub真题例:真题例:产生一个产生一个3 3行行4 4列的矩阵,数据为列的矩阵,数据为2020,5050之间的随机数,然后将之间的随机数,然后将矩阵转置输出。矩阵转置输出。For i = 1 To 4 For j = 1 To 3 Print a(j ,i); Next j Print Next iFor j= 1 To 4 For i= 1 To 3 Print a( i , j); Next i PrintNext j思考题:思考题:求求n n阶方阵的转置阶方阵的转置矩阵,并输出?矩阵,并输出?Di

60、m V As Variant , h As IntegerFor Each V In a Print V; h=h+1 If h mod 3 =0 PrintNext V46中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计1 1、分别求一个分别求一个3*33*3二维数组的主、付对角线元二维数组的主、付对角线元素之和。素之和。2 2、求二维数组周边元素之和。、求二维数组周边元素之和。练练 习习47中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.4 6.4 6.4 6.4 控件数组控件数组控件数组控件数

61、组6.4.1 6.4.1 控件数组的基本概念控件数组的基本概念6.4.2 6.4.2 控件数组的建立控件数组的建立6.4.3 6.4.3 控件数组的使用控件数组的使用 LoadLoad语句语句 UnloadUnload语句语句48中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.4.1 6.4.1 6.4.1 6.4.1 基本概念基本概念基本概念基本概念 由一组具有由一组具有相同名称相同名称的的同类型同类型控件组成。控件组成。 控件数组中的每个控件都由其控件数组中的每个控件都由其下标属性下标属性- -IndexIndex 标识。标识。 即:控件数

62、组名(下标)即:控件数组名(下标) 如,如, Command1(0),Command1(1),Command1(2) 控控件件数数组组适适用用于于若若干干个个控控件件执执行行的的操操作作相相似似的的场场合合,控控件件数数组组中中的的每每一一个个控控件件元元素素可可有有自自己己独独立立的的属属性性设设置置, ,但但共共享享同同一一个个事事件件过过程程,即即无无论论是是控控件件数数组组中中的的哪哪一一个个控控件件响响应应用用户户的的事事件件,都都触触发发同同一一事事件件过过程程,但但相相对对于于简简单单控控件件, ,事事件件过过程增加了程增加了IndexIndex参数,由其指明具体响应的控件。参数

63、,由其指明具体响应的控件。 注意:注意:控件数组的第一个下标为控件数组的第一个下标为0 0 优点:优点:使用控件数组编写代码简单、易于维护使用控件数组编写代码简单、易于维护49中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计例如:在窗体上有一个包含四个命令按钮的控件数组。这例如:在窗体上有一个包含四个命令按钮的控件数组。这4 4个命令个命令按钮的名称相同,均为按钮的名称相同,均为Command1 Command1 ,系统通过下标系统通过下标-Index-Index属性,属性,区别区别4 4个不同的控件:个不同的控件:Command1(0)Comma

64、nd1(0),Command1(1)Command1(1),Command1(2)Command1(2),Command1(3)Command1(3)。 这个由这个由4 4个按钮组成的命令按钮控件数组,具有相同的事件过个按钮组成的命令按钮控件数组,具有相同的事件过程,由参数程,由参数IndexIndex决定,到底是哪个按钮被触发。在事件过程中,决定,到底是哪个按钮被触发。在事件过程中,应根据应根据IndexIndex参数,分别进行不同的操作。参数,分别进行不同的操作。Private Sub Command1_Click(Index as integer) Select case indexCa

65、se 0 Case 1 End selectEnd Sub50中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计1. 1. 创建同名控件创建同名控件 在窗体中放置一组控件(同类型),确定某个控件为第一在窗体中放置一组控件(同类型),确定某个控件为第一个元素(可将其个元素(可将其Index属性设为属性设为0)。)。 按顺序将其它控件的按顺序将其它控件的Name(名称)属性改成第一个控件名名称)属性改成第一个控件名称(同名)。称(同名)。系统提示系统提示“已有一个控件为已有一个控件为*,创建一个控件数组吗?,创建一个控件数组吗?”,若第一个控件的,若第一

66、个控件的Index属性已设为属性已设为0,则不出现提示。,则不出现提示。6.4.2 6.4.2 6.4.2 6.4.2 建立控件数组建立控件数组建立控件数组建立控件数组51中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计2. 2. 复制现存控件复制现存控件 在窗体中放置一个控件,设置好相应的属性在窗体中放置一个控件,设置好相应的属性 选定该控件,单击选定该控件,单击“复制复制”按钮按钮 单击单击“粘贴粘贴”按钮按钮 系系统统提提示示”已已有有一一个个控控件件为为*,创创建建一一个个控控件件数数组组吗吗?”?” 单击单击“是是”按钮按钮观察控件观察控

67、件Index属性属性,系统给每个数组控件标明唯一的索引号,系统给每个数组控件标明唯一的索引号,即为该对象的即为该对象的IndexIndex属性属性( (下标)。下标)。52中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计建立两个控件数组:建立两个控件数组:建立两个控件数组:建立两个控件数组:Label1Label1Label1Label1和和和和Text1Text1Text1Text153中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计Private Sub Command1_Click() Dim i

68、 As Integer, score As Single For i = 0 To 5 score = score + Val(Text1(i) Next i score = score / 6 Text2.Text = Format(score, #.#)End SubPrivate Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer) If KeyAscii = 13 Then If Index = 5 Then Command1.SetFocus Else Text1(Index + 1).SetFocus End If En

69、d IfEnd SubPrivate Sub Form_Load() Dim i As Integer For i = 0 To 5 Text1(i).Text = Label1(i).Caption = 裁判裁判 & i + 1 Next iEnd Sub54中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计3.3.运行时,用语句添加、删除控件数组中的控件运行时,用语句添加、删除控件数组中的控件Load Load 语句语句 格式格式 load object(index) load object(index) 功能功能 在程序运行时,向控件数组中添加

70、控件。在程序运行时,向控件数组中添加控件。UnloadUnload语句语句 格式格式 unload object(index) unload object(index) 功能功能 在程序运行时,删除控件数组中的控件。在程序运行时,删除控件数组中的控件。明白了吗?还明白了吗?还是上机验证一是上机验证一下吧!下吧!建立的步骤如下:建立的步骤如下: 在窗体上画出某控件,设置该控件的在窗体上画出某控件,设置该控件的IndexIndex值为值为0 0,表示该,表示该控件为数组。控件为数组。 在编程时通过在编程时通过LoadLoad方法添加其余若干个元素,也可以通过方法添加其余若干个元素,也可以通过Unl

71、oadUnload删除某个删除某个添加的添加的元素。元素。 每个添加的控件数组通过每个添加的控件数组通过Left Left 和和TopTop属性,确定其在窗体属性,确定其在窗体上的位置,并将上的位置,并将VisibleVisible设置为设置为TrueTrue。例例55中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计6.5 6.5 6.5 6.5 数组常用算法数组常用算法数组常用算法数组常用算法 求数组元素的最大值及其下标 交换数组元素 数组元素的插入与删除 排序算法 选择法排序 冒泡法排序 查找算法 顺序查找 二分查找56中国药科大学中国药科大学

72、 计算机教研室计算机教研室 Visual Basic 程序设计程序设计Option Base 1Private Sub Form_click() Dim Compare(10) As Integer, i As Integer Dim max As Integer, min As Integer,maxp as integer ,minp as integer Randomize For i = 1 To 10 Compare(i) = Int(90 * Rnd) + 10 Print Compare(i); Next i Print Print 最大数是最大数是:; max; 下标是下标是;

73、 maxp Print 最小数是最小数是:; min; 下标是下标是; minpEnd Submax = Compare(1): min = Compare(1)maxp=1: minp=1For i = 2 To 10 If Compare(i) max Then max = compare(i):maxp=i ElseIf Compare(i) min Then min = compare(i):minp=i End IfNext i【例例6.96.9】 : :产生产生1010个两位数,从中找出最大值个两位数,从中找出最大值 、最小值、最小值57中国药科大学中国药科大学 计算机教研室计算机

74、教研室 Visual Basic 程序设计程序设计例例2 2 交换数组元素交换数组元素 【例例6.116.11】将将下下列列数数组组元元素素进进行行逆逆序序置置换换,逆逆序序置置换换的的方方法法是是将将数数组组的的第第一一个个元元素素与与最最后后一一个个元元素素交交换换,第第二二个元素与倒数第二个元素交换,依次类推。个元素与倒数第二个元素交换,依次类推。查看程序查看程序58中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计例例3 3 数组元素的插入与删除数组元素的插入与删除1 1数组元素的插入数组元素的插入【例例6.126.12】将将1919插入到以

75、下有序数列中。插入到以下有序数列中。l分分析析:插插入入时时首首先先查查找找插插入入位位置置,本本例例应应该该为为第第一一个个大大于于1919的的数数所所在在的的位位置置,然然后后将将此此位位置置之之后后的的所所有有元元素素向向后后移移动动空空出出插插入位置。需要注意的是移动的顺序必须从后向前移动。入位置。需要注意的是移动的顺序必须从后向前移动。查看程序查看程序59中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计2 2数组元素的删除数组元素的删除【例例6.136.13】将下列数列中值为将下列数列中值为1919的元素删除的元素删除l分分析析:数数组组

76、元元素素删删除除过过程程与与插插入入类类似似,也也是是要要首首先先确确定定删删除除元元素素的的位位置置,然然后后将将删删除除位位置置以以后后的的所所有有元元素素向向前前移移动动覆覆盖盖被被删删除元素,注意移动顺序与插入时相反。除元素,注意移动顺序与插入时相反。查看程序查看程序例例例例3 3 3 3 数组元素的插入与删除数组元素的插入与删除数组元素的插入与删除数组元素的插入与删除60中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计分析分析:先将先将N个数存入数组个数存入数组A(N), 第一轮比较,将第一轮比较,将A(1) 与与A(2) 、A(3) 、

77、A(4) A(N)依次比较,依次比较,若若A(1)小,则交换,第一轮比较完毕,小,则交换,第一轮比较完毕,N个数中个数中最大数最大数存放到存放到A(1); 第二轮比较,将第二轮比较,将A(2)与与A(3)、A(4)A(N)依次比较,结束后依次比较,结束后,N个数中个数中第二大数第二大数存放到存放到A(2)中;中; 第三轮比较,将第三轮比较,将A(3)与)与A(4)、)、A(5)A(N)依次比较,依次比较,完毕后,完毕后,N个数中个数中第三大数第三大数存放到存放到A(3)中;中; 第第N-1轮比较,轮比较,A(N-1)与与A(N)进行比较;完毕后,进行比较;完毕后,A(N-1)中存放中存放第二小

78、的数,显然第二小的数,显然A(N)中是中是最小最小的数。的数。 这样这样,数组数组A中的中的N个元素经过个元素经过N-1轮扫视,按从大到小的顺序排轮扫视,按从大到小的顺序排列。列。例例例例4 4 4 4 排序排序排序排序选择法排序(设从大到小排序)选择法排序(设从大到小排序)选择法排序(设从大到小排序)选择法排序(设从大到小排序)61中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计第二轮比较:第二轮比较:5 3 45 1 45 1 25 1 2 3第三轮比较:第三轮比较:5 45 4 3 35 45 4 1 15 45 4 1 2 1 2第四轮比较

79、:第四轮比较:5 4 35 4 35 4 35 4 3 1 1 实例说明实例说明 :设无序数据为设无序数据为1 1、3 3、2 2、5 5、4 4,共有共有5 5个元素,个元素,进行进行5-1=45-1=4轮比较。轮比较。4 4次比较情况如下:次比较情况如下:第一轮比较:第一轮比较:A(1) A(2) A(3) A(4) A(5) 2 5 4 1 5 4 1 2 4 1 2 3 1 2 3 4 135332545 12233441223312262中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计For i=1 to N-1 For j= i+1 t

80、o N If A(i) A(j) Then TEMP=A(i) A(i)=A(j) A(j)=TEMP End If Next jNext i 选择排序程序选择排序程序 i i 既控制外层循环执行的次既控制外层循环执行的次数数, ,又可作为被比较数的下标又可作为被比较数的下标 j j 既控制内层循环执行的次既控制内层循环执行的次数数, ,又可作为比较数的下标又可作为比较数的下标 63中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计 分析分析 : 第一轮比较:将第一轮比较:将A(1)和)和A(2)比较,若比较,若A(1)A(2)则交换这两个数组元素的

81、值,否则不交换;然后再用则交换这两个数组元素的值,否则不交换;然后再用A(2)和)和A(3)比较,处理方法相同;比较,处理方法相同;以此类推,直到以此类推,直到A(N-1)和)和A(N)比较后,这时比较后,这时A(N)中就存放了中就存放了N个数中个数中最小最小的数。的数。 第第二二轮轮比比较较:将将A(1)和和A(2)、A(2)和和A(3),A(N-2)和和A(N-1)依依次次比比较较,处处理理方方法法和和第第一一轮轮相相同同,这这一一轮比较结束后,轮比较结束后,A(N-1)中就存放了中就存放了N个数中个数中第二小第二小的数。的数。 第第N-1轮轮比比较较:将将A(1)和和A(2)进进行行比比

82、较较,处处理理同同上上,则则A(2)中)中存放了第二大的数,存放了第二大的数,A(1)中显然是中显然是最大最大的数。的数。 这样这样,经过经过N-1轮扫视,数组轮扫视,数组A中的中的N个元素按从大到小的顺个元素按从大到小的顺序排列。序排列。例例例例4 4 4 4 排序排序排序排序冒泡法排序(设从大到小排序)冒泡法排序(设从大到小排序)冒泡法排序(设从大到小排序)冒泡法排序(设从大到小排序)64中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计第一论扫视:第一论扫视: 2 5 43 5 43 2 43 2 5 3 2 5 4第二轮扫视:第二轮扫视: 5

83、 4 13 4 13 5 13 5 4 1第三轮扫视:第三轮扫视: 4 2 15 2 15 4 2 1第四轮扫视:第四轮扫视: 3 2 15 3 2 1 实例说明实例说明 :设无序数据为设无序数据为1 1、3 3、2 2、5 5、4 4,共有共有5 5个元个元素,进行素,进行5-1=45-1=4轮扫视。轮扫视。4 4次扫视情况如下:次扫视情况如下:13254 1 1 1 132252423534354465中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计For i=1 to n-1 For j=1 to n-i If a(j) a(j+1) The

84、n TEMP=A(j) : A(j)=A(j+1):A(j+1)=TEMP End If Next jNext i 冒泡排序程序冒泡排序程序 i i 只控制外层循环执行的次数只控制外层循环执行的次数j j 既控制内层循环执行的次既控制内层循环执行的次数数, ,又可作为比较数的下标又可作为比较数的下标 66中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计补充:直接排序法补充:直接排序法补充:直接排序法补充:直接排序法选选择择排排序序法法的的改改进进,每每轮轮扫扫视视,只只交交换换一一次次数数据据A(iA(i)仅与其后序元素中最大的元素交换。仅与其后序

85、元素中最大的元素交换。实实现现:增增设设一一个个pointpoint变变量量,记记录录本本轮轮最最大大元元素素的的下下标标。在在每每轮轮扫扫视视开开始始时时,先先设设初初值值为为i i,然然后后让让A A(pointpoint)依依次次与与其其后后元元素素比比较较,当当比比某某元元素素小小时时,将将该该大大元元素素的的下下标标赋赋给给pointpoint,即让,即让A A(pointpoint)指向本轮大的元素。)指向本轮大的元素。当每轮扫视结束后,比较当每轮扫视结束后,比较i i与与point point 的值,若不同,说明的值,若不同,说明 A A( i i) 中中 不不 是是 本本 轮轮

86、 的的 最最 大大 元元 素素 , 则则 交交 换换 A A( i i) 与与A A(pointpoint)中的元素,否则不交换。)中的元素,否则不交换。 分析分析 :67中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计For i=1 to N-1 point=i For j= i+1 to N If A(point) A(j) Then point=j Next j If i point then TEMP=A(i):A(i)=A(point):A(point)=TEMP End ifNext i 直接排序程序直接排序程序 68选择法:逐个比较,

87、逆序交换选择法:逐个比较,逆序交换冒泡法:两两比较,逆序交换冒泡法:两两比较,逆序交换区别区别70Private Sub Form_Click() Dim search(10) As Integer, i As Integer Dim S As Integer Randomize For i = 1 To 10 search(i) = Int(Rnd * 100) + 100 Print search(i); Next i Print S = InputBox(输入要查找的数输入要查找的数) For i = 1 To 10 If search(i) = S Then Exit For Next

88、 i If i = 10 Then Print 要找的数是要找的数是Search(; i; ) Else Print 没找到!没找到! End IfEnd Sub 顺序查找顺序查找 分析分析 :所谓顺序查找,所谓顺序查找,就是将要查找内容与一就是将要查找内容与一组数据中的每个元素,组数据中的每个元素,依次进行比较,最终得依次进行比较,最终得到所要查找内容到所要查找内容“存在存在”或或“不存在不存在”的结论。的结论。例例例例5 5 5 5 查找查找查找查找71中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计 分析分析 :二分查找是一种快捷有效的查找方

89、法,使用二分查找二分查找是一种快捷有效的查找方法,使用二分查找的前提是数据序列已的前提是数据序列已排好序排好序。 假设有假设有n个数已经按照从小到大的顺序排列,并存放在数个数已经按照从小到大的顺序排列,并存放在数组组A中,设中,设Left为查找区间的下界为查找区间的下界下标,初值为下标,初值为1;Right为为查找区间的上界,初值为查找区间的上界,初值为n;设需要查找的数为设需要查找的数为x;二分查找的二分查找的算法如下:算法如下:(1)求出查找区间的中间位置)求出查找区间的中间位置Mid=Int(Left+Right)/2)(2)若)若A(Mid)=x,则找到,结束比较则找到,结束比较(3)

90、若)若A(Mid)x,则表明则表明x在在A(Left)到到A(Mid-1)区区间内,查找区间缩小一半,设置间内,查找区间缩小一半,设置Right=Mid-1(5)重复执行以上操作重复执行以上操作(6)结束循环的条件有两个:已经找到;找不到)结束循环的条件有两个:已经找到;找不到-LeftRight例例5 5 查找查找二分查找二分查找72341111059678x=8LeftRightMidLeftRightMidRightLeftMid231111049678x=5LeftRightMidMidRightLeftMidLeftMidLeftMidLeftRight73中国药科大学中国药科大学

91、计算机教研室计算机教研室 Visual Basic 程序设计程序设计 Left = LBound(a) Right = UBound(a) x = InputBox(请输入要查找的数据请输入要查找的数据) Do While Left = Right Mid = Int(Left + Right) / 2) If a(Mid) = x Then Exit Do ElseIf a(Mid) x Then Left = Mid + 1 ElseRight = Mid - 1 End If Loop If Left = A And Ch = Z Then Idx = Asc(Ch) - Asc(A)

92、A(Idx) = A(Idx) + 1 End IfNext I For I = 0 To 25 If A(I) 0 Then Js = Js + 1 Text2 = Text2 & Chr(I + Asc(A) & : & Str(A(I) & If Js Mod 5 = 0 Then Text2 = Text2 & Chr(13) & Chr(10) End If Next I 控制打印每行统控制打印每行统计字符的个数计字符的个数转换为大写字符转换为大写字符求该字符与求该字符与“A”A”的的间间隔位置,以此作为下标隔位置,以此作为下标76中国药科大学中国药科大学 计算机教研室计算机教研室

93、Visual Basic 程序设计程序设计补充:补充: 将一个数列中的重复数删除将一个数列中的重复数删除算法分析:算法分析: 第一轮,将第一轮,将A(1)A(1)与与A(2) A(2) 、A(3) A(N) A(3) A(N) 依次比较,若依次比较,若A A(i i)与)与A(1)A(1)相同,则删除,删除的方法是相同,则删除,删除的方法是将位于将位于A A(i i)元素元素之后的元素依次前移一位之后的元素依次前移一位,即将,即将A A(i i)覆盖;覆盖; 第二轮,将第二轮,将A(2)A(2)与与其后元素依次比较,删除所有与其后元素依次比较,删除所有与A(2)A(2)相相同的元素;同的元素;

94、 循环的次数事先不确定,随重复数的多少而不同,所以采循环的次数事先不确定,随重复数的多少而不同,所以采用用DO-LOOPDO-LOOP循环,循环结束条件是被比较的数组元素循环,循环结束条件是被比较的数组元素a(n)a(n)是倒数是倒数第二个元素。第二个元素。 与比较数进行比较的数与比较数进行比较的数a(i)a(i)是从是从a(n+1)a(n+1)开始到最后一个元开始到最后一个元素。而一旦发现与素。而一旦发现与a(n)a(n)重复的重复的a(i)a(i),就,就利用利用FORFOR循环将循环将a(i+1)a(i+1)到到最后一个元素依次赋给前一个元素,即将最后一个元素依次赋给前一个元素,即将a(

95、i)a(i)覆盖删除,同时覆盖删除,同时重新定义数组的大小,减重新定义数组的大小,减1 1。EgEg: 5 4 3 5 4 7 5 8: 5 4 3 5 4 7 5 8例例77中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计ub = UBound(a)n = 1 是是被比较数的下标被比较数的下标Do While n ub 循环结束条件为被比较数是倒数第二个元素循环结束条件为被比较数是倒数第二个元素 i = n + 1 比较数的下标比较数的下标,从从N+1开始开始 Do While i = ub If a(n) = a(i) Then For j =

96、 i To ub 1 从从a(i+1)到最后一个元素依次前到最后一个元素依次前移移 a(j) = a(j + 1) Next j ub = ub 1 数组大小减数组大小减1 ReDim Preserve a(ub) Else i = i + 1 若不相同若不相同,再与下一个元素比再与下一个元素比较较 End If Loop n = n + 1 被比较数下标加被比较数下标加1Loop78中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计补充:补充: 15 15名学生按照已有的编号顺序围成一圈名学生按照已有的编号顺序围成一圈,13,13报数报数, ,逢逢

97、3 3出出局局, ,要求记录学生出局的先后顺序要求记录学生出局的先后顺序( (即编号即编号).).算法分析算法分析: :需解决如下一个几个问题需解决如下一个几个问题: :1.1.如何记录如何记录1515个学生的编号个学生的编号, ,又如何围成一圈又如何围成一圈2.2.如何实现报数如何实现报数3.3.如何实现逢如何实现逢3 3出局出局, ,并记录下编号并记录下编号4.4.已出局的如何不参加报数已出局的如何不参加报数定义一个有定义一个有15个元素的数组个元素的数组,元素下标即编号元素下标即编号,当下标依次递当下标依次递增时增时,若大于若大于15,就回到就回到1.数组元素的初值为数组元素的初值为1,

98、顺序对数组元素的值实现累加顺序对数组元素的值实现累加当累加和为当累加和为3时时,当前累加的元素出局当前累加的元素出局,记录下其下记录下其下标标将出局数组元素的值置为将出局数组元素的值置为0,则累加时不起作用则累加时不起作用,即不参与报数即不参与报数例例79中国药科大学中国药科大学 计算机教研室计算机教研室 Visual Basic 程序设计程序设计For i = 1 To 15 old_no(i) = 1 Next iidx = 0For i = 1 To 15 count = 0 累加和累加和,起报数作用起报数作用 Do While count 15 Then idx = 1 围成一圈围成一圈,循环循环 count = old_no(idx) + count 累加求和报数累加求和报数 Loop old_no(idx) = 0 当前元素出局当前元素出局 new_no(i) = idx 记录其编号记录其编号Next iFor i = 1 To 15 Text1.Text = Text1.Text & Right( & CStr(i), 3) Text2.Text = Text2.Text & Right( & CStr(new_no(i), 3)Next i80

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号