第四章函数和过程.ppt_第1页
第四章函数和过程.ppt_第2页
第四章函数和过程.ppt_第3页
第四章函数和过程.ppt_第4页
第四章函数和过程.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章函数和过程, “Sub” 保留字开始的为子过程 “Function” 保留字开始的为函数过程 例如 Private Sub Command1_Click() Form1.FontSize = 20 Form1.Print 这是一个sub过程 End Sub,在VB5.0/6.0中,除了系统提供的内部函数过程和事件过程外,用户可自定义过程下列四种过程:,在VB中,的Sub子过程分为:事件过程和通用过程 事件过程 (1)窗体事件的语法 Private Sub Form_事件名(参数列表) 语句组 End Sub (2)控件事件的语法 Private Sub 控件名_事件名(参数列表) 语句组

2、 End Sub,Sub过程,问题的引出,For i = 1 To n e = e + x i / fact(i) Next i,Private Function fact(k As Integer) As Long Dim i As Integer fact = 1 For i = 1 To k fact = fact * i Next i End Function,Function过程,Visual Basic函数分为内部函数和外部函数,外部函数是用户根据需要用Function关键字定义的函数过程,与子过程不同的是函数过程将返回一个值 。,函数过程(Function过程)的定义,Publi

3、c|PrivateStaticFunction 函数名()As Exit Function 函数名=返回值 End Function,说明: (1)在函数体内,函数名可以当变量使用,函数的返回值就是通过对函数名的赋值语句来实现的,在函数过程中至少要对函数名赋值一次。 (2)AS类型:是指函数返回值的类型,若省略,则函数返回变体类型值(Variant)。 (3)Exit Function:表示退出函数过程,常常是与选择结构(If或Select Case语句)联用,即当满足一定条件时,退出函数过程。,函数的调用,调用形式如下: 函数名(实参列表) 或 函数名 实参列表 或 变量=函数名(实参列表)

4、或 call 函数名(实参列表) 说明: 在调用时实参和形参的数据类型、顺序、个数必须匹配。函数调用只能出现在表达式中,其功能是求得函数的返回值。,例4-2,找出亲密数对(ab, 但a的因子和 等于b,而b的因子和等于a),For a = 6 To 5000 b = f1(a) c = f1(b) If c = a And a b Then Form1.Print a, b Next a,只有b为a 的因子和,才来检验b的因子和是否与a 相等,Private Function f1(n As Integer) As Integer Dim i As Integer f1 = 1 For i =

5、 2 To n / 2 If n Mod i = 0 Then f1 = f1 + i Next i End Function,符合条件,I 为因子,累加,例4-3,显示1-1000之间的素数,要求编制函数过程,用于判断1个整数是否是素数,For i = 1 To 1000 If prime(i)=true Then Print i, k = k + 1 If k Mod 6 = 0 Then Print 每行输出6个 End If Next i,Private Function prime(n As Integer) As Boolean If n Sqr(n) Then prime = T

6、rue Else prime = False End If End Function,例4-4, 计算a数组中最大值与b数组中最大值之差,m = InputBox(输入a数组元素的个数, 1=m=20) n = InputBox(输入b数组元素的个数, 1=n=20) ReDim a(m) As Single, B(n) As Single For i = 1 To m a(i) = InputBox(a( + Str(i) + ), 输入数组a) Next i For i = 1 To n B(i) = InputBox(b( + Str(i) + ), 输入数组b) Next i Prin

7、t fmax(a(), m) - fmax(B(), n),Private Function fmax(x() As Single, ByVal n As Byte) As Single Dim i As Integer fmax = x(1) For i = 2 To n If x(i) fmax Then fmax = x(i) Next i End Function,例4-5,编写一个函数,其功能是求一个二维数组中全体元素的和,Private Sub form_click() Dim x(2, 3) As Single x(1, 1) = 1: x(1, 2) = 2: x(1, 3)

8、= 3 x(2, 1) = 2: x(2, 2) = 3: x(2, 3) = 4 Form1.Print f4(x(), 2, 3) End Sub,Private Function f4(a() As Single, m As Byte, n As Byte) As Single Dim i As Byte, j As Byte For i = 1 To m For j = 1 To n f4 = f4 + a(i, j) Next j Next i End Function,子过程的定义形式如下: Public|PrivateStatic Sub 子过程名(形参表) 语句组 语句组 En

9、d Sub,通用过程(Sub过程)的定义,说明: (1)子过程名:命名规则与变量名规则相同。子过程名不返回值,而是通过形参与实参的传递得到结果,调用时可返回多个值。,(2)形式参数列表:形式参数通常简称“形参”,仅表示形参的类型、个数、位置,定义时是无值的,只有在过程被调用时,虚实参结合后才获得相应的值。 (4)参数的定义形式: ByValByRef变量名( )As 类型,, ByVal表示当该过程被调用时,参数是按值传递的;缺省或ByRef表示当该过程被调用时,参数是按地址传递的。,编一个交换两个整型变量值的子过程。 Private Sub Swap( X As Integer, Y As

10、Integer) Dim temp As Integer Temp=X : X=Y : Y=Temp End Sub,过程的调用 1 子过程的调用 子过程名 参数列表 或 Call 子过程名(参数列表) 说明: (1)参数列表称为实参或实元,它必须与形参保持个数相同,位置与类型一一对应。 (2)调用时把实参值传递给对应的形参。其中值传递(形参前有ByVal说明)时实参的值不随形参的值变化而改变。而地址传递时实参的值随形参值的改变而改变。,(3)当参数是数组时,形参与实参在参数声明时应省略其维数,但括号不能省。 (4)调用子过程的形式有两种,用Call关键字时,实参必须加圆括号括起,反之则实参之

