第5章 过程和函数(2)

2020-05-13 10:08

A = Val(InputBox(\请

输入矩形长度?\

B = Val(InputBox(\请输入矩形宽度?\ Call Recarea(A, B. End Sub

Sub Recarea(Rlen As Single, Rwid As Single) Dim Area As Single Area = Rlen * Rwid

MsgBox \总面积是 \输出矩形面积 End Sub

在以上实例中,子过程Recarea用来计算矩形面积并显示计算结果,主调程序

Form_Click提供实际参数A、B,分别为矩形的长和宽。当执行到主调程序中的语句Call Recarea子过程时,程序流程进入Recarea子过程内部,实际参数A、B分别传递给形式参数Rlen,Rwid,直到遇到End Sub语句才结束Recarea子过程,返回到主调程序Form_Click中。

5.3 函数过程的定义和调用

函数过程是过程的另一种形式,当过程的执行需要返回一个值时,使用函数就比较简单。Function过程和内部函数一样,可以在程序或函数嵌套中使用。

5.3.1创建用户自定义函数过程

与Sub过程一样,Function过程也是一个独立的过程,可读取参数、执行一系列语句并改变其参数的值。创建用户自定义函数过程有两种方法:直接在“代码”编辑窗口中输入函数过程代码或使用“添加过程”对话框。

1.在“代码”编辑窗口中输入

在“代码”编辑窗口中,把光标定位在已有过程的外面,然后按如下格式输入函数过程:

[Private|Public] [Static] Function <函数过程名>([<形参

表>]) [As <类型>] <语句系列>

[<函数名>=<表达式>] [Exit Function] [<语句系列>]

[<函数名>=<表达式>]

End Function 说明:

1) Public|Private

与在子过程一样的作用范围。 2) Static

与在子过程一样的作用。 3) 函数过程名

函数过程名的命名规则与变量名相同,长度不超过40个字符,同样,一个过程名只能有唯一的名字在同一模块中,同一名称不能既作Function函数过程名又作Sub过程名。As <类型>指定Function过程返回值的类型,可以是Integer,Long,Single,Double,Currency,String或Boolean。如果没有As子句,缺省的类型为Variant。

4) 语句系列

是函数的过程体,语句系列中可以用一个或多个Exit Function语句从函数中退出。 5) 形参表

形参表的含义与Sub相同。 6) 表达式

表达式的值是函数返回的结果。在程序中,通过赋值语句将值赋给函数名,该值就是Function过程返回的值。如果在Function过程中省略了“<函数名>=<表达式>”,则该过程返回一个默认值:数值函数过程返回0,字符串函数过程返回空字符串。因此,为了能使一个Function过程完成所指定的操作,通常要在过程中为函数赋值。

2.使用“添加过程”对话框

使用“添加过程”对话框建立过程的步骤与添加子过程步骤一致,只是在“添加过程”对话框中选择类型为“函数”即可。

5.3.2调用函数过程 1.调用方法

函数过程的调用比较简单,可以像使用VB内部函数一样来调用Function过程,只需要在表达式中写上它的名字。其语法格式如下:

变量=函数名(实参1,实参2,实参3,?,实参n)

显然,与调用子程序的方法不同,自定义函数的调用遵循内部函数(如Sin、Abs、ASC等)的调用规则,实参也必须用圆括号括起来。

2.使用说明

实参可以是常量、变量、表达式或数组变量名。实参数据的类型应与子程序定义时的形式参数类型一致。当子程序的形参传送方式是地址传递时,调用时的实参必须是变量,不允许是常量或表达式。

例如:

a=Myfunction(5,10,1)

3.实例应用

【例5.2】求1到6的阶乘之和,即1!+2!+…+6!

Function fact(x As Integer) As Long

Dim P As Long, i As Integer P = 1

For i = 1 To x P = P * i Next i fact = P End Function

Private Sub Command1_Click() Dim sum As Long, i As Integer For i= 1 To 6

sum = sum + fact(i) Next i

Label2.Caption = sum End Sub

以上实例中的fact函数用来完成x!的计算,主调程序Command1_Click用语句sum = sum + fact(I)来完成函数fact的调用,将实参I的值传递给形参x,在函数fact中赋值语句fact = P将x!的值通过函数名返回到主调程序中。在主调程序的循环体循环6次就完成了1!,2!,?,6!的计算,并进行求总和,将总和在标签Label2中显示。

