《VB语言程序设计过程.ppt》由会员分享,可在线阅读,更多相关《VB语言程序设计过程.ppt(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、过程过程第七章第七章 第第第第7 7章章章章 过程过程过程过程本章内容通用过程通用过程参数传递参数传递嵌套调用嵌套调用过程、变量的作用域过程、变量的作用域程序举例程序举例多窗体与多窗体与Sub Main过程过程Function过程过程Sub过程过程第第第第7 7章章章章 过程过程过程过程引言 在在VBVB中的两种过程:中的两种过程:(1 1)由系统提供过程)由系统提供过程系统提供的系统提供的内部函数过程内部函数过程(如如sqrsqr函数函数)和和事件过程事件过程(clickclick事件)。事件)。(2 2)由用户自定义过程)由用户自定义过程用户根据实际应用的需要而自行设计的过程用户根据实际应
2、用的需要而自行设计的过程,这样的这样的过程称为过程称为“通用过程通用过程”第第第第7 7章章章章 过程过程过程过程引言 通用过程分为两类:通用过程分为两类:函数过程:以函数过程:以函数过程:以函数过程:以FunctionFunction保留字开始的过程。保留字开始的过程。保留字开始的过程。保留字开始的过程。子程序过程:以子程序过程:以子程序过程:以子程序过程:以SubSub保留字开始的过程;保留字开始的过程;保留字开始的过程;保留字开始的过程;第第第第7 7章章章章 过程过程过程过程例例5.19 5.19 求解求解s=1!s=1!+2!+3!+10!+2!+3!+10!的值的值 采用两种不同解
3、法采用两种不同解法采用两种不同解法采用两种不同解法 (1 1)解法一:采用)解法一:采用)解法一:采用)解法一:采用两重循环两重循环两重循环两重循环,外循环,外循环,外循环,外循环1010次,每次循环计算一次次,每次循环计算一次次,每次循环计算一次次,每次循环计算一次阶乘,把每次阶乘值累加起来,即得求解结果。阶乘,把每次阶乘值累加起来,即得求解结果。阶乘,把每次阶乘值累加起来,即得求解结果。阶乘,把每次阶乘值累加起来,即得求解结果。Dim s As Long,t As Long Dim s As Long,t As Long s=0 s=0 For j=1 To 10 For j=1 To 1
4、0 计算计算计算计算1010个阶乘个阶乘个阶乘个阶乘 t=1t=1 计算计算计算计算1 1个阶乘前,先赋初值个阶乘前,先赋初值个阶乘前,先赋初值个阶乘前,先赋初值 For k=1 To jFor k=1 To j 计算计算计算计算j!j!,需要循环,需要循环,需要循环,需要循环j j次次次次 t=t*kt=t*k 连乘连乘连乘连乘j j次次次次 Next kNext k s=s+t s=s+t 把每次计算得到的阶乘值把每次计算得到的阶乘值把每次计算得到的阶乘值把每次计算得到的阶乘值t t累加累加累加累加 Next j Next j Print s Print s第第第第7 7章章章章 过程过程
5、过程过程阶乘阶乘阶乘阶乘n!(n!n!(n!123n)123n)Private Sub Form_Load()Private Sub Form_Load()Show Show Dim t As Long,s As Long,Dim t As Long,s As Long,i As Integer i As Integer t=1t=1 For i=1 To 5 For i=1 To 5 t=t*i t=t*i Next i Next i s=t s=t 例例7.27.2 计算计算5!+10!5!+10!t=1 For i=1 To 10 t=t*i Next i s=s+t s=s+t Pri
6、nt 5!+10!=;s Print 5!+10!=;sEnd SubEnd Sub第第第第7 7章章章章 过程过程过程过程 因为计算因为计算因为计算因为计算5!5!和和和和10!10!都要用到阶乘都要用到阶乘都要用到阶乘都要用到阶乘n!(n!n!(n!123n)123n)所以把所以把所以把所以把计算计算计算计算n!n!编成编成编成编成SubSub过程。过程。过程。过程。Private Sub Form_Load()Private Sub Form_Load()Show Show Dim y As Long,s As Long Dim y As Long,s As Long Call Jc(5
7、,y)Call Jc(5,y)s=y s=y Call Jc(10,y)Call Jc(10,y)s=s+y s=s+y Print 5!+10!=;s Print 5!+10!=;sEnd SubEnd Sub程序运行结果:程序运行结果:程序运行结果:程序运行结果:5!+10!5!+10!3628920 3628920Private Sub Jc(n As Integer,t As Long)Dim i As Integer t=1 For i=1 To n t=t*i Next iEnd Sub 注意参数注意参数n及及t的调用情况的调用情况 例例7.27.2 计算计算5!+10!5!+10
8、!第第第第7 7章章章章 过程过程过程过程 过程有两个重要作用:一是把一个复杂的任务分解为过程有两个重要作用:一是把一个复杂的任务分解为若干个小任务,可以用过程来表达,从而使任务更易理解,若干个小任务,可以用过程来表达,从而使任务更易理解,更易实现,将来更易维护;二是代码重用,使同一段代码多更易实现,将来更易维护;二是代码重用,使同一段代码多次复用。次复用。过程的作用过程的作用第第第第7 7章章章章 过程过程过程过程 过程调用示例过程调用示例过程调用示例过程调用示例 把相同的任务编成相对独立的把相同的任务编成相对独立的把相同的任务编成相对独立的把相同的任务编成相对独立的“子过程子过程子过程子过
9、程”当当当当事件过程事件过程事件过程事件过程需要执行这个任务时,可使用调用语句需要执行这个任务时,可使用调用语句需要执行这个任务时,可使用调用语句需要执行这个任务时,可使用调用语句(如如如如Call)Call)实行调用。子过程执行完后,会返回实行调用。子过程执行完后,会返回实行调用。子过程执行完后,会返回实行调用。子过程执行完后,会返回事件过程事件过程事件过程事件过程中调用语句中调用语句中调用语句中调用语句CallCall的后续语句继续执行的后续语句继续执行的后续语句继续执行的后续语句继续执行调用过程调用过程 Call SubA Call SubA Call SubB 子过程子过程SubA子过
10、程子过程SubB通用过程第第第第7 7章章章章 过程过程过程过程 例例例例7.1 7.1 7.1 7.1 SubSubSubSub过程示例过程示例过程示例过程示例 Private Sub Form_Load()Private Sub Form_Load()Show Show Call mysub1(30)Call mysub1(30)Call mysub2 Call mysub2 Call mysub2 Call mysub2 Call mysub2 Call mysub2 Call mysub1(30)Call mysub1(30)End SubEnd Sub 程序运行结果程序运行结果程序运
11、行结果程序运行结果Private Sub mysub1(n)Print String(n,*)End SubPrivate Sub mysub2()Print*;Tab(30);*End SubSub过程参数参数n无参数无参数第第第第7 7章章章章 过程过程过程过程Sub过程的定义 格式:格式:StaticStatic PublicPublic|PrivatePrivateSub Sub 过程名过程名过程名过程名(参数表列参数表列参数表列参数表列)语句块语句块语句块语句块Exit SubExit Sub语句块语句块语句块语句块End SubEnd Sub功能:定义一个以功能:定义一个以 为名的
12、为名的SubSub过程。过程。(1)(1)在在VBVB中,中,SubSub过程又称为子过程。过程又称为子过程。(2)(2)在子过程中如果没有形参,调用时括号()必在子过程中如果没有形参,调用时括号()必须省略。须省略。Call mysub2 Call mysub2 Call mysub2 Call mysub2 或或或或 mysub2 mysub2 mysub2 mysub2第第第第7 7章章章章 过程过程过程过程Sub过程的调用 格式:格式:Call Call 过程名过程名过程名过程名(实参列表实参列表实参列表实参列表)或或或或 过程名过程名过程名过程名 实参列表实参列表实参列表实参列表说明
13、:说明:实参的个数、类型、顺序应与相应的形参保持实参的个数、类型、顺序应与相应的形参保持一致,子过程中如果没有形参,则调用中也无一致,子过程中如果没有形参,则调用中也无实参。实参。第第2 2种调用方式与第种调用方式与第1 1种相比,结果一样,只是种相比,结果一样,只是去掉去掉CallCall和一对括号和一对括号()()。例如,调用名为例如,调用名为例如,调用名为例如,调用名为mysub1mysub1mysub1mysub1的过程:的过程:的过程:的过程:Call mysub1(30)Call mysub1(30)Call mysub1(30)Call mysub1(30)mysub1 30 m
14、ysub1 30 mysub1 30 mysub1 30第第第第7 7章章章章 过程过程过程过程函数过程 StaticPublic|PrivateStaticPublic|Private Function Function 函数过程名函数过程名(参数列表参数列表参数列表参数列表)As As 类型类型类型类型 语句块语句块语句块语句块 函数名函数名函数名函数名=返回值返回值返回值返回值 Exit Function Exit Function 语句块语句块语句块语句块 函数名函数名函数名函数名=返回值返回值返回值返回值 End FunctionEnd Function功能:定义一个以功能:定义一个
15、以 为名的为名的FunctionFunction过程过程。函数过程体函数过程体第第第第7 7章章章章 过程过程过程过程函数过程说明1.1.As As As As 类型:类型:类型:类型:返回值的类型返回值的类型返回值的类型返回值的类型2.2.2.2.函数名函数名=返回值返回值 函数过程必须返回函数值,而函数名就代表函数过程必须返回函数值,而函数名就代表函数过程必须返回函数值,而函数名就代表函数过程必须返回函数值,而函数名就代表了函数值,在函数体内至少对函数名赋值一次。了函数值,在函数体内至少对函数名赋值一次。了函数值,在函数体内至少对函数名赋值一次。了函数值,在函数体内至少对函数名赋值一次。若
16、不赋值则默认返回值为若不赋值则默认返回值为若不赋值则默认返回值为若不赋值则默认返回值为0 0 0 0或空串或空值。或空串或空值。或空串或空值。或空串或空值。函数名函数名函数名函数名本身就是变量。本身就是变量。本身就是变量。本身就是变量。第第第第7 7章章章章 过程过程过程过程函数过程的调用 形式:形式:变量名变量名变量名变量名=函数过程名(实参列表)函数过程名(实参列表)函数过程名(实参列表)函数过程名(实参列表)或或 print print 函数过程名函数过程名函数过程名函数过程名(实参列表实参列表实参列表实参列表)功能:调用一个已定义的功能:调用一个已定义的FunctionFunction
17、过程。过程。jiechen(5)jiechen(6)jiechen(7)a=jiechen(5)b=jiechen(6)c=jiechen(7)Print jiechen(5)+jiechen(6)+jiechen(7)第第第第7 7章章章章 过程过程过程过程将将n!n!的的的的SubSub过程改为过程改为过程改为过程改为FunctionFunction过程。过程。过程。过程。Private Sub Form_Load()Private Sub Form_Load()Show Show Dim s As Long Dim s As Long s=Jc(5)+Jc(10)s=Jc(5)+Jc(1
18、0)Print 5!+10!=;s Print 5!+10!=;sEnd SubEnd SubFunction Jc(n As Integer)As Long Dim i As Integer,t as Long t=1 For i=1 To n t=t*i Next i Jc=tEnd Function 例例7.37.3 计算计算5!+10!5!+10!Function Jc(n%)As Long Dim i As Integer Jc=1 For i=1 To n Jc=Jc*i Next iEnd Function第第第第7 7章章章章 过程过程过程过程 因为计算因为计算因为计算因为计算
19、5!5!和和和和10!10!都要用到阶乘都要用到阶乘都要用到阶乘都要用到阶乘n!(n!n!(n!123n)123n)所以把所以把所以把所以把计算计算计算计算n!n!编成编成编成编成SubSub过程。过程。过程。过程。Private Sub Form_Load()Private Sub Form_Load()Show Show Dim y As Long,s As Long Dim y As Long,s As Long Call Jc(5,y)Call Jc(5,y)s=y s=y Call Jc(10,y)Call Jc(10,y)s=s+y s=s+y Print 5!+10!=;s Pr
20、int 5!+10!=;sEnd SubEnd SubPrivate Sub Jc(n As Integer,t As Long)Dim i As Integer t=1 For i=1 To n t=t*i Next iEnd Sub 例例7.27.2 计算计算5!+10!5!+10!第第第第7 7章章章章 过程过程过程过程 把求两个数中的大数编成把求两个数中的大数编成把求两个数中的大数编成把求两个数中的大数编成FunctionFunction过程,过程名为过程,过程名为过程,过程名为过程,过程名为MaxMaxPrivate Sub Form_Load()Private Sub Form_L
21、oad()Show Show Dim a As Single,b As Single,c As Single Dim a As Single,b As Single,c As Single Dim s As Single Dim s As Single a=Val(InputBox(a=Val(InputBox(输入第一个数输入第一个数输入第一个数输入第一个数)b=Val(InputBox(b=Val(InputBox(输入第二个数输入第二个数输入第二个数输入第二个数)c=Val(InputBox(c=Val(InputBox(输入第三个数输入第三个数输入第三个数输入第三个数)s=max(a,
22、b)s=max(a,b)Print Print 最大数是最大数是最大数是最大数是:;max(s,c):;max(s,c)End SubEnd SubFunction max(m!,n!)As Single If m n Then max=m Else max=n End IfEnd Function 调用调用调用调用 例例7.47.4 输入三个数,求出它们的最大数输入三个数,求出它们的最大数实参传实参传给形参给形参(am)通过函数名通过函数名通过函数名通过函数名maxmax带回一个结果带回一个结果带回一个结果带回一个结果第第第第7 7章章章章 过程过程过程过程 把求两个数中的大数编成把求两个数
23、中的大数编成把求两个数中的大数编成把求两个数中的大数编成SubSub子过程,过程名为子过程,过程名为子过程,过程名为子过程,过程名为MaxMaxPrivate Sub Form_Load()Private Sub Form_Load()Show Show Dim a As Single,b As Single,c As Single Dim a As Single,b As Single,c As Single Dim s As Single,m As Single Dim s As Single,m As Single a=Val(InputBox(a=Val(InputBox(输入第一个数
24、输入第一个数输入第一个数输入第一个数)b=Val(InputBox(b=Val(InputBox(输入第二个数输入第二个数输入第二个数输入第二个数)c=Val(InputBox(c=Val(InputBox(输入第三个数输入第三个数输入第三个数输入第三个数)Call max(a,b,s)Call max(a,b,s)Call max(s,c,m)Call max(s,c,m)Print Print 最大数是最大数是最大数是最大数是:;m:;mEnd SubEnd SubSub max(m!,n!,t!)If m n Then t=m Else t=n End IfEnd Function 例例
25、7.47.4 输入三个数,求出它们的最大数输入三个数,求出它们的最大数第第第第7 7章章章章 过程过程过程过程函数过程与Sub过程的区别(1)(1)函数名函数名函数名函数名是一个变量,它有值,有类型,在函数是一个变量,它有值,有类型,在函数体中至少赋值一次,并通过它可带回一个结果;体中至少赋值一次,并通过它可带回一个结果;而而SubSub过程名过程名过程名过程名,它无值,无类型,在,它无值,无类型,在SubSub过程体过程体内不能赋值,不能通过它带回结果。内不能赋值,不能通过它带回结果。注意:注意:SubSub过程若要带回结果,必须通过形参与实过程若要带回结果,必须通过形参与实参的地址传递得到
26、结果,调用时可得到多个参数参的地址传递得到结果,调用时可得到多个参数值。值。第第第第7 7章章章章 过程过程过程过程函数过程与Sub过程的区别(2)(2)调用时,子过程调用是一句独立的语句。格式:调用时,子过程调用是一句独立的语句。格式:Call Call 过程名过程名过程名过程名(实参列表实参列表实参列表实参列表)或或或或 过程名过程名过程名过程名 实参列表实参列表实参列表实参列表函数过程不能作为单独的语句加以调用,必须参与函数过程不能作为单独的语句加以调用,必须参与表达式运算。表达式运算。变量名变量名变量名变量名=函数过程名(实参列表)函数过程名(实参列表)函数过程名(实参列表)函数过程名
27、(实参列表)或或或或 print print 函数过程名函数过程名函数过程名函数过程名(实参列表实参列表实参列表实参列表)a=jiechen(5)b=jiechen(6)c=jiechen(7)Print jiechen(5)+jiechen(6)+jiechen(7)第第第第7 7章章章章 过程过程过程过程说明说明:(1 1)如果仅仅为实现一个动作,而无任何返回结果,)如果仅仅为实现一个动作,而无任何返回结果,只能用只能用SubSub子过程子过程实现。实现。(2 2)如果需要返回一个结果,既可用函数过程实现)如果需要返回一个结果,既可用函数过程实现也可用子过程实现。也可用子过程实现。(3 3
28、)如果需要返回多个结果,可用函数过程实现也)如果需要返回多个结果,可用函数过程实现也可用子过程实现,同时必须结合其他的形式,如可用子过程实现,同时必须结合其他的形式,如全局变量、传地址(实参形参间的传递)等。全局变量、传地址(实参形参间的传递)等。函数过程与函数过程与Sub过程过程第第第第7 7章章章章 过程过程过程过程函数过程定义的方法 自定义函数过程有两种方法:自定义函数过程有两种方法:(1)(1)利用利用“工具工具”菜单下的菜单下的“添加过程添加过程”命令定义,命令定义,生成一个函数过程的框架。生成一个函数过程的框架。(2)(2)利用代码窗口手工输入代码的方式建立函数过利用代码窗口手工输
29、入代码的方式建立函数过程。程。第第第第7 7章章章章 过程过程过程过程 通用过程通用过程通用过程通用过程(Sub/Function)(Sub/Function)过程可以保存在两种模块中:过程可以保存在两种模块中:过程可以保存在两种模块中:过程可以保存在两种模块中:窗体模块窗体模块窗体模块窗体模块(.frm)(.frm)和和和和标准模块标准模块标准模块标准模块(.bas)(.bas)(1)(1)在窗体模块中创建通用过程:在窗体模块中创建通用过程:在窗体模块中创建通用过程:在窗体模块中创建通用过程:可以在代码窗口中直接键入来创建可以在代码窗口中直接键入来创建可以在代码窗口中直接键入来创建可以在代码
30、窗口中直接键入来创建SubSub过程过程过程过程 选择选择选择选择“工具工具工具工具”菜单中的菜单中的菜单中的菜单中的“添加过程添加过程添加过程添加过程”命令命令命令命令 (2)(2)在标准模块中创建通用过程:在标准模块中创建通用过程:在标准模块中创建通用过程:在标准模块中创建通用过程:选择选择选择选择“工程工程工程工程”菜单中的菜单中的菜单中的菜单中的“添加模块添加模块添加模块添加模块”命令命令命令命令 保存为一个独立的保存为一个独立的保存为一个独立的保存为一个独立的“.bas”“.bas”“.bas”“.bas”文件文件文件文件 举例:举例:举例:举例:把例把例把例把例7.37.3的函数的
31、函数的函数的函数max(m,n)max(m,n)存放在模块文件中存放在模块文件中存放在模块文件中存放在模块文件中 创建通用过程的方法第第第第7 7章章章章 过程过程过程过程参数的传递 参数传递参数传递参数传递参数传递:指主调过程的实参传递给被调过程的形参。:指主调过程的实参传递给被调过程的形参。形参形参形参形参 :是指在定义过程时出现在参数列表中的:是指在定义过程时出现在参数列表中的变量变量变量变量名或数组名名或数组名名或数组名名或数组名,这些变量名只能在过程内部使用,这些变量名只能在过程内部使用,形式参数不能是常量。形式参数不能是常量。实参实参实参实参:是调用过程中已组织好的准备传给形参的:
32、是调用过程中已组织好的准备传给形参的常量、常量、常量、常量、变量、表达式变量、表达式变量、表达式变量、表达式或或数组控件对象数组控件对象数组控件对象数组控件对象等。等。s=max(a,b)Function max(m,n)As Single End Function 实参实参形参形参第第第第7 7章章章章 过程过程过程过程 定义过程和调用过程的示例:定义过程和调用过程的示例:调用过程:调用过程:调用过程:调用过程:Call Mysub(100,Call Mysub(100,Call Mysub(100,Call Mysub(100,计算机计算机计算机计算机 ,1.5)1.5)1.5)1.5)定
33、义过程:定义过程:定义过程:定义过程:Sub Mysub(t As Integer,s As String,y As Single)Sub Mysub(t As Integer,s As String,y As Single)Sub Mysub(t As Integer,s As String,y As Single)Sub Mysub(t As Integer,s As String,y As Single)“形实结合形实结合形实结合形实结合”是按照位置结合的,即第一个实参值是按照位置结合的,即第一个实参值是按照位置结合的,即第一个实参值是按照位置结合的,即第一个实参值(100)(100)传
34、送传送传送传送给第一个形参给第一个形参给第一个形参给第一个形参t t,第二个实参值,第二个实参值,第二个实参值,第二个实参值(“(“计算机计算机计算机计算机”)”)传送给第二个形参传送给第二个形参传送给第二个形参传送给第二个形参s s,第三个实参值,第三个实参值,第三个实参值,第三个实参值(1.5)(1.5)传送给第三个形参传送给第三个形参传送给第三个形参传送给第三个形参y y。第第第第7 7章章章章 过程过程过程过程参数传递的方式 地址传递地址传递地址传递地址传递:缺省或加:缺省或加“ByRef”“ByRef”,形参得到的是,形参得到的是实参的地址,当形参值改变时实参的值也改变,也实参的地址
35、,当形参值改变时实参的值也改变,也叫叫双向传递双向传递双向传递双向传递。值传递值传递值传递值传递:在形参前加:在形参前加“ByVal”“ByVal”,形参得到的是,形参得到的是实参的值,形参值的改变不会影响实参的值。也叫实参的值,形参值的改变不会影响实参的值。也叫单向传递。单向传递。单向传递。单向传递。注意注意注意注意:无论哪种传递,实际参数必须与定义过程时:无论哪种传递,实际参数必须与定义过程时的形式参数在个数、类型、顺序上保持一一对应。的形式参数在个数、类型、顺序上保持一一对应。第第第第7 7章章章章 过程过程过程过程 设置两个通用过程设置两个通用过程设置两个通用过程设置两个通用过程Tes
36、t1Test1和和和和Test2Test2,分别按值传递和按地址传递,分别按值传递和按地址传递,分别按值传递和按地址传递,分别按值传递和按地址传递Private Sub Form_Load()Private Sub Form_Load()Dim x As Integer Dim x As Integer Show Show x=5 x=5 Print Print 执行执行执行执行test1test1前,前,前,前,x=;xx=;x Call test1(x)Call test1(x)Print Print 执行执行执行执行test1test1后,后,后,后,test2test2前,前,前,前,
37、x=;xx=;x Call test2(x)Call test2(x)Print Print 执行执行执行执行test2test2后,后,后,后,x=;xx=;xEnd SubEnd SubSub test1(ByVal t As Integer)t=t+5End SubSub test2(s As Integer)s=s-5End Sub 运行结果运行结果执行执行Test1前,前,x=5执行执行Test1后,后,Test2前,前,x=5执行执行Test2后,后,x=0 例例7.5 参数传递方式示例参数传递方式示例按值传递按值传递按地址传递按地址传递第第第第7 7章章章章 过程过程过程过程传递
38、方式示意图5 Form_Load()test1()xt实参实参形参形参(a)值传递值传递5xs(b)地址传递地址传递实参和形参共享单元实参和形参共享单元0Form_Load()test2()510第第第第7 7章章章章 过程过程过程过程 因为计算因为计算因为计算因为计算5!5!和和和和10!10!都要用到阶乘都要用到阶乘都要用到阶乘都要用到阶乘n!(n!n!(n!123n)123n)所以把所以把所以把所以把计算计算计算计算n!n!编成编成编成编成SubSub过程过程过程过程,采用采用采用采用PrintPrint直接在窗体上输出结果。直接在窗体上输出结果。直接在窗体上输出结果。直接在窗体上输出结
39、果。Private Sub Form_Load()Private Sub Form_Load()Show Show Dim y As Long,s As Long Dim y As Long,s As Long Call Jc(5,y)Call Jc(5,y)s=y s=y Call Jc(10,y)Call Jc(10,y)s=s+y s=s+y Print 5!+10!=;s Print 5!+10!=;sEnd SubEnd Sub程序运行结果:程序运行结果:程序运行结果:程序运行结果:5!+10!5!+10!3628920 3628920Private Sub Jc(n As Inte
40、ger,t As Long)Dim i As Integer t=1 For i=1 To n t=t*i Next iEnd Sub 注意参数注意参数n及及t的调用情况的调用情况 例例7.27.2 计算计算5!+10!5!+10!第第第第7 7章章章章 过程过程过程过程 把求两个数中的大数编成把求两个数中的大数编成把求两个数中的大数编成把求两个数中的大数编成SubSub子过程,过程名为子过程,过程名为子过程,过程名为子过程,过程名为MaxMaxPrivate Sub Form_Load()Private Sub Form_Load()Show Show Dim a As Single,b A
41、s Single,c As Single Dim a As Single,b As Single,c As Single Dim s As Single,m As Single Dim s As Single,m As Single a=Val(InputBox(a=Val(InputBox(输入第一个数输入第一个数输入第一个数输入第一个数)b=Val(InputBox(b=Val(InputBox(输入第二个数输入第二个数输入第二个数输入第二个数)c=Val(InputBox(c=Val(InputBox(输入第三个数输入第三个数输入第三个数输入第三个数)Call max(a,b,s)Cal
42、l max(a,b,s)Call max(s,c,m)Call max(s,c,m)Print Print 最大数是最大数是最大数是最大数是:;m:;mEnd SubEnd SubSub max(m,n,t)If m n Then t=m Else t=n End IfEnd Function 调用调用调用调用 例例7.37.3 输入三个数,求出它们的最大数输入三个数,求出它们的最大数第第第第7 7章章章章 过程过程过程过程 在一个过程在一个过程在一个过程在一个过程(Sub(Sub过程和过程和过程和过程和FunctionFunction过程过程过程过程)中调用另外中调用另外中调用另外中调用另外
43、一个过程。一个过程。一个过程。一个过程。例例例例7.57.5 输入两个数输入两个数输入两个数输入两个数n n、mm,求组合数,求组合数,求组合数,求组合数C Cn nm m 的值的值的值的值 C Cn nm m=n!m!(n-m)!7.37.3 过程的嵌套调用过程的嵌套调用第第第第7 7章章章章 过程过程过程过程 Private Sub Form_Load()Private Sub Form_Load()Show Show m=Val(InputBox(m=Val(InputBox(输入输入输入输入mm的值的值的值的值)n=Val(InputBox(n=Val(InputBox(输入输入输入输
44、入n n的值的值的值的值)If m n Then If m n Then MsgBox MsgBox 输入数据错误输入数据错误输入数据错误输入数据错误,0,0,检查错误检查错误检查错误检查错误 End End End If End If Print Print 组合数是:组合数是:组合数是:组合数是:;Calcomb(n,m);Calcomb(n,m)End SubEnd Sub Private Function Calcomb(n,m)Private Function Calcomb(n,m)Calcomb=Jc(n)/(Jc(m)*Jc(n-m)Calcomb=Jc(n)/(Jc(m)*J
45、c(n-m)End FunctionEnd Function Private Function Jc(x)Private Function Jc(x)t=1 t=1 For i=1 To x For i=1 To x t=t*i t=t*i Next i Next i Jc=t Jc=t End FunctionEnd Function 程序中,采用了过程的嵌套调用方式。程序中,采用了过程的嵌套调用方式。在事件过程在事件过程Form_Load()中调用了中调用了Calcomb过程,而在过程,而在Calcomb过程中调用过程中调用了三次了三次jc过程。过程。调调用用调调用用第第第第7 7章章章章
46、 过程过程过程过程 过程的嵌套调用过程的嵌套调用a=Calcomb(n,m)b=Jc(n)事件过程事件过程Form_LoadFunction过程过程Calcomb(n,m)Function过程过程Jc(x)结束结束开始开始第第第第7 7章章章章 过程过程过程过程变量的作用域 作用域作用域:变量、过程随所处的位置不同,可被访:变量、过程随所处的位置不同,可被访问的范围。问的范围。应用程序应用程序(.vbp)文件文件至至少少有有一一个个或或若若干干个个窗窗体模块体模块(.frm)文件文件其其 它它 模模 块块 如如 类类 模模 块块(.cls)文件等文件等可可以以有有一一个个或或若若干干个个标标准
47、模块准模块(.bas)文件文件事件过程事件过程(sub)子过程子过程(sub)函数过程函数过程(function)子过程子过程(sub)函函数数过过程程(function)自定义属性过程自定义属性过程自定义方法过程自定义方法过程自定义事件过程自定义事件过程第第第第7 7章章章章 过程过程过程过程 通用过程通用过程通用过程通用过程(Sub/Function)(Sub/Function)过程可以保存在两种模块中:过程可以保存在两种模块中:过程可以保存在两种模块中:过程可以保存在两种模块中:窗体模块窗体模块窗体模块窗体模块(.frm)(.frm)和和和和标准模块标准模块标准模块标准模块(.bas)(
48、.bas)(1)(1)在窗体模块中创建通用过程:在窗体模块中创建通用过程:在窗体模块中创建通用过程:在窗体模块中创建通用过程:可以在代码窗口中直接键入来创建可以在代码窗口中直接键入来创建可以在代码窗口中直接键入来创建可以在代码窗口中直接键入来创建SubSub过程过程过程过程 选择选择选择选择“工具工具工具工具”菜单中的菜单中的菜单中的菜单中的“添加过程添加过程添加过程添加过程”命令命令命令命令 (2)(2)在标准模块中创建通用过程:在标准模块中创建通用过程:在标准模块中创建通用过程:在标准模块中创建通用过程:选择选择选择选择“工程工程工程工程”菜单中的菜单中的菜单中的菜单中的“添加模块添加模块
49、添加模块添加模块”命令命令命令命令 保存为一个独立的保存为一个独立的保存为一个独立的保存为一个独立的“.bas”“.bas”“.bas”“.bas”文件文件文件文件 举例:举例:举例:举例:把例把例把例把例7.37.3的函数的函数的函数的函数max(m,n)max(m,n)存放在模块文件中存放在模块文件中存放在模块文件中存放在模块文件中 创建通用过程的方法第第第第7 7章章章章 过程过程过程过程变量的作用域 局部变量:局部变量:在在窗体模块窗体模块窗体模块窗体模块(.frm)(.frm)和和和和标准模块标准模块标准模块标准模块(.bas)(.bas)的的的的过程内过程内声明的变量,只能在本过程
50、中使用。声明的变量,只能在本过程中使用。窗体窗体/模块级变量模块级变量:在:在窗体模块窗体模块窗体模块窗体模块(.frm)(.frm)和和和和标准模标准模标准模标准模块块块块(.bas)(.bas)“通用声明通用声明”段中用段中用DimDim语句或用语句或用PrivatePrivate语句语句 声明的变量声明的变量,可被本窗体可被本窗体/模块的任何过程访模块的任何过程访问。问。全局变量全局变量:在:在标准模块标准模块标准模块标准模块(.bas)(.bas)“通用声明通用声明”段段中用中用PublicPublic语句声明的变量,可被本应用程序的语句声明的变量,可被本应用程序的各各窗体模块窗体模块