收藏 分享(赏)

VB基础教程第六章.ppt

上传人:myw993772 文档编号:6949397 上传时间:2019-04-28 格式:PPT 页数:46 大小:142.50KB
下载 相关 举报
VB基础教程第六章.ppt_第1页
第1页 / 共46页
VB基础教程第六章.ppt_第2页
第2页 / 共46页
VB基础教程第六章.ppt_第3页
第3页 / 共46页
VB基础教程第六章.ppt_第4页
第4页 / 共46页
VB基础教程第六章.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

1、第7章 数组,从存储角度看,前面使用的变量都是相互独立的、无关的,通常称它们为简单变量。但如果处理将200个学生的成绩按大小顺序排序这类问题,只使用简单变量将会非常麻烦,而利用数组却很容易实现。本章讲述VB数组的基本概念和使用方法,主要内容有:数组的概念、数组的定义及应用、可调数组的概念及应用、控件数组的概念及应用。,退出,7.1 数组的概念 7.2 一维数组 7.3 二维数组 7.4 可调数组 7.5 控件数组,7.1 数组的概念,在实际应用中,常常需要处理相同类型的一批数据。例如,为了处理100个员工的工资,可以用S(1),S(2),S(100)来分别代表每个员工的工资,其中S(1)代表第

2、一个员工的工资,S(2)代表第二个员工的工资。在VB中,把一组相互关系密切的数据放在一起并用一个统一的名字作为标志,这就是数组。,数组中的每一个数据称为数组元素,用数组名和该数据在数组中的序号来标识。序号又称为下标,数组元素又称为下标变量。例如,S(2)是一个数组元素,其中的S称为数组名,2是下标。在使用数组元素时,必须把下标放在一对紧跟在数组名之后的括号中。S(3)是一个数组元素,而S3是一个简单变量。如果只用一个下标就能确定某个数组元素在数组中的位置,这样的数组称为一维数组。如果用两个或多个下标才能确定某个数组元素在数组中的位置,则数组分别称为二维数组或多维数组。,7.2 一维数组,7.2

3、.1 一维数组的定义数组应当先定义后使用,数组的定义又称为数组的声明或说明。对于固定大小的一维数组,用如下格式进行定义:说明符 数组名(下标)As 类型例如:Dim y(5)As Integer定义了一个一维数组,该数组的名字为y,类型为Integer,占据6个(05)整型变量的空间。,说明:(1)“说明符”为保留字,可以为Dim,Public,Private,Static中的任意一个。在使用过程中可以根据实际情况进行选用。本章主要讲述用Dim声明数组,其它参数的意义在8.4节介绍。定义数组后,数值数组中的全部元素都初始化为0,字符串数组中的全部元素都初始化为空字符串。(2)“数组名”的命名遵

4、守标识符规则。(3)“下标”的一般形式为“下界 to 上界”。 下标的上界、下界为整数,不得超过Long数据类型的范围,并且下界应该小于上界。如果不指定下界,下界默认为0。,(4)要注意区分“可以使用的最大下标值”和“元素个数”。(5)“As类型”用来说明“数组元素”的类型,可以是Integer,Long,Single,Double,Currency,String(定长或变长)等基本类型或用户定义的类型,也可以是Variant类型。如果省略“As类型”,则数组为Variant类型。(6)在同一个过程中,数组名不能与变量名同名,否则会出错。(7)可以通过类型说明符来指定数组的类型。例如:Dim

5、A%(5),B!(3 To 5),C#(12),7.2.2 一维数组的引用数组的引用通常是对数组元素的引用。一维数组元素的表示形式为:数组名(下标)一般通过循环语句及InputBox函数、文本框给数组输入数据。数组的输出一般用Print方法、标签或文本框实现。,【例7.2】编写程序,把输入的10个整数按逆序输出。Private Sub Command1_Click()Dim a(10)As Integer,i%Print “输入的数据为“For i = 1 To 10a(i)= InputBox(“请输入一个整型数“)Print a(i),Next iPrintPrint “逆序输出为“For

6、 i = 10 To 1 step -1Print a(i),Next iEnd Sub,7.2.3 一维数组的应用举例【例7.3】从键盘上输入40人的考试成绩,输出高于平均成绩的分数。分析:该问题可分三部分处理:一是输入40个人的成绩;二是求平均分;三是把这40个分数逐一和平均成绩进行比较,若高于平均成绩,则输出。,程序如下:Private Sub Command1_Click()Dim score(40)As Single,aver!,i% aver = 0For i = 1 To 40score(i)= InputBox(“请输入成绩“)aver = aver + score(i)Nex

7、t iaver = aver / 40For i = 1 To 40If score(i) aver Then Print score(i)Next iEnd Sub,【例7.4】从键盘上输入10个整数,把这些数按由小到大的顺序排序输出。排序的方法很多,如选择法、冒泡法等。这里介绍最容易理解的“冒泡法”。设10个数存放在A数组中,分别为:A(1)、A(2)、A(3)、A(4)、A(5)、A(6)、A(7)、A(8)、A(9)、A(10)。第1轮:先将A(1)与A(2)比较,若A(1)A(2),则将A(1)、A(2)的值互换,否则,不作交换;这样处理后,A(1)一定是A(1)、A(2)中的较小者