11、间用“,”分隔。 例:调用上面定义的Swap子过程的形式: Swap a,b Call Swap(a,b),例4-6,Private Sub prn(m As Byte, n As Byte, zf As String) Print Space(m); String(n, zf) End Sub Private Sub form_click() Dim i As Byte For i = 1 To 4 Call prn(6 - i, 2 * i - 1, *) Next i For i = 1 To 3 Call prn(3, 5, #) Next i End Sub,For i = 1 To

12、 6 b(i) = InputBox(b( + Str$(i) + )=, ) Next i Call sort(b(), 6) For i = 1 To 6 Print b(i), Next i,例4-7编程,将数组中各元素按值从大到小排序, 要求将数组排序编写为sub过程,Private Sub sort(a() As Single, ByVal n As Byte) Dim i As Byte, j As Byte, k As Byte, temp As Single For i = 1 To n - 1 k = i For j = i + 1 To n If a(j) a(k) The

13、n k = j Next j temp! = a(k): a(k) = a(i): a(i) = temp! Next i End Sub,过程之间参数的传递,Visual Basic中不同模块(过程)之间数据的传递有两种方式: 通过过程调用实参与形参的结合实现; 使用全局变量来实现各过程中共享数据。,形式参数与实际参数,1、形式参数 是指在定义通用过程时,出现在Sub或Function语句中的变量名后面园括号内的数,是用来接收传送给子过程的数据,形参表中的各个变量之间用逗号分隔。,2、实际参数 实际参数是指在调用Sub或Function过程时,写入子过程名或函数名后括号内的参数,其作用是将它

14、们的数据(数值或地址)传送给Sub或Function过程与其对应的形参变量。 实参可由常量、表达式、有效的变量名、数组名(后加左、右括号,如A())组成,实参表中各参数用逗号分隔。,参数传递(虚实结合),参数传递指主调过程的实参(调用时已有确定值和内存地址的参数)传递给被调过程的形参,参数的传递有两种方式:按值传递、按地址传递。形参前加“ByVal”关键字的是按值传递,缺省或加“ByRef”关键字的为按地址传递。,传址与传值 传址: 形参得到的是实参的地址,当形参值的改变同时也改变实参的值。 传值: 形参得到的是实参的值,形参值的改变不会影响实参的值。,Sub Swap2(x as doubl

15、e, y as double) Dim T as double T = x: x = y: y = T End Sub,Sub Swap1(ByVal x as double, ByVal y as double) Dim T as double T = x: x = y: y = T End Sub,Private Sub CmdOK_Click() Dim a%,b% 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,Su

16、b Swap2(x%, y%) Dim Temp% Temp = x: x = y: y = Temp End Sub,Sub Swap1(ByVal x%, ByVal y%) Dim Temp% Temp = x: x = y: y = Temp End Sub,值传递的执行过程如下图:,通过地址传递数据的执行过程,有关过程之间数据传递的几点说明,1参数的数据类型,2 按值传递参数,3 按地址传递参数,注意:在子过程和函数过程调用时,如果实参是常量(包括系统常量、用Const自定义的符号常量)或表达式,无论在定义时使用值传递还是地址传递,此时都是按值传递方式将常量或表达式计算的值传递给形参

17、变量。 如果形参定义是按传地址方式,但调用时想使实参变量按值方式传递,可以把实参变量加上括号,将其转换成表达式即可。,参数的传递问题:,4使用子过程还是使用函数过程 解决一个问题既可以使用子过程,也可以使用函数过程,是使用子过程还是使用函数过程呢?如果是需要求得一个值,一般情况使用函数过程,如不是为了求一个值,而是完成一些操作,或需要返回多个值,则使用子过程比较方便。,分别编写计算下面级数的子过程和函数过程,并在窗体的单击事件中调用。 级数为, 要求精度为:,数组作过程的参数,Visual Basic允许把数组作为实参传送到过程中。数组作参数是通过传地址方式传送。在传送数组时,除遵守参数传送的

18、一般规则外,还应注意以下几点: 1为了把一个数组的全部元素传送给一个过程,应将数组名分别写入形参表中,并略去数组的上下界,但括号不能省略。 Private Sub Sort( a() As single) End Sub 其中形参“a( )”即为数组。,2被调过程可通过Lbound和Ubound函数确定实参数组的上、下界。 3当用数组作形参时,对应的实参必须也是数组,且类型一致。 4实参和形参结合是按地址传递,即形参数组和实参数组共用一段内存单元。 例如:定义了实参数组b(1 to 8),给它们赋了值,调用Sort()函数过程的形式如下: Sort b() 或 Call Sort(b() ) 实参数组后面的括号可以省略,

温馨提示

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

评论

0/150

提交评论