过程的建立和使用.ppt_第1页
过程的建立和使用.ppt_第2页
过程的建立和使用.ppt_第3页
过程的建立和使用.ppt_第4页
过程的建立和使用.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 过程的建立和使用,过程是用于完成特定任务的一组指令代码。使用过程编写程序,可以提高编程效率、优化程序结构。VB程序设计,就是编写一个个过程,实现复杂的功能。VB中的过程包括事件过程、子过程和函数过程。在过程的调用中,涉及参数的传递、变量的作用范围等问题。本章包括以下知识点。 概述过程的功能和特点。 事件过程响应代码的编写方法。 子过程的创建、调用和退出技术。 函数过程的创建、调用方法。 过程调用时,涉及形参和实参两种参数类型。参数传递方式有按值传递和按地址传递两种。按地址传递参数,实参有可能在程序运行的时候会被修改。 过程的嵌套与递归调用技术。 变量的使用受其作用域与生存周期限制。 如

2、果将控件比作VB的骨架,那么过程就是VB的肌肉。通过本章的学习,读者可以掌握VB程序设计的实质性内容,可以快速提高编程能力,4.1 过程概述,过程是为了完成特定任务而编写的功能相对独立的代码段。每个过程都有自己的过程名,其他程序可以通过过程名调用该过程。 对于读者来说,VB中的过程其实并不陌生,从第1章开始,读者就已经接触到了过程,只是笔者并未提及这一概念。事件驱动是VB程序设计的一大特色,而事件就是一个过程。下面的代码就是一个常用的窗体加载过程。 Private Sub Form_Load() End Sub,4.2 事件过程,事件是VB控件的三大要素之一,事件驱动是VB的特点。当对象接收到

3、外部操作(如单击鼠标、按下键盘等),就触发相应的事件,并调用该事件过程。 一个完整的事件过程包括过程名和过程响应代码。过程名由窗体或控件的名称、下划线和事件名组成。窗体或控件的事件过程名由自动VB创建,事件过程的响应代码由程序员编写。例如,在下面的窗体事件过程中,从立即窗口中输出“Visual Basic 6.0”。 Private Sub Form_Load() Dim strSample As String strSample = “Visual Basic 6.0” Debug.Print strSample End Sub,4.3 通用过程,通用过程是为了完成一些特定功能而编写的代码块

4、。通用过程不是由事件触发的,而是由其他过程调用的。例如,多个事件过程需要执行相同的任务,那么可以将该任务做成通用过程,供这些事件过程调用,避免重复书写代码。通用过程有子过程和函数过程两种类型,4.3.1 子过程,在VB程序设计中,要使用子过程完成特定的功能,需要完成创建子过程、调用子过程和退出子过程三个操作。 1创建子过程:子过程使用关键字Sub和过程名创建,按回车键系统会自动添加End Sub语句。程序员在Sub与End Sub之间编写过程代码。子过程的语法格式如下。 Sub subname (argumentlist) Instructions End Sub 2调用子过程:子过程的调用可

5、以使用Call语句调用,也可以直接使用过程名调用。其语法格式如下。 使用Call语句调用子过程 Call subname (argumentlist) 直接使用过程名调用子过程 subname argumentlist 3退出子过程:在子过程中,可以通过Exit Sub语句改变程序的控制流程,从该过程中立即退出。Exit Sub与前一章中的Exit For和Exit Do用法是一样的,都是用于强制改变程序控制流的。只是Exit Sub强制跳出子过程,返回并执行调用语句后面的程序。而Exit For和Exit Do跳出当前循环,执行当前过程中该循环后面程序,4.3.2 函数过程,如果想在表达式中

6、使用过程,或者希望获得过程的返回值,那么可以使用函数过程。函数过程的创建与使用与子过程基本上是一样的。 1创建函数过程 函数过程使用关键字Function和函数名创建。其语法格式如下。 Function functionname (argumentlist) As type Instructions functionname = expression End Sub 2调用函数过程 函数过程的调用与子过程的调用稍有差异。调用函数过程既可以返回函数值,也可以像调用子过程一样,不必返回函数值,4.4 参数传递,在上面的子过程调用和函数过程的调用中,都存在着被调过程与调用过程之间的参数传递。参数形式

