vb6.0高清教程系列_第06章_过程(共九章)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Байду номын сангаас
Private Sub Swap(x%,y%) Dim temp% Temp=X X=Y Y=Temp End Sub
6.3 Function过程
Visual Basic函数分为内部函数和外部函数,外部函数 是用户根据需要用Function关键字定义的函数过程,与子 过程不同的是函数过程将返回一个值 。 6.3.1 函数过程(Function过程)的定义 [Public|Private][Static]Function 函数名([<参 数列表>])[As<类型>] <局部变量或常数定义> <语句块> 函数体[函数名=返回值] 函数体 [Exit Function] <语句块> [函数名=返回值] End Function
补充例题2:排序子过程
选择法排序(升序)的VB程序: For i = 1 To n - 1 p = i For j = i + 1 To n If a(p) > a(j) Then p = j Next j temp = a(i) a(i) = a(p) a(p) = temp Next i 如何写一个排序的VB过程?
说明: Ø递归处理一般用栈来实现,分递推和回归两个过程,如上 图所示。 Ø递推过程:每调用一次自身,把当前参数(形参、局部变 量、返回地址等)压入栈,直到递归结束条件成立。 Ø回归过程:然后从栈中弹出当前参数,直到栈空。 Ø递归算法设计简单,解决同一问题,使用递归算法消耗的 机时和占据的内存空间要比使用非递归算法大。 使用递归算法必须要满足以下的递归条件: § § (1)存在递归结束条件及结束时的值; (2)能用递归形式表示,且递归向终止条件发展。
Private Sub Sort( a( ) As single) Dim i%,j%,p%,n%,temp! n=Ubound(a) For i = 1 To n - 1 p = i For j = i + 1 To n If a(p) > a(j) Then p = j Next j temp = a(i) a(i) = a(p) a(p) = temp Next I End Sub
6.3.2 函数的调用
调用形式如下: 函数名(实参列表) 说明: 在调用时实参和形参的数据类型、顺序、个数必须匹 配。函数调用只能出现在表达式中,其功能是求得函数 的返回值。 例6.3
6.4 过程之间参数的传递
Visual Basic中不同模块(过程)之间数据的传递有两种 方式: Ø 通过过程调用实参与形参的结合实现; Ø使用全局变量来实现各过程中共享数据。
2.被调过程可通过Lbound和Ubound函数确定实参数组的 上、下界。 3.当用数组作形参时,对应的实参必须也是数组,且类型 一致。 4.实参和形参结合是按地址传递,即形参数组和实参数组 共用一段内存单元。 例如:定义了实参数组b(1 to 8),给它们赋了值,调用Sort() 函数过程的形式如下: Sort b() 或 Call Sort(b() ) 实参数组后面的括号可以省略,但为便于阅读,建议一般 不要省略为好。
(2)形式参数列表:形式参数通常简称“形参”,仅表示形 参的类型、个数、位置,定义时是无值的,只有在过程被调 用时,虚实参结合后才获得相应的值。 (3)过程可以无形式参数,但括号不能省。 (4)参数的定义形式: [ByVal|ByRef]变量名[( )][As 类型][,…], ByVal表示当该过程被调用时,参数是按值传递的;缺省或 ByRef表示当该过程被调用时,参数是按地址传递的。 例6.1编一个交换两个整型变量值的子过程。 Private Sub Swap( X As Integer, Y As Integer) Dim temp As Integer Temp=X : X=Y : Y=Temp End Sub
程序调用执行过程:
值传递的执行过程如下图:
通过地址传递数据的执行过程
6.5 数组作过程的参数
Visual Basic允许把数组作为实参传送到过程中。数组作 参数是通过传地址方式传送。在传送数组时,除遵守参数 传送的一般规则外,还应注意以下几点: 1.为了把一个数组的全部元素传送给一个过程,应将 数组名分别写入形参表中,并略去数组的上下界,但括号 不能省略。 Private Sub Sort( a() As single) …… End Sub 其中形参“a( )”即为数组。
调用时形参数组a和实参数组b虚实结合,共用一段内存单 元,如图6-7所示。因此在Sort()过程中改变数组a的各元素 值,也就相当于改变了实参数组b中对应的元素的值,当调 用结束时,形参数组a成为无定义。 b(1) a(1) b(2) a(2) b(3) a(3) b(4) a(4) b(5) a(5) b(6) a(6) b(7) a(7) b(8) a(8)
6.4.1 形式参数与实际参数
1、形式参数 是指在定义通用过程时,出现在Sub或Function语句中的 变量名后面园括号内的数,是用来接收传送给子过程的数 据,形参表中的各个变量之间用逗号分隔。
2、实际参数 实际参数是指在调用Sub或Function过程时,写入子过程名 或函数名后括号内的参数,其作用是将它们的数据(数值或 地址)传送给Sub或Function过程与其对应的形参变量。 实参可由常量、表达式、有效的变量名、数组名(后加 左、右括号,如A())组成,实参表中各参数用逗号分隔。
6.2.4 过程的调用
1 子过程的调用 子过程名 [参数列表] 或 Call 子过程名(参数列表) 2 函数过程的调用 变量名 = 函数过程名([参数列表]) 说明: (1)参数列表称为实参或实元,它必须与形参保持个数相 同,位置与类型一一对应。 (2)调用时把实参值传递给对应的形参。其中值传递(形 参前有ByVal说明)时实参的值不随形参的值变化而改变。 而地址传递时实参的值随形参值的改变而改变。
6.2.3 子过程的建立
通过 “工具”菜单中的“添加过程”命令,出现“添加过程 ”对 话框(见图6.1),选择过程类型(子过程、函数、属性、事 件)及作用范围(公有的Public、私有的Private),单击确定 后得到一个过程或函数定义的结构框架(模板),如: Public Sub Sort( ) …… End Sub
如何调用该函数呢? 使用该函数,编一验证哥德巴赫猜想。
Private Sub Form_Click() Dim n%,n1%,n2% n=Val(InputBox("输入大于6的正整数")) For n1=3 to n\2 step 2 ' 让n1从3开始分解 n2=n-n1 ' 求得n2 ‘ 如果n1和n2都是素数,则打印输出 If prime(n1) And prime(n2) then Print n & "=" & n1 & "+" & n2 Exit For ' 结束循环 End if Next n1 End Sub
(3)当参数是数组时,形参与实参在参数声明时应省略 其维数,但括号不能省。 (4)调用子过程的形式有两种,用Call关键字时,实参 必须加圆括号括起,反之则实参之间用“,”分隔。 例:调用上面定义的Sawp子过程的形式: Swap a,b Call Swap(a,b)
过程调用的执行过程:
Private Sub CmdOK() …… Call Swap(a,b) …… Swap a,b End Sub
说明:
(1)函数名:命名规则与变量名规则相同。但不能与系统的 内部函数或其它通用子过程同名,也不能与已定义的全局变 量和本模块中模块级变量同名。 (2)在函数体内,函数名可以当变量使用,函数的返回值就 是通过对函数名的赋值语句来实现的,在函数过程中至少要 对函数名赋值一次。 (3)AS类型:是指函数返回值的类型,若省略,则函数返 回变体类型值(Variant)。 (4)Exit Function:表示退出函数过程,常常是与选择结构 (If或Select Case语句)联用,即当满足一定条件时,退出函 数过程。 (5)形参数列表:形参的定义与子过程完全相同。 例6.2
子过程的定义形式如下: [Public|Private][Static] Sub 子过程名([形参表]) <局部变量或常数定义> <语句组> [Exit Sub] <语句组> End Sub
说明:
(1)子过程名:命名规则与变量名规则相同。子过程名不 返回值,而是通过形参与实参的传递得到结果,调用时可 返回多个值。
第六章 过 程
6.1 过程概述
在VB5.0/6.0中,除了系统提供的内部函数过程 和事件过程外,用户可自定义过程下列四种过 程: Ø▲ “Sub” 保留字开始的为子过程 Ø▲“Function” 保留字开始的为函数过程 Ø “Property”保留字开始的为属性过程 Ø“Event”保留字开始的事件过程
Private Function fac(n As Integer) As Integer
If n = 1 Then fac = 1 Else fac = n * fac(n - 1) End If End Function Private Sub Form_Click() Print “fac(4)=”;fac(4) End Sub 程序的递归过 程:
参数为数组时虚实结合示意图 例6.7 改写上章例5.3的排序程序,分别将排序用子过程 Sort(),产生N个随机整数用子过程GetData(),输入N个数组 元素用PrData()子过程来完成。
补充例题: 编写判断一个整数是不是素数写函数过程。 如果给定的整数是素数,则返回逻辑值True,否则返回False
6.4.2 参数传递(虚实结合)
参数传递指主调过程的实参(调用时已有确定值和内存 地址的参数)传递给被调过程的形参,参数的传递有两种方 式:按值传递、按地址传递。形参前加“ByVal”关键字的是 按值传递,缺省或加“ByRef”关键字的为按地址传递。
传址与传值 传址: 形参得到的是实参的地址,当形参值的改变同 时也改变实参的值。 传值: 形参得到的是实参的值,形参值的改变不会影 响实参的值。 例6.4
6.6 过程的嵌套和递归调用
6.6.1 过程的嵌套
在程序中调用一子过程,而在子过程中又调用另外的子过 程,这种程序结构称为过程的嵌套。过程的嵌套调用执行过 程如下图:
6.6.2 过程的递归调用
用自身的结构来描述自身,称递归。例如,对阶乘的定义:
Visual Basic允许在一个Sub子过程和Function过程的定义 内部调用自己,即递归Sub子过程和递归Function函数。 例6.8 编求阶乘fac(n)=n! 的递归函数
Sub Swap1(ByVal x%, ByVal y%) Dim Temp% Temp = x: x = y: y = Temp End Sub Sub Swap2(x%, y%) Dim Temp% Temp = x: x = y: y = Temp End Sub
Private Sub CmdOK_Click() a% = 10: b% = 20: Swap1 a, b Print "A1="; a, "B1="; b a = 10: b = 20: Swap2 a, b Print "A2="; a, "B2="; b End Sub '传地址 ‘传 值
6.2 Sub过程
在VB中,的Sub子过程分为:事件过程和通用过程 6.2.1 事件过程 (1)窗体事件的语法 Private Sub Form_事件名(参数列表) <语句组> End Sub (2)控件事件的语法 Private Sub 控件名_事件名(参数列表) <语句组> End Sub
6.2.2 通用过程(Sub过程)的定义
Private Function Prime(n As Integer) Boolean Dim k%,Yes As Boolean Yes=True For k=2 to n\2 IF n mod k =0 then Yes=False : Exit For Next k Prime=Yes ‘ 给函数名赋值,作为函的返回值 End Function As
相关文档
最新文档