《程序设计基础vb讲稿06过程10》由会员分享,可在线阅读,更多相关《程序设计基础vb讲稿06过程10(174页珍藏版)》请在金锄头文库上搜索。
1、Visual Basic 程序设计,主讲:徐竞跃 E-mail:,第6章 过程,【内容提要】,6.1 过程简述 6.2 子过程 6.3 函数过程 6.4 参数传递 6.5 过程与变量的作用域 6.6 过程的嵌套和递归调用,【重点与难点】,子过程和函数过程在定义和使用中的区别; 参数传递方式“传址”和“传值”的区别以及使用; 过程与变量的作用域对程序运行的影响。,在生产复杂机器(例如汽车、计算机)的过程中,整台机器并不是在同一个地方建造的。机器的不同组件常在不同地方制造和测试,最后才将各组件组装到一起。这种“模块化”的方法使整个机器的设计生产周期缩短,更适合大批量高效率的生产。 应用程序设计也可
2、以采用这种“化繁为简”的模块化方法,把一个复杂的程序按照“逻辑关系”分成较小的部件,每个部件完成一定的简单功能,就可以简化程序设计任务。,6.1 过程概述,6.1.1 过程实例【例6.1.1】已知五边形的各条边长度,计算五边形的面积。 计算五边形面积,可将五边形分解成若干个三角形。计算三角形面积的公式如下:,其中x、y、z为任意三角形的三条边,c为三角形周长的一半:,过程实例,输入数据,调用计算三角形面积的过程,显示总面积 Private Sub Form_Click( )Dim a!, b!, c!, d!, e!, f!, g!Dim S1!, S2!, S3! !, C1!, C2!,
3、C3!a = Val( InputBox(“输入边长a:“) ) b = Val( InputBox(“输入边长b:“) )c = Val( InputBox(“输入边长c:“) ) d = Val( InputBox(“输入边长d:“) )e = Val( InputBox(“输入边长e:“) ) f = Val( InputBox(“输入边长f:“) )g = Val( InputBox(“输入边长g:“) )C1 = 1 / 2 * (a + b + c)S1 = Sqr(C1 * (C1 - a) * (C1 - b) * (C1 - c),C2= 1 / 2 * (c + d + e
4、)S2 = Sqr(C2 * (C2 - c) * (C2 - d) * (C2- e)C3 = 1 / 2 * (e + f + g)S3 = Sqr(C3 * (C3- e) * (C3 f ) * (C3 - g) Print “所求五边形面积为:“; S1 + S2 + S3 End Sub,输入数据,调用计算三角形面积的过程,显示总面积 Private Sub Form_Click( )Dim a!, b!, c!, d!, e!, f!, g!, S1!, S2!, S3!a = Val( InputBox(“输入边长a:“) ) b = Val( InputBox(“输入边长b:
5、“) )c = Val( InputBox(“输入边长c:“) ) d = Val( InputBox(“输入边长d:“) )e = Val( InputBox(“输入边长e:“) ) f = Val( InputBox(“输入边长f:“) )g = Val( InputBox(“输入边长g:“) )S1 = area(a, b, c) : S2 = area(c, d, e)S3 = area(e, f, g) Print “所求五边形面积为:“; S1 + S2 + S3 End Sub,过程实例,事件过程Form_Click和函数过程area之间存在着数据的相互交换。函数过程area实质
6、上代替了Form_Click事件过程中三段重复计算的程序代码。函数过程area不需要事件触发,可以像“内部函数”一样由程序语句自主调用。,定义计算三角形面积的函数过程 Public Function area( x! , y! , z! ) As SingleDim C! C = 1 / 2 * (x + y + z)area = Sqr(C * (C - x) * (C - y) * (C- z) End Function,6.1.2 过程概念,【过程】在程序设计时根据 “自顶向下,逐步求精”的原则,将一个“复杂的程序问题”分成若干个相对独立的小功能块,每个功能块用一段程序代码段来实现,这样
7、的程序代码段称为“子程序”,VB中称为“过程”。【过程分类】根据过程的定义和调用方法,分为事件过程和通用过程。 【事件过程(Event procedure)】VB预先定义的一种“响应对象事件”的标准过程,当对象的某个事件发生时,才能“触发调用”相应的事件过程。,过程概念,【通用过程(General procedure)】有时多个不同或同一个事件过程需要使用一段相似的程序代码。为使程序结构更加简洁,往往把重复使用的相似程序代码段独立出来形成一个由“代码调用”的过程,称为“通用过程”,又称为“自定义过程”。本书以后章节的过程都是指通用过程。,过程概念,【通用过程的特点】一种可用程序代码多次自主调用
8、的过程,并不通过事件触发。 【通用过程优点】如同工业中的标准配件一样,对一个公共性、经常被执行的功能,只需编写一个过程,供其他程序多次自主调用。 实现程序代码的共享,使程序变得简练; 减少编写程序代码的工作量; 实现简单功能的过程更易于调试和维护。,过程概念,【通用过程的分类】根据过程所起的作用可分为4类: 使用关键字“Sub”的子过程。 使用关键字“Function”的函数过程。 使用关键字“Property”的属性过程。 使用关键字“Event”的事件过程。【过程之间的关系】根据过程调用时的主动和被动关系,被其他过程调用的过程称为“被调过程”,而调用其他过程的过程称为“主调过程”。例6.1
9、.1中,在Form_Click()事件过程中主动调用了area()函数过程,因此Form_Click事件过程式主调过程,area()函数过程为被调过程。,过程概念,综上所述, VB6.0的程序(又称工程或项目)由若干个过程(事件过程、子过程、函数过程)组成,这些过程保存在相应文件中,并由相应的语句去调用或由相应的事件去触发。,过程概念,【说明】 通用过程必须“先定义,后调用”。 本章主要介绍子过程和函数过程。,6.2 子过程,6.2.1 子过程的定义1、引例【例6.2.1】数据交换子过程。经常要进行两个数的交换,可把实现两个数交换功能的程序代码段独立出来,形成一个“交换两个数”的过程以便其他过
10、程多次调用。,Swap子过程的定义 Private Sub Swap(m, n)Dim temptemp = m : m = n : n = temp End Sub,子过程的定义,在主调用过程Form_Click( )中调用Swap子过程 Private Sub Form_Click( )Dim a, b, c, da = 1 : b = 2 : c = 3 : d = 4Print “交换前:“;Print “a=“; a, “b=“; b, “c=“; c, “d=“; dCall Swap(a, b)Print Swap c, dPrint “交换后“;Print “a=“; a, “
11、b=“; b, “c=“; c, “d=“; d End Sub,子过程的定义,子过程的定义,可见,一个过程在被调用时,除了程序的“转移”还有数据的“双向传递”。【问】通用过程只能被事件过程调用吗?【答】通用过程可以被任何类型的过程调用。【问】其他过程可以使用语句代码调用事件过程吗?【答】可以把一个事件过程当作一个子过程使用语句代码调用。,2、子过程的定义,一个子过程(Sub过程)可以定义在窗体或标准模块的“代码窗口”中。【定义的两种方法】 在代码窗口中按照语法格式直接输入。 使用菜单命令 “工具添加过程”。【菜单命令定义的操作步骤】 在窗体或标准模块的代码窗口中选择定义的位置(必须在任何过程
12、之外),单击命令菜单“工具添加过程”,弹出“添加过程”对话框。,子过程的定义,子过程的定义,【语法格式】【功能】定义一个Sub型过程(子过程) 。, Sub 子过程名( ) End Sub,子过程的定义,【说明】 子过程以Sub开始,到End Sub结束,两者之间的语句块称为“过程体” 。每次调用子过程主要是执行过程体。过程体的编写方法与事件过程的过程体一样,根据功能要求进行编写。 子过程名,与变量名的命名规则相同。在同一个模块中,子过程名不能和同级的变量名、数组名或其他过程名相同。 不省略时,指定过程内定义的局部变量为“静态变量” ,子过程成为“静态过程”。,子过程的定义, 表示过程的作用域
13、,省略时默认选择Public。“Public”表示定义一个全局级过程,可以被程序中的任何过程调用该子过程。“Private”表示定义一个模块级过程,只能被本模块中的其他过程调用。 语句的作用:强制退出所在的子过程,“转移回”主调过程。Exit Sub语句通常与条件选择语句结合使用,实现“有条件退出”子过程,如果独立使用则只能实现“无条件退出”子过程。,3、形参列表,省略时,称为“无参过程”;存在时,称为“有参过程”。【语法格式】参数名 , 【形参列表】定义了一些用来在子过程与主调过程之间“交换数据” (传入数据、返回数据)的形式参数。如果子过程与主调过程之间不需要交换数据,则可省略。,形参列表
14、,【说明】 在过程头定义的形式参数,简称“形参”。形参是一种特殊的变量,是在过程之间数据交换的出入口。多个形参之间用逗号“,”分隔。 用来选择形参与对应实参之间的参数传递方式。ByRef表示“地址传递”方式,这时的形参即是数据入口又是数据出口;ByVal表示“值传递”方式,这时形参只是数据入口。省略时,默认By Ref方式。,形参列表, 指定了某个形参的数据类型,可是基本数据类型,也可以是自定义数据类型。省略时,默认为变体型。同样也可以用类型说明符指定参数的数据类型。 【注意】 形参即可用来与主调过程交换数据,还可在过程体中直接使用。 在过程体内不能定义另一个过程,即过程不能嵌套定义,但可以嵌
15、套调用。,6.2.2 子过程的调用,在主调过程中,子过程只能用单独一条语句调用,不能放在任何表达式中。1、调用的方法【Call语句调用】 子过程名 【说明】 如果调用无参过程,可以省略 。 可以省略关键字Call,同时也要省略圆括号。,子过程的调用,【例如】 Call Swap( a, b) 有参子过程调用Swap c, d 有参子过程调用Call Sub1 无参子过程调用Sub1 无参子过程调用2、调用子过程的步骤 执行调用语句时,程序“转移入”被调子过程,同时实现“数据传入”。 执行过程体。 过程执行结束时,程序“转移回”主调过程中调用处的下一条语句执行,同时实现“返回数据”。,3、参数传
16、递,【参数传递】调用过程时,主调过程与被调过程之间使用实参和形参进行的“数据交换”。 过程定义时的形式参数简称形参,也称哑元;在调用过程时的实际参数简称实参,也称实元。一般情况下,形参和实参的“个数”、“数据类型”和“顺序位置”都要一一对应。 【参数传递方式】根据形参和实参之间的关系,分为“值传递(传值)”和“地址传递(传址)”两种。参数传递方式在过程定义时由选择,默认为地址传递。,参数传递,传址方式是让形参“引用”对应实参,即形参和实参是同一个参数变量,形参在过程中的改变也相当于再对实参做同样的改变。,参数传递,传值方式只是把实参的值复制一份交给对应形参,形参在过程中的改变不会影响实参,即形参和实参相互独立。,