8、。,再将A(1)分别与A(3)、A(10)比较,并且依次作出同样的处理。最后,10个数中的最小者放入了A(1)中。第2轮:将A(2)分别与A(3)、A(10)比较,并依次作出同第1轮一样的处理。最后,第1轮余下的9个数中的最小者放入A(2)中,亦即A(2)是10个数中的第二小的数。照此方法,继续进行第3轮直到第9轮后,余下的A(10)是10个数中的最大者。至此,10个数已从小到大顺序存放在A(1)A(10)中。,为简单起见,我们以7,5,3三个数为例,再做说明:第1轮:找出最小值3作为第一个数组元素7 5 3 比较7和5,75,需要交换,交换后的序列为5 7 3;5 7 3 比较5和3,53,

9、需要交换,交换后的序列为3 7 5;第2轮:找出剩下的元素中的最小值5作为第二个数组元素3 7 5 比较7和5,75,需要交换,交换后的序列为3 5 7。剩下的一个元素7为三个元素中的最大者,排序完成。,程序如下:Private Sub Command1_Click()Dim t%,i%,j%,a(10)As Integer For i = 1 To 10a(i)= InputBox(“输入一个整数“)Next iPrint “输入的10个整数为“For i = 1 To 10Print a(i),Next iPrint,For i = 1 To 9For j = i + 1 To 10If

10、a(i) a(j)Then t = a(i):a(i)= a(j):a(j)= tNext jNext iPrint “排序后的结果为“For i = 1 To 10Print a(i),Next iEnd Sub,【例7.5】随机产生10个两位整数,找出其中最大值、最小值。分析:该问题可以分为两部分处理:一是产生10个随机整数,并保存到一维数组中;二是对这10个整数求最大、最小值。程序代码为:Private Sub Command1_Click()Dim min%,max%,i%,a(10)As IntegerRandomize,For i = 1 To 10a(i)= Int(Rnd *

11、90)+ 10Next iPrint “产生的随机数为“For i = 1 To 10Print a(i),Next iPrintmin = a(1):max = a(1),For i = 2 To 10If a(i) max Then max = a(i)If a(i) min Then min = a(i)Next iPrint “最大值为“Print maxPrint “最小值为“Print minEnd Sub,7.3 二维数组,假如有30个学生,每个学生有5门考试成绩,如何来表示这些数据呢?VB中可以用有两个下标的数组来表示,如第i个学生第j门课的成绩可以用S(i,j)表示。其中i表

12、示学生号,称为行下标(i1,2,30);j表示课程号,称为列下标(j1,2,3,4,5)。有两个下标的数组称为二维数组。,7.3.1 二维数组的定义对于固定大小的二维数组,可以用如下格式进行定义:说明符 数组名(下界to上界,下界to上界)As 类型例如:Dim T(2,3)As Integer定义了一个二维数组,名字为T,类型为Integer,该数组有3行(02)4列(03),占据12(34)个整型变量的空间,如图7-3所示。,说明:(1)可以将二维数组的定义方法推广至多维数组的定义。例如:Dim D(3,1 To 10,1 To 15)定义了一个3维数组,大小为 4 10 15。注意在增加

13、数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组,尤其是Variant 数组,因为他们需要更大的存储空间。(2)在实际使用时,可能需要数组的上界值和下界值,这可以通过LBound函数和UBound函数来求得。其格式为:LBound(数组名,维)UBound(数组名,维)这两个函数分别返回一个数组中指定维的下界和上界。,7.3.2 二维数组的引用二维数组的引用和一维数组基本相同,格式为:数组名(下标1,下标2)对二维数组进行赋值或输出时,一般采用二重循环来实现。,程序如下:Private Sub Command1_Click()Dim a(4,3)As Single,xm(4)A

14、s String * 10,i%,j%,aver!Print Tab(25);“成绩表“PrintPrint “姓名“;Tab(15);“英语“;Tab(25);“数学“;Print Tab(35);“法律“;Tab(45);“平均分“Print,For i = 1 To 4aver = 0xm(i)= InputBox(“输入姓名“)Print xm(i);For j = 1 To 3a(i,j)= InputBox(“输入“ & xm(i)& “的一个成绩 “),aver = aver + a(i,j)Next javer = aver / 3Print Tab(15);a(i,1);Ta

15、b(25);a(i,2);Print Tab(35);a(i,3);Tab(45);averPrintNext iEnd Sub,7.4 可调数组,通过前两节的学习,我们知道,定义数组,是用数值常数或符号常量定义数组的维数及下标的上、下界。VB编译程序在编译时为数组分配了相应的存储空间,并且在应用程序运行期间,数组一直占据这块内存区域,这样的数组称为固定数组。但是,在实际应用中,有时事先无法确定到底需要多大的数组,数组应定义多大,要在程序运行时才能决定。如果定义的数组过大,显然会造成内存空间的朔选可调数组提供了一种灵活有效的管理内存机制,能够在程序运行期间可以根据用户的需要随时改变数组的大小。