7、有形参与实参两种,参数传递方式有按地址传递和按值传递两种,4.4.1 形参与实参,形参是形式参数的缩写,是声明过程中使用的参数,用于接收数据。程序员可以定义形参的数据类型。形参变量的有效范围局限于该过程内部。当过程调用结束,形参变量就被释放。实参是实际参数的缩写,是调用过程时使用的参数。实参是传递给过程的参数。实参的类型较多,可以是常量、变量或表达式等。实参与形参的变量名称可以相同,也可以不同。 在窗体加载事件Form_Load中,c=cir(r)中的变量r是实参;s=area(5)中的常量5也是实参。在函数过程Function cir(r As Single) As Single和Funct

8、ion area(r As Single) As Single中,变量r是形参,4.4.2 按值传递和按地址传递,在调用过程的时候,通常存在两种参数传递方式,即按值传递参数和按地址传递参数。 1按值传递参数 按值传递参数,就是将变量的拷贝值传递给被调用的过程,而该变量本身不会发生变化。在过程调用中,实参为常量、表达式或者在定义过程时使用ByVal关键字时,参数的传递方式就是按值传递。 2按地址传递参数 按地址传递参数,实际上就是把变量的内存地传递给过程的形参。此时,形参与实参共用同一个内存单元,当形参的值发生变化时,实参的值也随之发生变化。在过程调用中,实参为变量或者定义过程中使用ByRef关

9、键字时,参数的传递方式就是按地址传递。 3参数传递示例,4.5 过程的嵌套与递归调用,VB允许过程的嵌套调用和过程的递归调用。过程的嵌套调用,是指在一个过程的定义中调用另一个过程。过程的递归调用,是指在一个过程内部直接或者间接地调用该过程自身,4.5.1 过程的嵌套调用,过程嵌套可以简化程序结构,提高编程效率。在VB中,各过程之间是平行的,不存在上一级过程和下一级过程的问题。因此,VB不允许在一个过程的定义中,再定义另一个过程。但是,在VB程序设计中,可以使用过程的嵌套调用。 函数cnm()中三次调用函数s(),避免三次输入相同的代码,使得程序的结构比较简洁清晰,4.5.2 过程的递归调用,过

10、程的嵌套调用,是在一个过程中调用另一个过程。而过程的递归调用,是过程调用过程自身。递归调用同样可以简化程序代码,提高编程效率,并使得程序结构较为清晰。 使用过程递归调用方法,求 ,并从立即窗口输出计算结果。示例代码如下所示,4.6 变量的作用域与生存周期,变量的作用域是指变量在一个工程中的有效使用范围。变量只在其作用域中有效。变量的生存周期是指变量的值在程序中被保存的时间。按照变量的作用域不同,可以将变量分为局部变量、模块变量和全局变量三种类型,4.6.1 局部变量,局部变量是在过程内部声明和使用的变量。因此,局部变量也称为过程级变量。局部变量只能被其所属过程的内部代码访问和修改,其他过程不能

11、获得该变量的值,更不能修改该变量。当局部变量所属的过程运行结束后,该变量就会消失。 局部变量使用关键字Dim声明,这在前面的示例中用到过很多次。另外,关键字Static也可以声明静态局部变量,4.6.2 模块变量,常用的代码模块有窗体模块Form和标准模块Module。在这些代码模块的通用代码段中,可以使用关键字Private或者Dim声明模块级变量。模块变量的作用域是其所属的整个模块,模块中的所有过程都可以访问和修改该变量。但是,一个模块的代码是不能访问另一个模块的模块变量的。当模块运行结束后,模块变量就被释放消失,4.6.3 全局变量,全局变量是所有模块都可以访问和修改的变量。全局变量由关

