二、子过程 函数过程的不足: (1)不是为了获得某个函数值,而是为了某种功能的处理,如例1.1。 (2)要获得多个结果。 1.引例 编写一个两个数交换的过程供多次调用。 Swap(xy)子过程的定义 主调程序调用Swap子过程 Public Sub Swap(x,y)Private Sub Form Click() Dim t Dim a,b t=x a=10 x-y b=20 y=t Call Swap (a,b) End Sub Print "a=";a,",b=";b End Sub
二、子过程 函数过程的不足: (1)不是为了获得某个函数值,而是为了某种功能的处理,如例1.1。 (2) 要获得多个结果。 1.引例 编写一个两个数交换的过程供多次调用。 Swap (x,y)子过程的定义 主调程序调用Swap子过程 Public Sub Swap(x, y)Private Sub Form_Click() Dim t Dim a, b t = x a = 10 x = y b = 20 y = t Call Swap (a, b) End Sub Print "a=";a,",b="; b End Sub
2子过程定义 Sub子过程名[(参数列表] 局部变量或常数定义 语句 [Exit Sub] 语句 End Sub 3子过程的调用 子过程名[参数列表] 或 ca子过程名(参数列表 4.子过程与函数过程区别: (1)函数过程名有值,有类型,在函数体内至少赋值一次: 子过程名无值,无类型,在子过程体内不能对子过程名赋值: (2)调用时,子过程调用是一句独立的语句。 函数过程不能作为单独的语句加以调用,必须参与表达式运算。 (3)一般当过程有一个函数值,使用函数过程较直观; 反之若过程无返回值,或有多个返回值,使用子过程较直观
2 子过程定义 Sub 子过程名[(参数列表)] 局部变量或常数定义 语句 [Exit Sub] 语句 End Sub 3 子过程的调用 子过程名 [参数列表] 或 Call 子过程名(参数列表 4.子过程与函数过程区别: (1)函数过程名有值,有类型,在函数体内至少赋值一次; 子过程名无值,无类型,在子过程体内不能对子过程名赋值; (2)调用时,子过程调用是一句独立的语句。 函数过程不能作为单独的语句加以调用,必须参与表达式运算。 (3)一般当过程有一个函数值,使用函数过程较直观; 反之若过程无返回值,或有多个返回值,使用子过程较直观
例6.4分别编一计算某级数部分和的子过程和函数过程,并调用。 级数为: 1+x+ 精度为 eps 2 n. 用函数过程实现求部分级数和 ·用子过程实现求部分级数和 Function jishul(x!,eps#As Double Sub jishu2(s# x, 印$掬 Dim n%,st# Dim n%,t# n=1:s=0:t=1 n=1:s=0:t=1 Do While(Abs(t)>=印s) Do While (Abs(t)>=eps) s=s+t:t=t*x/n s=s+t:t=t*x/n n=n+1 n=n+1 Loop Loop jishul =s End Sub End Function 调用逯数过程 调用子过程 f1 iishu1(2#0 000001) Call iishu2f2 2#n n00001)
例6.4 分别编一计算某级数部分和的子过程和函数过程,并调用。 级数为: 精度为:. ! . 2! 1 2 + + + + + n x x x n eps ! n x n
程序运行流程: Private Sub Command1 Click( Dimfl#,f2# 找函数名调用ishu1 Function jishul(x!,eps#)As Doubl f1=jishu1(2#,0.000001) 函数名带了值返回 ishu=表达式 End Function 找子过程名调用jishu2⑥ Call jishu2(f2,2#,0.000001) Prin"f1=";f1,"f2=";f2 End ub 表达式 End Sub
程序运行流程: Private Sub Command1_Click() Dim f1#, f2# f1 = jishu1(2#, 0.000001) Call jishu2(f2, 2#, 0.000001) Print "f1="; f1, "f2 = "; f2 End Sub Function jishu1(x!, eps#) As Doubl . jishu=表达式 End Function 找函数名调用jishu1 函数名带了值返回 Sub jishu2(s#, x!, eps#) . s=表达式 End Sub ① ② ③ ④ ⑤ 找子过程名调用jishu2 ⑥ ⑦ ⑧
三、参数传递 指主调过程的实参传递给被调过程的形参。 1.传址与传值 传址: 形参得到的是实参的地址,当形参值的改变同时也改变实参的值。 传值: 形参得到的是实参的值,形参值的改变不会影响实参的值。 例6.5两个变量的交换 Sub Swap1(ByVal x%,ByVal y%) Sub Swap2(x%,y%) t%=x:x=y:y=t t%=x:x=y:y=t End Sub End Sub Private Sub Command1_Click() ByVal传值 传地址 a%=10:b%=20:Swap1a,b'传值 a Print "A1=";a,"B1=";b 实参 10 10 a=10:b=20:Swap2 a,b 传地址 Print "A2=";a,"B2=";b X End Sub 形参 10 a的地址
三、 参数传递 指主调过程的实参传递给被调过程的形参。 1. 传址与传值 传址: 形参得到的是实参的地址,当形参值的改变同时也改变实参的值。 传值: 形参得到的是实参的值,形参值的改变不会影响实参的值。 例6.5 两个变量的交换 Sub Swap1(ByVal x%, ByVal y%) t% = x: x = y: y = t End Sub Private Sub Command1_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 Sub Swap2(x%, y%) t% = x: x = y: y = t End Sub 10 a 的地址 10 10 a a x x 形参 实参 ByVal 传值 传地址