16、,7.4.1 可调数组的定义可调数组的定义分为两步:第一步:声明一个没有下标参数的数组。格式为:说明符 数组名()As 类型第二步:引用数组前用 ReDim语句重新定义。格式为:ReDim Preserve 数组名(下界 to 上界,下界 to 上界)As 类型,例如:Private Sub Command1_Click()Dim a()As Integer Dim n%n = Val(InputBox(“input n“)ReDim a(n)End Sub,说明:(1)格式中的“说明符”、“ 数组名”、“ 类型”等说明同一维数组的定义。(2)下界、上界可以是常量,也可以是有了确定值的变量。(

17、3)ReDim语句用来重新定义数组,能改变数组的维数及上、下界,但不能用其改变可调数组的数据类型,除非可调数组被声明为Variant类型。(4)每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim后加Preserve参数来保留数组中的数据,但Preserve只能改变多维数组中最后一维的大小,前几维的大小不能改变。(5)ReDim语句只能出现在过程中。,7.4.2 可调数组的应用举例【例7.10】编程输出Fibonacci数列:l,1,2,3,5,8,的前n项。分析:在例7.6中,是输出Fibonacci数列的前20项,我们使用了固定数组;本例要求输出前n项,n是一个变量,因此,应该

18、使用可调数组。程序代码如下:Private Sub Command1_Click()Dim Fib(),i%,n% 避免溢出,定义数组为Variant类型n = InputBox(“输入n的值(n1)“)ReDim Fib(n),Fib(1)= 1:Fib(2)= 1For i = 3 To nFib(i)= Fib(i - 1)+ Fib(i - 2)Next iFor i = 1 To nPrint Fib(i),If i Mod 5 = 0 Then Print 每行输出5个数Next iEnd Sub请思考:如果例7.8中的学生数为n人,课程为m门,应该如何编程实现?,7.5 控件数组

19、,本节介绍控件数组,控件数组为我们处理功能相近的控件提供了极大的方便。 7.5.1 控件数组的概念在实际应用中,我们有时会用到一些类型相同且功能类似的控件。如果对每一个控件都单独处理,就会多做一些麻烦而重复的工作。这时,我们可以用控件数组来简化程序。,控件数组由一组相同类型的控件组成,这些控件共用一个控件名字,具有相似的属性设置,共享同样的事件过程。控件数组中各个控件相当于普通数组中的各个元素,同一控件数组中各个控件的Index属性相当于普通数组中的下标。比如,假设有一个包含3个按钮的控件数组Command1,它的3个元素就是Command1(0),Command1(1),Command1(2

20、)。,7.5.2 控件数组的建立控件数组中每一个元素都是控件,它的定义方式与普通数组不同。可以通过以下两种方法建立控件数组。方法一:复制已有的控件并将其粘贴到窗体上。方法二:将窗体上已有的类型相同的多个控件的Name属性设置为同一值。,7.5.3 控件数组的应用举例建立了控件数组之后,控件数组中所有控件共享同一事件过程。例如,假定某个控件数组含有10个标签,则不管单击哪个标签,系统都会调用同一个Click过程。由于每个标签在程序中的作用不同,系统会将被单击的标签的Index属性值传递给过程,由事件过程根据不同的Index值执行不同的操作。,【例7.12】设计一个简易计算器,能进行整数的加、减、

21、乘、除运算。其运行界面如图7-8所示。界面设计:一个标签用于计算器输出; 数字按钮控件数组Number; 操作符控件数组Operator; 一个“=”按钮用于计算结果; 一个“Cls”按钮用于清屏。,程序如下: 窗体级变量声明Dim op1 As Byte 用来记录前面输入的操作符Dim ops1&,ops2& 两个操作数Dim res As Boolean 用来表示是否已算出结果Private Sub clear_Click()dataout.Caption = “End SubPrivate Sub Form_Load()res = FalseEnd Sub, 按下数字键09的事件过程Pr

22、ivate Sub number_Click(i1 As Integer)If Not res Thendataout.Caption = dataout.Caption & i1Elsedataout.Caption = i1res = FalseEnd IfEnd Sub, 按下操作键+、/的事件过程Private Sub operator_Click(i2 As Integer)ops1 = dataout.Captionop1 = i2 记下对应的操作符dataout.Caption = “End Sub, 按下=键的事件过程Private Sub result_Click()ops2 =dataout.CaptionSelect Case op1Case 0dataout.Caption = ops1 + ops2Case 1dataout.Caption = ops1 - ops2,Case 2dataout.Caption = ops1 * ops2Case 3dataout.Caption = ops1 / ops2End Selectres = True 已算出结果End Sub,

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

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报