12、键字Public声明。全局变量增加了程序使用这些变量的灵活性,也增加了程序无意中修改全局变量的风险。因此,在使用全局变量时要注意这些问题,4.7 实例:求1000以内2、3、5、7的倍数,将通用的功能编写为一个过程,供其他过程调用,完成相似的操作,能够提高编程效率、优化程序结构。 【实例4-1】本实例要使用计算机自动求出1000以内2、3、5、7的倍数。事实上,求4个质数的倍数的操作是相同的。因此,可以通过编写通用过程实现求解,4.7.1 界面设计,本实例主要使用了Label控件、TextBox控件和CommandBox控件。图是求1000以内2、3、5、7的倍数的程序运行界面图,4.7.2

13、实例结构,创建一个新工程,该工程包括一个Form窗体。在窗体上添加上述控件,控件布局如图4.8所示,4.7.3 程序流程,以2的倍数为例,程序的流程如图所示,4.7.4 代码实现,求1000以内2、3、5、7倍数的实例代码如下所示。 在程序运行界面中,使用TextBox控件输出各质数的倍数。将各TextBox控件的Name属性设置为相同的名称,Index属性分别设置为2、3、5、7。这事实上是创建了控件数组,在下一章中将详细介绍。此处,读者只要知道,设置了Index属性,就可以使用公用的语句,如txtMultiple.Item(Num).Text,输出对应与2、3、5、7的倍数数据,4.8 综

14、合练习,编写一个求3个数中最大值Max和最小值Min的过程,然后用这个过程分别求5个数、7个数中的最大值和最小值。 编写一个求3个数中最大值Max和最小值Min的过程是比较简单的。但是要用这个过程解决5个数、7个数,甚至更多的数就不易实现。对于一个过程来说,允许若干个参数可选,但是,参数的总个数是一定的,4.9 常见问题,1 VB过程参数传递方式按值和按地址有什么区别? 按值传递时,实参将其复制给形参,形参在过程运算中改变时,对实参没有任何影响。当实参为常量、表达式或者在定义过程时使用ByVal关键字时,过程参数传递方式都是按值传递。 按地址传递时,实参将其存储地址传递给形参,形参与实参共享同

15、一个内存地址。形参在过程运算中改变时,实参也会一起变化。当实参为变量或者定义过程中使用ByRef关键字时,过程参数传递方式都是按地址传递。 当实参为下一章中所介绍的数组时,过程参数的传递方式也是按地址传递。当实参为变量时,可以给变量名加括号“()”来改变参数传递方式,将按值传递改为按地址传递。 2 为什么在定义Function过程要在下面给过程名赋值,调用的时候才能使用?原理是什么? VB的函数值返回方式与C语言是不同的。在VB中,如果使函数能够返回正确的值,就必须在函数过程的最后,将需要返回的数据赋给函数名。这与C语言中使用Return语句返回函数值的功能是一样的,只是形式不同。比如如下代码

16、: Function Caculate(ByVal x As Integer, ByVal y As Integer) As Integer Caculate=x * y End Function 必须使用Caculate=x*y才能返回正确的函数值。而不能像C语言中,定义z=x*y实现函数值的返回,4.9 常见问题,3 VB子过程中能否有两个数组作为形参? VB子过程的参数个数可以有多个,当然可以将多个数组作为参数。数组的概念和使用将在下一章中详细介绍。但是,值得提醒的是,无论参数是变量还是数组,对应形参和实参的数据类型一定要相同,否则系统会提示类型不匹配的错误信息。 4 下列代码运行时,单击窗体4次,其运行结果是什么? Private Sub Form_Click() Static a As Integer Dim b As Integer b = a + b + 1 a = a + b Debug.Print a=; a, b=; b End Sub 5 编一个函数过程HtoD(H),将十六位进制字符串H转换成十进制数。主调程序用HtoD函数,再调用内部函数Hex(number)进行逆向验证,4.10 小结,本章主要介绍VB中的过程,过程调用、过程中的参数传递,以及过程中的变量作用范围。本章的难点是通用过程的编写和调用,以及参数的传递。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论