5.3.3函数过程与子过程的区别 函数过程与子过程的区别如下:

1)适用范围

把某功能函数定义为函数过程或子过程,没有严格的规定,但只要能用函数过程定义的,一定能用子过程定义,反之不一定。因此子过程比函数过程适用范围广。但当只需要返回一个值时,习惯用函数过程,当需要返回多个值时,习惯用子过程。

2)返回值

函数过程有返回值,函数过程名也就有类型,同时在函数过程体内必须对函数过程名赋值。子过程名没有值,子过程名也就没有类型,不能在子过程体内对子过程名赋值。

3.实例应用

【例5.3】VB提供了一个标准函数Replace(),实现查找与替换的功能。现在分别用用户自定义子过程和函数过程来实现。

Public Function MyReplace(s$, OldS$, NewS$) As String Dim i%, lenOldS% lenOldS = Len(OldS) i = InStr(s, OldS) Do While i > 0

s = Left(s, i - 1) + NewS + Mid(s, i + lenOldS) i = InStr(s, OldS) Loop

MyReplace = s End Function

Public Sub sMyReplace(s$, OldS$, NewS$) Dim i%, lenOldS%

lenOldS = Len(OldS) i = InStr(s, OldS) Do While i > 0

s = Left(s, i - 1) + NewS + Mid(s, i + lenOldS) i = InStr(s, OldS) Loop End Sub

Private Sub Command1_Click() Dim str As String

Print MyReplace(Text1, Text2, Text3)

str = Text1

Call sMyReplace(str, Text2, Text3) Text1.Text = str End Sub

在上述Command1_Click中,替换后的值通过函数名返回,而在子过程中只有通过变量str作为数据通道来传递。特别指出,对象属性不能完成地址方式的传递。

5.4 过程调用中的参数传递

调用过程的目的,就是在一定的条件下完成某一工作或计算某一数值。调用过程时可以把数据传递给过程,也可以把过程中的数据传递回来。在调用过程中,必须考虑调用过程和被调用过程之间的数据的调用方式。VB中用参数来实现主调过程和被调过程间的数据传递。

通常在编制一个过程时,要考虑它需要输入哪些量,进行处理后输出哪些量。正确地提供一个过程的输入数据和正确地引用其输出数据,时使用过程的关键问题,也就是通过调用过程和被调用过程之间的数据传递问题。

5.4.1形式参数与实际参数 1. 形式参数

形式参数是接收数据的变量。形式参数表中的各个变量之间用逗号分隔。形式参数表中的变量类型可以是合法的简单变量,也可以是数组如A(),但不能是定长字符串。例如在形参表中只能用如Str1 As String之类的变长字符串作为形式参数,不能用Str1 As String*40之类地定长字符串作为形式参数,但定长字符串可以作为实际参数传递给过程。

2. 实际参数

实际参数是指在调用Sub或Function过程时,传递给Sub或Function 过程的常量、变量或表达式。实参表可由常量、表达式、合法的变量名、数组名(后跟左、右括号)组成,实参表中各参数用逗号分隔。

形式参数与实际参数的对应关系用下图5-4所示:

调用过程: Call Sub1(23, A(), \

被调用过程: Sub Sub1(a As Integer, aa() As Single, bb As String, cc As Long)

图5-4 形参与实参的对应关系

在定义过程时,形式参数为实际参数保留位置。在调用过程时,实际参数被插入对应形式参数变量处,第1个形式参数接收第1个实际参数的值,第2个形式参数接收第2个实际参数的值,依此类推。如上图5-6中,调用过程提供实际参数23、A()、\、rest,被调子过程Sub1提供形式参数aa、a()、bb、cc。当执行调用时,实参23传递给a,实参A()传递给aa(),实参\传递给bb,实参rest传递给cc。在调用时完成形式参数与实际参数的结合,即把实际参数传递给形式参数,然后按形式参数执行被调用的过程。

5.4.2值传递和地址传递

参数传递的方式有两种:值传递和地址传递。

1. 值传递

如果在定义形式参数时使用了ByVal,或者在调用语句中的实际参数是常量或表达式,那么实参与形参之间数据传递方式是值传递。

在调用过程时,当实参是常量时,直接将常量值传递给形参变量中;当实参是变量时,仅仅将实参变量的值传递给形参变量。然后执行被调过程,在被调过程中,即使对形参发生改变也不会影响实参值的变化。


第5章 过程和函数(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:数列求通项公式的常用方法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: