欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第5章 数组与过程.doc

    • 资源ID:78962938       资源大小:194KB        全文页数:18页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第5章 数组与过程.doc

    第5章 数组和过程本章涉及两个问题:(1)当需要处理的数据具有同一性质而且数据量大时,如果用变量存储数据是不合适的,这时只有用数组来实现比较方便。(2)Visual Basic应用程序是由过程组成的。过程设计和调试使程序设计简单化、模块化和功能化。可以这样说,在用Visual Basic设计应用程序时,除了定义常量、变量、控件外,全部工作就是编写过程。5.1 数组处理少量的数据,可以为每一个数据设计一个变量,一个变量存储一个数据。但如果数据量很大,就要用数组来存储数据了。例如:要记录一个班的30个同学的成绩时,总不能分别定义c1,c2,c30等30个变量来分别存储30项成绩。如果使用数组存储这30个同学的成绩,我们只需要定义一个数组名,30个同学的成绩之间的区分靠数组的下标来表达。5.1.1 数组的概念1. 基本概念(1)数组:是同类型变量的一个有序的集合。这些同类型变量共用同一个名字数组名,它们之间的区别是以数组名后面跟上下标来表达的。(2)数组元素: 即数组中的变量。从形式上讲,数组名后面跟上下标就是数组元素,或者说带下标的数组名不再表示数组,而是表示数组中的一个变量数组元素。数组元素的表示形式:数组名(n1,n2,)。其中n1、n2表示元素在数组中的排列位置,称为“下标”。例如:A(3,2)表示二维数组A中第3行第2列上的那个元素。(3)数组维数: 由数组元素中下标的个数决定,一个下标表示一维数组,二个下标表示二维数组,。VB中有一维数组、二维数组、最多60维数组。(4)下标:下标表示顺序号,每个数组元素有一个唯一的顺序号,下标不能超过数组声明时的上、下界范围。下标可以是整型的常数、变量、表达式,甚至还可以是一个数组元素。特别说明:这里所说的“下标”仅是用于数组元素的下标,在数组声明时,如果省略下界,数组声明的形式与数组元素的书写形式一样,但在数组声明时,写在数组名后园括号内的单个常量叫范围。2数组声明数组必须先声明后使用。声明数组就是让系统在内存中分配一个连续的区域,也就是表明同时定义相应的数组元素,为存储数据做准备。声明的内容:数组名、类型、维数、数组大小。一般情况下,数组中各元素类型必须相同,但若数组为Variant时,可包含不同类型的数据。5.1.2 静态数组静态数组的声明形式:语法: <Dim|Private|Static|Public> 数组名(<范围>,<范围>,) As  类型<范围> = <下界常量> TO <上界常量>说明:(1)<范围>的写法是:<下界常量> TO <上界常量>,也可以只写<上界常量>,这时表示省略了<下界常量>,其默认值为0,多数都是这种写法。(2)<下界常量>、<上界常量>必须是常数,不可以为表达式或变量。(3)<下界常量>最小为-32768,<上界常量>最大为32767;一维数组的大小(数组元素的个数)为:(<上界常量>-<下界常量>)+1;如果省略下界,一维数组的大小为:<上界常量>+1。(4) 如果省略类型,则为变体型。(5)<范围>个数决定数组的维数,最多60维。例如:Dim  A(10) As Integer 声明了数组A、整型、一维数组、有11个数组元素,下标的范围是010。例如:Dim  AB(-5 To 5) As String*3声明了数组AB、字符串型、一维数组、有11个元素,下标的范围是-55,每个元素最多存放3个字符。例如:Dim  ABC(2 To 5, 4) As  Long声明了数组ABC、长整型、二维数组、第一维下标范围为25,第二维下标的范围是04,占据4x 5个长整型变量的空间。(6)上面的语法形式只表达了声明一个数组的简单情况,实际上可以在一行中声明多个数组。例如:Dim A(10), B(20), C(5) As Double声明了数组A、B和C三个数组。5.1.3 动态数组1. 动态数组的使用建立动态数组的目的是希望在程序的运行过程中改变数组的大小,建立动态的数据存储区。往往在实际编程会有这样的情况发生,在程序开始运行时只知道需要一个数据区,但并不知道需要多大的数据区,只在程序运行一段时间后,才会知道需要多大的数据区。动态数组是VB的最大特点之一,许多程序设计语言不具有这一特点。建立动态数组的方法是:利用Dim、Private、Static、Public语句声明园括号内为空的数组,然后在过程中用ReDim语句指明该数组的大小。动态数组的声明形式:语法:ReDim  Preserve 数组名(<范围>,<范围>,) As  类型<范围> = <下界常量> TO <上界常量>说明: (1)语法形式只描述了声明一个数组的简单情况,实际上可在一行中声明多个数组。(2)<范围>可以是常量,也可以是有了确定值的变量。(3)数组名必须与Dim中的声明语句保持一致。(4)类型可以省略,若不省略,必须与Dim中的声明语句保持一致。(5)如果使用了 Preserve 关键字,则只能重新定义数组最末维的大小,不能改变维数的数目。使用 Preserve 关键字的目的是保留改变之前数组中的数据。如果数组就是一维的,则可以重新定义该维的大小并保留原来的数据。如果数组是二维或多维的时,则只能改变其最末维。同时仍保留数组中的数据。只能改变<范围>的上界。【例5.1】下面的代码段第一次使用ReDim 语句时定义了动态数组A,第二次使用带“Preserve” 关键字的ReDim语句时改变了数组A的大小,但保留了原来的数据。图5.1给出的输出结果证明了这一点。Dim A() As IntegerPrivate Sub Form_Click()ReDim A(10) As IntegerFor i = 0 To 10A(i) = iNext iReDim Preserve A(15)For i = 0 To 15Print " " A(i);Next iEnd Sub图5.1 例5.1输出结果 (6) 多次使用不带“Preserve” 关键字的ReDim语句不断可以改变数组的大小,还可以改变数组的维数。但每次使用ReDim语句都会使原来数组中的数据丢失。【例5.2】下面的代码段第二次使用ReDim语句时改变了数组A的大小及维数,但丢失原来数组中的数据。图5.2给出本例代码运行的输出结果。Dim A() As IntegerPrivate Sub Form_Click()ReDim A(10) As IntegerFor i = 0 To 10 A(i) = 2 * iNext iFor i = 0 To 10 Print " " A(i);Next iPrint: PrintReDim A(10, 2)For i = 0 To 2 For j = 0 To 10 Print " " A(j, i); Next j PrintNext iEnd Sub图5.2例5.2输出结果2. 静态数组与动态数组区别静态数组:声明时确定了大小的数组。动态数组: 声明时没有给定数组大小(省略了括号中的上界与下界),使用时需要用ReDim语句重新指出其大小。使用动态数组的优点是根据用户需要,有效地利用存储空间,它是在程序执行到ReDim语句时才分配存储单元,而静态数组是在程序编译时分配存储单元。3. 数组的清除和重新定义在一个程序中,同一数组只能用Dim语句定义一次。但有时可能需要清除数组的内容或对数组重新定义,这可以用Erase语句来实现。语法:Erase数组名,数组名功能:重新初始化静态数组的元素,或者释放动态数组的存储空间。说明:(1)在Erase语句中,只需给出数组名,不带括号和范围。(2)在Erase语句用于静态数组时,如果这个数组是数值数组,则把数组中的所有数值元素置为0;如果是字符串数组,则把所有数组元素置为空字符串。(3)当把Erase语句用于动态数组时,将删除整个数组结构并释放该数组所占用的内存区。也就是说,动态数组经Erase语句执行后,即不复存在;而静态数组经Erase后,仍然存在,只是其内容被清空。(4)Erase语句释放动态数组所使用的内存,在下一次引用该动态数组之前,必须用ReDim语句重新定义该数组。【例5.3】下面的代码段指出:使用Erase语句后,数组A仍然存在,只是其中数据不存在了;而数组B所占存储空间被释放,所以,如果将下面代码段中加下划线的行前面的单引号去掉,让这一行由注解行变成程序行,引用下标变量B(1),将会程序运行错误。Dim A(10) As IntegerPrivate Sub Form_Click()For i = 0 To 10 A(i) = 2 * i: Print " " A(i);Next iPrintReDim B(5)For i = 0 To 5 B(i) = 3 * i: Print " " B(i);Next iPrintErase A, BFor i = 0 To 10 Print " " A(i);Next iPrint'Print B(1)End Sub图5.3 例5.3输出结果4. 数组下标界的测试函数有时需要知道数组的上界值和下界值,这可以通过LBound和UBound函数来测试。语法:LBound(数组名,维)UBound(数组名,维)功能:LBound函数返回数组指定维的下界。UBound函数返回数组指定维的上界。说明:(1)格式中的“维”是指定要测试数组的第几维。两个函数一起使用,即可确定一个数组的大小。(2)对于一维数组来说,“维”可以省略。如果要测试多维数组,“维”不能省略。【例5.4】使用LBound函数和UBound函数。代码如下:Private Sub Form_Click()Dim A(10), B(10, 8, -4 To 5) As IntegerPrint LBound(A), UBound(A)PrintPrint LBound(B, 1), UBound(B, 1)Print LBound(B, 2), UBound(B, 2)Print LBound(B, 3), UBound(B, 3)End Sub程序运行的输出结果如图5.4所示。图5.4 例5.4输出结果5.1.4 数组的基本操作对数组的操作实际上主要是引用数组元素。我们把数组元素当成一个普通变量看待,普通变量能够出现的地方,数组元素就能出现。数组元素的写法:数组名(下标1,下标2,)数组元素中的下标可以是常量、变量、表达式。注意与数组声明时的下标范围(省略下界)相区别。数组声明时的下标范围只能常量。1. 数组元素的赋值例如:Dim  A(1 To 10) As IntegerFor i=1 To 10 A(i)=100 * iNext iA(10)=Int(sin(1)+cos(2)+100A(9)=A(10)A(8)=InputBox()For i=1 To 10 Print A(i)*100Next i2数组的赋值在VB6.0中可以直接将一个数组的值赋值给另一个数组。这VB的特点。例如:Private Sub Form_Click()Dim a(3) As IntegerDim b() As Integera(0) = 0: a(1) = 1: a(2) = 2: a(3) = 8b = aFor i = 0 To 3Print b(i)Next iEnd Sub 注意:(1)赋值号两边的数据类型必须一致。(2)如果赋值号左边的是一个动态数组,则赋值时系统自动将动态数组ReDim成右边相同大小的数组。(3)如果赋值号左边的是一个大小固定的数组,则数组赋值出错。5.1.5 控件数组1控件数组的概念控件数组是由一组相同类型的控件组成的,它们共用一个控件名。控件数组适用于若干个控件执行的操作相似的场合,控件组共享同样的事件过程。控件数组通过索引号(属性中的Index)来标识各控件,第一个下标是0 。如:Text1(0)、Text1(1)、Text1(2)、Text1(3)2控件数组的建立控件数组的建立有两种方法,一种是在界面设计时就建立,二是在运行时添加。在设计时建立的具体步骤如下:(1)在窗体上画出某控件,并进行属性设置。(2)选中该控件进行“复制”和“粘贴”操作,系统提示“是否建立控件数组”,选择是即可。多次粘贴就可以创建多个控件元素。 (3)进行事件过程的编程。在运行时添加控件数组的具体步骤如下:1)在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数组。2)在编程时通过Load方法添加其余若干个元素,也可以通过Unload删除某个添加的元素。3)每个添加的控件数组通过Left 和Top属性,确定其在窗体上的位置,并将Visible设置为True。5.1.6 数组的应用数组的应用主要体现在:(1)将外界一组同性质的数据输入到数组中;(2)将存储在数组中的数据输出转移其它数据结构;(3)对存储在数组中的数据进行查找、排序、统计分析等操作。下面用一些例题来说明数组的应用。【例5.5】通过键盘输入10个数,计算这10个数的累计和与平均值。代码如下,程序运行的输出结果如图5.5所示。Private Sub Form_Click() '单击窗体执行该过程Dim s, a(10) As Singles = 0For i = 1 To 10 a(i) = InputBox("输入第" & i & "个值:") Print " " a(i); s = s + a(i)Next iPrint: Print "s= " s, "average= " s / 10End Sub图5.5 例5.5输出结果【例5.7】对一个数组中的数据排序。分析:对一个数组中的数据排序(升序)最基本的方法是:先找数组中最小的数,假设用第一个数组元素存储的数组中最小的数,将第一个数组元素与后面每个数组元素比较,如果后面的数组元素大于第一个数组元素,则交换两个数组元素的值,当比较完后面所有数组元素,就找到全数组中最小的值,而且存储在第一个数组元素中。下一步找次小的数据并存储在第二个数组元素中。将全数组中最小数据存储于第一个数组元素中,从数组中排除这个最小数,再从数组剩余的数据中找最小数(也就是全数组中的次小数)存储于第二个数组元素中。再找第三个数并存储于第三个数组元素中。最后必然是倒数两个数组元素的数据进行比较。下面程序代码中,有下划线的部分就是排序程序,用二重循环实现。请注意外层循环控制变量i的起点是1,终点是(n1),表明每一步找一个最小数并存储于a(i)中。内层循环控制变量j的起点是(i+1),终点是n,控制被比较的对象(它们是a(i)后面的所有数组元素单元)。要特别注意排序程序内外二重循环变量的起点、终点的取值。如果比较过程出现后面的数据比前面的数据大,表明反序,要交换两个数组元素中的数据,这就用到前面第3章学习到的交换两个变量内容的方法。程序代码如下,程序运行的输出结果如图5.7所示。Private Sub Form_Click() '单击窗体执行该过程Dim a() As Singlen = InputBox("输入数组规模:")ReDim a(n)Print "原始数据:"For i = 1 To n a(i) = InputBox("输入数组的第" & i & "个值") Print " " a(i);Next iPrintFor i = 1 To n - 1 For j = i + 1 To n If a(i) > a(j) Then t = a(i): a(i) = a(j): a(j) = t End If Next jNext iPrint "排序后的数据:"For i = 1 To n Print " " a(i);Next iEnd Sub图5.7 例5.7输出结果【例5.9】 随机抽取12位病人进行新体育疗法减肥试验,试验前后测得体重如表5.2所示,假设治疗前后,除了参加这种新体育疗法外,其余的一切条件都尽可能做到相同。问:根据试验结果,能否判断这种新体育疗法对减肥具有显著作用?表5.2 12位病人进行新体育疗法前后的体重数据治疗前133145100156127122142110136166138110治疗后120122105133108110135105122145128108对于本例,拟采用配对计量资料t检验的方法做出判断。 其中,d为治疗前后体重数据的差,为治疗前后体重数据差的均值,n为数据组对数。先计算t值,再根据t值和下面介绍的-函数和不完全Beta函数,求出概率值P。假设求出的t值为T,P的意义为:t<-|T|及t>|T|的概率为P(双尾检验),或t>|T|的概率为P(单尾检验)。本例程序给出的是双尾检验的P值。设为服从自由度为v的t分布的随机变量,则:(公式5.1) ,(公式5.2)5.2 过程过程是为一个相对独立的功能模块所编写的一段程序代码。VB中的过程分类如下:(1)以“Sub”保留字开始的子程序过程 (包括事件过程和通用过程),不返回值。(2)以“Function” 保留字开始的函数过程,返回一个值。(3)以“Property” 保留字开始的属性过程,可以返回和设置窗体、标准模块以及类模块的属性值,也可以设置对象的值。5.2.1 过程(Sub)的定义与调用1 事件过程(1)窗体事件过程语法:Private  Sub Form_事件名(参数列表) 局部变量和常数声明 语句块End Sub说明:1)窗体事件过程名由Form_事件名组成,多文档窗体用MDIForm_事件名。2)每个窗体事件过程名前都有一个Private的前缀,表示该事件过程不能在它自己的窗体模块之外被调用。3)事件过程有无参数,完全由VB提供的具体事件本身决定,用户不可以随意添加。例如:单击窗体事件Private Sub Form_Click ()End Sub加载窗体事件Private Sub Form_Load ()End Sub(2)控件事件过程语法:Private  Sub 控件名_事件名(参数列表) 局部变量和常数声明语句块End Sub例如:命令按钮单击事件Private Sub Command1_Click()End Sub注意,其中的控件名必须与窗体中某控件相匹配,否则VB将认为它是一个通用过程。(3)事件过程的调用事件过程由一个发生在VB中的事件来自动调用或者由同一模块中的其它过程调用。2通用过程通用过程是一个必须从另一个过程显示调用的程序段,通用过程有助于将复杂的应用程序分解成多个易于管理的逻辑单元,使应用程序更简洁、更易于维护。通用过程分为公有(Public)过程和私有( Private)过程两种,公有过程可以被应用程序中的任一过程调用,而私有过程只能被同一模块中的过程调用。(1)语法: Private | Public   Static  Sub 过程名(参数列表) 局部变量和常数声明     ' 用Dim 或Static声明 语句块Exit Sub语句块End Sub说明:1)缺省 Private | Public 时,系统默认为 Public 。Static 表示过程中的局部变量为“静态”变量。2)过程名的命名规则与变量命名规则相同,在同一个模块中,同一符号名不得既用作Sub过程名,又用作Function过程名。3)参数列表中的参数称为形式参数,它可以是变量名或数组名,只能是简单变量,不能是常量、数组元素、表达式;若有多个参数时,各参数之间用逗号分隔,形参没有具体的值。VB的过程可以没有参数,但一对圆括号不可以省略。不含参数的过程称为无参过程。4)形参格式为: ByVal 变量名 () As  数据类型说明:变量名():变量名为合法的VB变量名或数组名,无括号表示变量,有括号表示数组。 ByVal :表明其后的形参是按值传递参数(传值参数 Passed By Value),若缺省或用ByRef,则表明参数是按地址传递的(传址参数)或称“引用”(Passed By Reference)。 As  数据类型:缺省表明该形参是变体型变量,若形参变量的类型声明为String,则只能是不定长的。而在调用该过程时,对应的实在参数可以是定长的字符串或字符串数组,若形参是数组则无限制。5)Sub 过程不能嵌套定义,但可以嵌套调用。6)End Sub 标志该过程的结束,系统返回并调用该过程语句的下一条语句。7)过程中可以用Exit Sub提前结束过程,并返回到调用该过程语句的下一条语句。(2)建立Sub过程的方法建立Sub过程的有两种方法。方法一:首先,打开代码编辑器窗口;然后,选择“工具”菜单中的“添加过程”;其次,从对话框中输入过程名,并选择类型和范围;最后,在新创建的过程中输入内容。方法二:首先,在代码编辑器窗口的对象中选择“通用”,在文本编辑区输入 Private Sub 过程名;然后,按回车键,即可创建一个Sub过程样板;最后,在新创建的过程中输入内容。3Sub子过程的调用(1) 用Call语句调用Sub过程 语法:Call 过程名(实在参数表)实在参数的个数、类型和顺序,应该与被调用过程的形式参数相匹配,有多个参数时,用逗号分隔。【例5.10】编写一个求阶乘的通用过程,求 s=1!+2!+10! 的程序。Dim tSub jc(n) t = 1 For i = 1 To n t = t * i Next iEnd SubPrivate Sub Form_Click()单击窗体执行该过程 s = 0 For i = 1 To 10 Call jc(i) s = s + t Next i Print "s= " sEnd Sub运行结果如图5.10所示。图5.10 例5.10输出结果(2)把过程名作为一个语句来使用语法:过程名 实参1,实参2去掉了关键字CALL。5.2.2 函数过程(Function)的定义与调用1函数过程的定义函数过程定义的有两种方法。方法一:在代码窗口中,利用【工具】菜单下的【添加过程】命令,插入一个函数过程模板来定义。方法二:在代码窗口中,把插入点放在所有现有过程之外,直接输入函数来定义。语法: Private | Public   Static  Function 函数名(参数列表)As 数据类型 局部变量和常数声明     ' 用Dim 或Static声明 语句块 函数名=表达式 Exit Function语句块 函数名=表达式 End Function说明:(1)函数名的命名与变量命名规则相同,函数过程必须由函数名返回一个值。(2)如果函数体内没有给函数名赋值,则返回对应类型的缺省值,数值型返回0,字符型返回空字符串。(3)函数过程内部不得再定义Sub过程或Function过程。2Function过程的调用调用Function过程与调用VB内部函数的方法一样,即在表达式中写出它的名称和相应的实在参数。语法:过程名(实参列表)说明:(1)必须给参数加上括号,即使没有参数也不可省略括号;(2) VB中也允许象调用Sub过程一样来调用Function,但这样就没有返回值。【例5.11】设计一个求sin(x)值的通用函数,再调用这个函数。利用例3.25求sin(x)值的公式,设计一个通用函数sinx(x)。如图5.11所示,输入x的值后,按“计算”按钮,调用通用函数sinx(x),在第二个文本框中显示sin(x)的值。代码如下:Function sinx(x)Dim t, s As Doublet = x: s = 0: n = 1Do While (Abs(t) >= 0.) s = s + t t = -t * x * x / (n + 1) * (n + 2) n = n + 2Loopsinx = sEnd FunctionPrivate Sub Command1_Click()Text2.Text = sinx(Val(Text1.Text)End Sub图5.11 例5.11输出结果3调用其它模块中的过程调用窗体中的过程,从窗体模块的外部调用窗体中的公有过程,必须用窗体的名字作为调用前缀。语法:Call  Form1.Examsub (实参表)调用标准模块中的过程,如果在应用程序中,过程名是唯一的,则调用时不必加模块名。如果有同名的,则在同一模块内调用时可以不加模块名,而在其它模块中调用时必须加模块名。5.2.3 参数的传递1形参与实参的概念形参:指出现在Sub 和Function过程形参表中的变量名、数组名,过程被调用前,没有分配内存,其作用是说明自变量的类型和形态以及在过程中的角色。形参可以是:(1)除定长字符串变量之外的合法变量名;(2)后面跟()括号的数组名。实参:是在调用Sub 和Function过程时,传送给相应过程的变量名、数组名、常数或表达式。在过程调用中,参数的传递方式是:形参与实参是按位置结合的,形参表和实参表中对应的变量名可以不必相同,但位置必须对应起来。形参与实参的关系:形参如同公式中的符号,实参就是符号具体的值;调用过程即实现形参与实参的结合,也就是把值代入公式进行计算。2按值传递参数(定义时加ByVal)按值传递参数(Passed By Value)时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。3按地址传递参数(定义时没有修饰词或带关键字ByRef)按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用同一个内存单元。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。如果实参是一个常数或表达式,VB会自动按“传值”方式来处理。【例5.12】传值与传址调用实例传址调用:Private Sub Form_Click()a = 1Call Func(a)Print ”a= ”; aEnd SubSub Func(b)b = b + 1: Print ”b= “;bEnd Sub程序运行的输出结果如图5.12所示。传值调用:Private Sub Form_Click()a = 1Call Func(a)Print ”a= ”; aEnd SubSub Func( ByVal b)b = b + 1: Print ”b= ”;bEnd Sub程序运行的输出结果如图5.13所示。 图5.12 传址调用 图5.13 传值调用5.2.4 过程、变量的作用域VB的一个应用程序又称一个工程。它可以由若干个窗体模块、标准模块(还可以是类模块,本书不讨论)组成,每个模块又可以包含多个过程,如图5.15所示。图5.15 VB应用程序组成在不同的地方定义的过程、变量,有着不同的作用域。本节讨论过程、变量的作用域。1. 过程的作用域过程的作用域分为模块级和全局级,模块级的过程名前加Private关键字,全局级的过程名前加Pubilc或不加任何关键字。有关过程的作用域的详细信息如表5.3所示。表5.3 过程的作用域与使用规则作用域模块级全局级窗体标准模块窗体标准模块定义方式过程名前加Private过程名前加Pubilc 或不加(默认)本模块内其它过程调用能能能能本应用程序其它模块调用不能不能能,但必须在过程名前加窗体名。例:Call 窗体名. ABC()能,过程名须唯一,否则需要加标准模块名。例:Call 标准模块名. ABC()2.变量的作用域在VB中,变量的作用域分为局部变量(也称过程级变量)、模块级变量和全局变量。(1)局部变量局部变量是在一个过程中用Dim或Static(后面再讨论)声明的变量,只能中本过程中使用,别的过程不可访问。在本过程中没有声明而直接使用的变量也是局部变量。局部变量随过程调用分配存储单元并初始化,一旦过程调用结束,局部变量所占内存单元释放,内容消失。不同过程可有相同名称的变量,彼此互不相干。使用局部变量有利于程序安全、通用、便于调试。通常局部变量用于保存临时数据。(2)模块级变量在窗体模块(Form)的通用声明处或标准模块中,使用Private、Dim关键字声明的变量称为模块级变量。其作用域是声明它的本模块,即本模块的任何过程都可以访问它。使用模块级变量主要解决了多个事件过程、过程之间的数据共享问题,但增加了程序调试的难度。(3)全局变量全局变量是用Public关键字声明的变量。全局变量的作用域是整个应用程序。也就是说整个应用程序的任何过程都可以访问这类变量,这类变量随整个应用程序开始初始化,随程序结束消失。表5.4给出了不同作用域的三种变量的声明与使用规则。表5.4 不同作用域的三种变量的声明与使用规则作 用 范 围局部变量窗体/模块级变量全局变量窗 体标准模块声明方式Dim、StaticDim、PrivatePublic声明位置在过程中窗体/模块的“通用声明”段窗体/模块的“通用声明”段能否被本模块其它过程存取不能能能能否被其它模块存取不能不能能,但在变量名前加窗体名能【例5.14】不同作用域的三种变量的应用实例窗体模块的代码段:Dim z As IntegerPrivate Sub Form_Click()z = 300Call abcPrint "x=" x, "y=" y, "z=" z, "a=" aEnd Sub Module1标准模块的代码段:Public x As IntegerDim a As IntegerPublic Sub abc()Dim y As Integerx = 100: y = 200: a = 400End Sub从两段代码看出:(1)Module1标准模块中的过程abc()是全局级(程序级)过程,整个程序中任何过程可以调用它,所以在窗体模块中的Form_Click()过程可以调用它。(2)整个程序中有四个变量:x是全局级的;z 和a是分别属于窗体模块和Module1模块的模块级变量;y是Module1模块的abc()过程的过程级变量。在窗体模块的Form_Click()过程中引用x和z是有效的,而引用y和a是无效的。程序运行的输出结果如图5.16所示。图5.16 例5.14输出结果3静态变量用Static声明的局部变量称静态变量。用Dim声明的局部变量只能在定义它的过程内起作用,过程调用结束时,其值消失。为了保持局部变量的值,用Static声明将局部变量的声明为静态变量,静态变量当定义它的过程每次调用过程时保持原来的值,不重新初始化。【例5.15】静态变量与局部变量比较的应用实例下面的程序一个使用局部变量,另一个使用静态变量。分别多次执行两个程序,会发现:使用局部变量的程序每执行一次,局部变量不能保持上一次执行的结果,每次被初始化为0;而使用静态变量的程序每执行一次,静态变量保持上一次执行的结果,能记录程序反复执行的次数。程序一(使用局部变量)代码如下,输出结果如图5.17所示。Private Sub Form_Click()Dim Count As IntegerCount = Count + 1Print "已单击窗体" Count; "次"End Sub程序二(使用静态变量)代码如下,输出结果如图5.18所示。Private Sub Form_Click()Static Count As IntegerCount = Count + 1Print "已单击窗体" Count; "次"End Sub 图5.17 程序一输出结果 图5.18 程序二输出结果5.2.5 过程嵌套和递归调用

    注意事项

    本文(第5章 数组与过程.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开