第六章过程 61Sub过程 62 Function过程 63参数传递 64可选参数和可变参数 65对象参数 6.6作用域和生存期 67常用算法举例
第六章 过程 6.1 Sub过程 6.2 Function过程 6.3 参数传递 6.4 可选参数和可变参数 6.5 对象参数 6.6 作用域和生存期 6.7 常用算法举例
VB已提供的过程:内部函数过程、事件过程; 用户可自编过程:Sub子过程、 Function函数过程。 61Sub过程 由用户编写的、能完成一系列操作动作并实现一定功能的独立 程序模块称作自定义Sub过程(子过程)。rom-x 611Sub过程的建立 AAAAA AAAAAAAAA AAAAAAA点点AAAA 引例 AAAAAAA点 AAAAAAAAA vyyvyyyny vnyyyyy 例6-1编程实现如下功能: my Pvv 单击窗体时打印如图6-1所示的图案 点点AAA AAAAAAAAA 子图案1:由5行字母“A”组成正立三角形; 点点点点 AAAAAAA点点 点AAA点 AAAAAAAAAAA 子图案2:由5行字母“V”组成倒立三角形 mmmr yonne myyrhyyy Drawl:打印子图案1 Draw2O:打印子图案2。 AAAAa AAAAAAAAA 也可以将DaW10和DaW20整合成一个带参数的 AAAAAAAAAAAAA AAAAAAAAAAAAAAAAA DraW12(),i=奇数:完成DraW10功能, vvnnnnyvry yrnnnny vny my i=偶数:完成Draw2()功能(见例6-1a)。 图6-1使用Sub过程
VB已提供的过程:内部函数过程、事件过程; 用户可自编过程:Sub子过程、Function函数过程。 6.1 Sub过程 由用户编写的、能完成一系列操作动作并实现一定功能的独立 程序模块称作自定义Sub过程(子过程)。 6.1.1 Sub过程的建立 1. 引例 例6-1 编程实现如下功能: 单击窗体时打印如图6-1所示的图案。 子图案1:由5行字母“A”组成正立三角形; 子图案2:由5行字母“V”组成倒立三角形。 Draw1():打印子图案1 ; Draw2():打印子图案2。 也可以将Draw1()和Draw2()整合成一个带参数的 Draw12(i),i=奇数:完成Draw1()功能, i=偶数:完成Draw2( )功能(见例6-1a)。 图6-1使用Sub过程
2.SUB过程的一般形式 StaticI[ Private] Sub子过程名(参数列表) 局部变量或常数的定义 语句块1 过程首部 /Exit Sub/ 过程体 语句块2 End sub 理解各部分的含义。 612Sub过程的调用 调用Sub过程的一般形式有二: (1)Call子过程名(参数列表 (2)子过程名[参数列表 说明: (1)有Ca11关键字,则提供的参数也有小括号 (2)无Ca11关键字,则提供的参数也无小括号 (3)如果没有参数,则都不加小括号
2. SUB过程的一般形式 [Static][Public|Private] Sub 子过程名( [参数列表] ) 局部变量或常数的定义 语句块1 [Exit Sub] 语句块2 End Sub 理解各部分的含义。 6.1.2 Sub过程的调用 调用Sub过程的一般形式有二: (1) Call 子过程名([参数列表]) (2) 子过程名 [参数列表] 说明: (1) 有Call关键字,则提供的参数也有小括号; (2) 无Call关键字,则提供的参数也无小括号。 (3) 如果没有参数,则都不加小括号。 过程首部 过程体
62 Function过程 例6-2求s=1!+2!+3!+4!+5!+6!的值,并打印结果。 【分析】可以编写一个函数过程专门计算阶乘;这个求阶乘的函数 过程在此我们取名为Faco 定义函数过程 调用函数过程: Private Function Fac(n%)As Long Private Sub Form ClickO Dim i%. Result# Dim m%. Sum # Result= 1 S uI= For i=1 o n For m=1 To 5 Result result s i Sum= Sum Fac(m) Next i Next m Fac Result Print"1!+2!+.+5!=";Sum End function End sub
6.2 Function过程 例6-2 求s=1!+2!+3!+4!+5!+6!的值,并打印结果。 【分析】可以编写一个函数过程专门计算阶乘;这个求阶乘的函数 过程在此我们取名为Fac。 定义函数过程 Private Function Fac(n%) As Long Dim i%, Result# Result = 1 For i = 1 To n Result = Result * i Next i Fac = Result End Function 调用函数过程: Private Sub Form_Click() Dim m%, Sum # Sum = 0 For m= 1 To 5 Sum = Sum + Fac(m) Next m Print"1!+2!+…+5!="; Sum End Sub
621 Function过程的定义 函数过程的一般格式如下: Static[Public Private] function函数名(参数列表)As类型|气 局部变量或常数的定义 语句块1 函数首部 /Exit Function 函数体 语句块2 函数名=返回值 End function 函数名命名规则同变量名 函数首部末尾的|AS类型是指函数名的类型,也就是返回值的类型 函数名=返回值:必须在函数体内至少对函数名赋值一次 Exit Function]:表示退出函数过程
6.2.1 Function过程的定义 函数过程的一般格式如下: [Static][Public|Private] Function 函数名( [参数列表]) [AS 类型] 局部变量或常数的定义 语句块1 [Exit Function ] 语句块2 函数名=返回值 End Function 函数名命名规则同变量名。 函数首部末尾的[AS 类型] 是指函数名的类型,也就是返回值的类型 函数名 = 返回值:必须在函数体内至少对函数名赋值一次。 [Exit Function] :表示退出函数过程。 函数首部 函数体
622 Function过程的调用 调用 Function过程的一般形式: 变量=函数名([参数列表]) 说明: (1)这里提供的[参数列表]是一些值已知的参数;称实参。 (2)函数过程的调用也可以出现在输出列表中,或作为一个表 达式的参数参与计算。如: Print Fac(5) Y= Sqr(2* Fac(6)-1) (3)如果有时对函数的值不需要,也可以写成一个独立的调用 语句,如: CaI函数名(参数列表] 有Ca11,函数名后面必须也有括号 函数名[参数列表 函数名(参数列表]) 无Ca,函数名后面的括号可有可无
6.2.2 Function过程的调用 调用Function过程的一般形式: 变量=函数名([参数列表]) 说明: (1)这里提供的[参数列表]是一些值已知的参数;称实参。 (2)函数过程的调用也可以出现在输出列表中,或作为一个表 达式的参数参与计算。如: Print Fac(5) Y= Sqr(2 * Fac (6) - 1) (3)如果有时对函数的值不需要,也可以写成一个独立的调用 语句,如: Call 函数名([参数列表]) 有Call,函数名后面必须也有括号。 函数名 [参数列表] 函数名([参数列表]) 无Call,函数名后面的括号可有可无
623通用过程和事件过程 VB中的过程可以分为通用过程和事件过程两类。 通用过程:就是可以被一切其他过程调用的过程,包括上面 所介绍的Sub过程和 Function过程;它们在被调用时才执行。 事件过程:是VB内部已经预定义好的一些过程,但过程的代 码需要用户填写;它们是在发生一定事件的时候被执行。 通用过程可以写在一个窗体模块的代码中,也可以写在标 准模块或类模块的代码中。而事件过程只能写在窗体模块中。 例:改写6-1,增加模块
6.2.3 通用过程和事件过程 VB中的过程可以分为通用过程和事件过程两类。 通用过程:就是可以被一切其他过程调用的过程,包括上面 所介绍的Sub过程和Function过程;它们在被调用时才执行。 事件过程:是VB内部已经预定义好的一些过程,但过程的代 码需要用户填写;它们是在发生一定事件的时候被执行。 通用过程可以写在一个窗体模块的代码中,也可以写在标 准模块或类模块的代码中。而事件过程只能写在窗体模块中。 例:改写6-1,增加模块
63参数传递 631形参和实参 形参:在过程定义模块首行过程名括号中设置的参数叫做形式 参数,简称形参。局部变量,也叫做虚参。内存单元临时分配 被调过程执行完后,形参变量的内存单元被释放”。 实参:主调过程中调用过程时所给出的具体参数,这些参数是 有确定值的(所以说是“实”的),它们可以是直接常量或有 值的变量表达式。 形参n Private Function Fac(n As Integer)As Long Fac= Result 实参5 End function 调用语句:Y=Fac(5) 实参 形参 传值/传地址
6.3 参数传递 6.3.1 形参和实参 形参:在过程定义模块首行过程名括号中设置的参数叫做形式 参数,简称形参。局部变量,也叫做虚参。内存单元临时分配。 被调过程执行完后,形参变量的内存单元被“释放” 。 实参:主调过程中调用过程时所给出的具体参数,这些参数是 有确定值的(所以说是“实”的),它们可以是直接常量或有 值的变量表达式。 实参5 Private Function Fac(n As Integer) As Long …………… Fac = Result End Function 形参n 调用语句:Y=Fac(5) 实参 形参 传值/传地址
参数列表形式By变量名/A类型 6.3.2引用(传地址) 过程定义中无“Byva”关键字;形参得到的是实参的地址, 当形参的值发生改变时,实参的值也相应发生改变。双向影响。 6.3.3传值 过程定义中有“Byva”关键字;形参得到的是实参的值, 形参和实参各有不同存储单元,形参值的改变不会影响实参的值。 单向影响。 例6-3分析下列程序的运行结果 Private Sub multi (x By Val y!) Private Sub Form_ Click Print x=x;y=,y Dim a As single b as X=2*x Single y=2*y多个参数则按其位置 a=2.5 End Sub 顺序一一对应 b=3.5 输出结果是: Call multi(a, b) X=25;y=3.5 Print a=:a::b=: b a=5;b=3.5 End Sub
参数列表形式: [ByVal] 变量名[( )] [As 类型] 6.3.2引用(传地址) 过程定义中无“ByVal”关键字;形参得到的是实参的地址, 当形参的值发生改变时,实参的值也相应发生改变。双向影响。 6.3.3 传值 过程定义中有“ByVal”关键字;形参得到的是实参的值, 形参和实参各有不同存储单元,形参值的改变不会影响实参的值。 单向影响。 例6-3 分析下列程序的运行结果 Private Sub multi (x!, ByVal y!) Print "x="; x; ";y="; y x = 2 * x y = 2 * y ’多个参数则按其位置 End Sub ’顺序一一对应 Private Sub Form_Click() Dim a As Single, b As Single a = 2.5 b = 3.5 Call multi(a, b) Print "a="; a; ";b="; b End Sub 输出结果是: x=2.5; y=3.5 a=5; b=3.5
例6-4试分析下列程序运行后的输出结果 Private Sub Swapl( x As Single, y As Single)“引用 Dim tAs Single =X: x=y: y End Sub Private Sub Swap2( By Val x As single, By val y as single)‘传值 Dim tAs Single X: X=y: y=t End Sub Private Sub Form Click主调过程 Dim a As single, b As single, c As Single, dAs single a=5:b=6:c=15:d=16 Call Swapl(a, b): Call Swap2(c, d) 输出结果: Print a=; a; a 5 Print c=i c; d="; d c=15;d=16 End sub
例6-4 试分析下列程序运行后的输出结果。 Private Sub Swap1(x As Single, y As Single) ‘引用 Dim t As Single t = x : x = y: y = t End Sub Private Sub Swap2(ByVal x As Single, ByVal y As Single) ‘传值 Dim t As Single t = x : x = y: y = t End Sub Private Sub Form_Click() ‘ 主调过程 Dim a As Single, b As Single, c As Single, d As Single a = 5 : b = 6: c = 15 : d = 16 Call Swap1(a, b) :Call Swap2(c, d) Print "a="; a; ";b="; b Print "c="; c; ";d="; d End Sub 输出结果: a=6;b=5 c=15;d=16