子过程和函数过程讲稿.ppt
《子过程和函数过程讲稿.ppt》由会员分享,可在线阅读,更多相关《子过程和函数过程讲稿.ppt(71页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、子过程和函数过程第一页,讲稿共七十一页哦本章内容及要求8.1 Sub过程的定义和调用8.2 Function函数过程的定义和调用8.3 参数传递8.4 过程的嵌套和递归调用8.5 变量及过程的作用域第二页,讲稿共七十一页哦(1)窗体事件过程)窗体事件过程Private Sub Form_事件名事件名(参数列表参数列表)语句组语句组End Sub(2)控件事件过程)控件事件过程PrivateSub控件名控件名_事件名事件名(参数列表参数列表)语句组语句组 End Sub8.1.1事件事件Sub过程过程8.1Sub子过程的定义和调用子过程的定义和调用在在VB中中Sub子过程分为:事件过程和用户自定
2、义过程子过程分为:事件过程和用户自定义过程第三页,讲稿共七十一页哦方方法法一一:通通过过“工工具具”菜菜单单中中的的“添添加加过过程程”命命令令,出出现现“添添加加过过程程”对对话话框框,选选择择过过程程类类型型(子子过过程程、函函数数、属属性性、事事件件)及及作作用用范范围围(公公有有的的Public、私私有有的的Private),单单击击确确定定后后得得到到一一个个过过程程定定义义的的结结构框架(模板),如:构框架(模板),如:Sub子过程的定义子过程的定义-两种方法两种方法8.1.2用户自定义用户自定义Sub子过程定义子过程定义PublicSubSort()EndSub第四页,讲稿共七十
3、一页哦Public|PrivateStatic Sub 子过程名子过程名(形参表形参表)语句组语句组 Exit Sub 语句组语句组End Sub方法二:方法二:直接在代码窗口中输入直接在代码窗口中输入过程体过程体第五页,讲稿共七十一页哦例例1:编一个交换两个整型变量值的子过程。编一个交换两个整型变量值的子过程。Private Sub Swap(X As Integer,Y As Integer)Dim temp As Integer Temp=X X=Y Y=TempEnd Sub第六页,讲稿共七十一页哦例例2:编写求阶乘的子过程。:编写求阶乘的子过程。Privatesubfact(nAsI
4、nteger,fasDouble)DimiAsIntegerf=1Fori=1Tonf=f*iNextEndsub第七页,讲稿共七十一页哦。说明:说明:(1)子过程名:子过程名:命名规则与变量名规则相同。子过程命名规则与变量名规则相同。子过程名不名不返回值,而是返回值,而是通过形参与实参的传递得到结果,调用时可返回多个值通过形参与实参的传递得到结果,调用时可返回多个值(2)形形式式参参数数列列表表:形形式式参参数数通通常常简简称称“形形参参”,仅仅表表示示形形参参的的类类型型、个个数数、位位置置,定定义义时时是是无无值值的的,只只有有在在过过程程被被调调用用时时,虚虚实实参参结结合合后后才才获
5、获得得相相应应的值。的值。(3)过程可以无形式参数,但括号不能省。过程可以无形式参数,但括号不能省。(4)参数的定义形式:参数的定义形式:ByValByRef变量名变量名()As 类型类型,ByVal表示当该过程被调用时,参数是按值传递的;表示当该过程被调用时,参数是按值传递的;ByRef表示当该过程被调用时,参数是按地址传递的表示当该过程被调用时,参数是按地址传递的,缺省时传址。缺省时传址。第八页,讲稿共七十一页哦方法一:方法一:Call子过程名子过程名(参数列表参数列表)方法二:子过程名方法二:子过程名参数列表参数列表说明:说明:(1)参数列表参数列表称为实参或实元,它必须与形参保持个数相
6、同,称为实参或实元,它必须与形参保持个数相同,位置与类位置与类型一一对应型一一对应。(2)调用时把调用时把实参实参值传递给对应的值传递给对应的形参形参。其中值传递(形参前有其中值传递(形参前有ByVal说明)时实参的值不随形参的值变化而改变。说明)时实参的值不随形参的值变化而改变。而地址传递时实参的值随形参值的改变而改变。而地址传递时实参的值随形参值的改变而改变。8.1.3子过程的调用子过程的调用第九页,讲稿共七十一页哦(3)当参数是数组时,形参与实参在参数声明时应省略其维数,当参数是数组时,形参与实参在参数声明时应省略其维数,但但括号不能省括号不能省。(4)调用子过程的形式有两种,用调用子过
7、程的形式有两种,用Call关键字时,实参必须加圆括关键字时,实参必须加圆括号括起号括起,反之则不用,反之则不用加圆括号括起。加圆括号括起。实参之间用实参之间用“,”分隔。分隔。例:调用上面定义的例:调用上面定义的Swap子过程的形式:子过程的形式:Swap a,b Call Swap(a,b)在某个事件过程中调用已定义的阶乘在某个事件过程中调用已定义的阶乘的过程的过程fact:PrivateSubCommand1_Click()DimnAsInteger,mAsLongn=5Callfact(n,m)PrintmEndSub第十页,讲稿共七十一页哦PrivateSubCmdOK_click()
8、CallSwap(a,b)Swapa,bEndSubPrivateSubSwap(x%,y%)Dimtemp%Temp=XX=YY=TempEndSub过程调用的执行过程:过程调用的执行过程:第十一页,讲稿共七十一页哦 VisualBasic函数分为函数分为内部函数内部函数和和外部(自定义)外部(自定义)函数函数,外部函数是用户根据需要用,外部函数是用户根据需要用Function关键字定关键字定义的函数过程,义的函数过程,与子过程不同的是函数名将返回一个与子过程不同的是函数名将返回一个值值。8.2Function函数过程的定义和调用函数过程的定义和调用第十二页,讲稿共七十一页哦方方法法一一:通
9、通过过“工工具具”菜菜单单中中的的“添添加加过过程程”命命令令,出出现现“添添加加过过程程”对对话话框框,选选择择过过程程类类型型(子子过过程程、函函数数、属属性性、事事件件)及及作作用用范范围围(公公有有的的Public、私有的私有的Private),单击确定后得到一个函数定义的结构框架(模板),如:),单击确定后得到一个函数定义的结构框架(模板),如:PublicFunctionSort()EndFunction8.2.1Function函数过程的定义函数过程的定义Function函数过程过程的定义函数过程过程的定义-两种方法两种方法第十三页,讲稿共七十一页哦Public|PrivateS
10、taticFunction函数名函数名()As函数名函数名=返回值返回值ExitFunction函数名函数名=返回值返回值EndFunction方法二:方法二:直接在代码窗口中输入直接在代码窗口中输入函数体函数体第十四页,讲稿共七十一页哦Functionfact(nAsInteger)AsDoubleDimiAsInteger,fAsDoublef=1Fori=1Tonf=f*iNextfact=fEndFunction把例把例2阶乘的阶乘的sub子过程改为子过程改为Function函数过程函数过程第十五页,讲稿共七十一页哦说明:说明:(1)函函数数名名:命命名名规规则则与与变变量量名名规规则
11、则相相同同。但但不不能能与与系系统统的的内内部部函函数数或或其其它它通通用用子子过过程程同同名名,也也不不能能与与已已定定义义的的全全局局变变量量和和本本模模块块中模块级变量同名。中模块级变量同名。(2)在在函函数数体体内内,函函数数名名可可以以当当变变量量使使用用,函函数数的的返返回回值值就就是是通通过过对对函函数数名名的的赋赋值值语语句句来来实实现现的的,在在函函数数过过程程中中至至少少要要对对函函数数名名赋赋值值一一次。次。(3)AS类类型型:是是指指函函数数返返回回值值的的类类型型,若若省省略略,则则函函数数返返回回变变体体类型值(类型值(Variant)。)。(4)ExitFunct
12、ion:表表示示退退出出函函数数过过程程,常常常常是是与与选选择择结结构构(If或或SelectCase语句)联用,即当满足一定条件时,退出函数过程。语句)联用,即当满足一定条件时,退出函数过程。(5)形参数列表形参数列表:形参的定义与子过程完全相同。:形参的定义与子过程完全相同。第十六页,讲稿共七十一页哦调用形式如下:调用形式如下:函数名(实参列表)函数名(实参列表)说说明明:在在调调用用时时实实参参和和形形参参的的数数据据类类型型、顺顺序序、个个数数必必须须匹匹配配。函函数数调用只能出现调用只能出现在表达式中在表达式中,其,其功能功能是求得函数的是求得函数的返回值返回值。8.2.2函数过程
13、的调用函数过程的调用调用阶乘的过程调用阶乘的过程:Private Sub Command1_Click()Dim S As Integer S=5 Print fact(S)End Sub第十七页,讲稿共七十一页哦2009-03-29以下关于过程及过程参数的描述中,错误的是以下关于过程及过程参数的描述中,错误的是A)过程的参数可以是控件名称)过程的参数可以是控件名称B)调用过程时使用的实参的个数应与过程形参的个数相同)调用过程时使用的实参的个数应与过程形参的个数相同C)只有函数过程能够将过程中处理的信息返回到调用程中)只有函数过程能够将过程中处理的信息返回到调用程中D)窗体可以作为过程的参数)
14、窗体可以作为过程的参数课堂练习课堂练习2010-03-22下面是求最大公约数的函数的首部下面是求最大公约数的函数的首部Functiongcd(ByValxAsInteger,ByValyAsInteger)AsInteger若要输出若要输出8、12、16这这3个数的最大公约数,下面正确的语句是个数的最大公约数,下面正确的语句是A)Printgcd(8,12),gcd(12,16),gcd(16,8)B)Printgcd(8,12,16)C)Printgcd(8),gcd(12),gcd(16)D)Printgcd(8,gcd(12,16)第十八页,讲稿共七十一页哦VisualBasic中不同模
15、块(过程)之间数据的传递有两种方式:中不同模块(过程)之间数据的传递有两种方式:通过过程调用实参与形参的结合实现;通过过程调用实参与形参的结合实现;使用全局变量来实现各过程中共享数据。使用全局变量来实现各过程中共享数据。1、形式参数、形式参数 是指在是指在定义定义子过程和函数时,出现在子过程和函数时,出现在Sub过程名或过程名或Function函数名函数名后面括号内的变量后面括号内的变量,是用来接收传送给是用来接收传送给Sub过程或过程或Function的数据的数据,形,形参表中的各个变量之间用逗号分隔。参表中的各个变量之间用逗号分隔。8.3参数传递参数传递8.3.1形式参数与实际参数形式参数
16、与实际参数第十九页,讲稿共七十一页哦2、实际参数、实际参数实实际际参参数数是是指指在在调调用用Sub或或Function时时,出出现现在在子子过过程程名名或或函函数数名名后后括括号号内内的的参参数数,其其作作用用是是将将它它们们的的数数据据(数数值值或或地地址址)传传送送给给Sub或或Function过程与其对应的形参变量。过程与其对应的形参变量。实实参参可可由由常常量量、表表达达式式、有有效效的的变变量量名名、数数组组名名(如如A())组组成成,实参表中各参数用实参表中各参数用逗号分隔逗号分隔。参数传递指参数传递指主调主调过程的实参(调用时过程的实参(调用时已有确定值和内存地址的参数已有确定
17、值和内存地址的参数)传递给传递给被调被调过程的形参。过程的形参。参数的传递有两种方式:参数的传递有两种方式:按值传递、按地址传递按值传递、按地址传递。形参前加形参前加“ByVal”关键字的是按关键字的是按值传递值传递,缺省缺省或加或加“ByRef”关键字关键字则按则按地址传递地址传递。8.3.2传地址与传值传地址与传值第二十页,讲稿共七十一页哦传址:传址:形参得到的是实参的形参得到的是实参的地址地址,当形参值的改变同时也改变实参,当形参值的改变同时也改变实参的值。因为它们共用一个地址。的值。因为它们共用一个地址。传值:传值:形参只得到的是实参的形参只得到的是实参的值值,形参值的改变不会影响实参
18、的值。因,形参值的改变不会影响实参的值。因为形参并不知道实参的地址。为形参并不知道实参的地址。SubSwap2(x%,y%)DimTemp%Temp=x:x=y:y=TempEndSubSubSwap1(ByValx%,ByValy%)DimTemp%Temp=x:x=y:y=TempEndSub什么是传址和传值呢?什么是传址和传值呢?传值传值传址传址传值传值第二十一页,讲稿共七十一页哦PrivateSubCmdOK_Click()Dima%,b%a=10:b=20Swap1a,b传传值值PrintA1=;a,B1=;ba=10:b=20Swap2a,b传地址传地址PrintA2=;a,B2=
19、;bEndSubSubSwap2(x%,y%)DimTemp%Temp=x:x=y:y=TempEndSubSubSwap1(ByValx%,ByValy%)DimTemp%Temp=x:x=y:y=TempEndSub第二十二页,讲稿共七十一页哦值传递的执行过程如下图:值传递的执行过程如下图:第二十三页,讲稿共七十一页哦通过地址传递数据的执行过程通过地址传递数据的执行过程第二十四页,讲稿共七十一页哦 在在子子过过程程和和函函数数过过程程调调用用时时,如如果果实实参参是是常常量量(包包括括系系统统常常量量、用用Const自自定定义义的的符符号号常常量量)或或表表达达式式,无无论论在在定定义义时
20、时使使用用值值传传递递还还是是地地址址传传递递,此此时时都都是是按按值值传递方式将常量或表达式计算的传递方式将常量或表达式计算的值传递给形参变量值传递给形参变量。如果形参定义是按传地址方式,但调用时想使实参变量如果形参定义是按传地址方式,但调用时想使实参变量按值方式传递,按值方式传递,可以把实参变量加上括号,可以把实参变量加上括号,将其转换成表达将其转换成表达式即可。式即可。8.3.3有关过程之间数据传递的几点说明有关过程之间数据传递的几点说明第二十五页,讲稿共七十一页哦 解解决决一一个个问问题题既既可可以以使使用用子子过过程程,也也可可以以使使用用函函数数过过程程,是使用子过程还是使用函数过
21、程呢?是使用子过程还是使用函数过程呢?如如果果是是需需要要求求得得一一个个值值,一一般般情情况况使使用用函函数数过过程程,如如不不是是为为了了求求一一个个值值,而而是是完完成成一一些些操操作作,或或需需要要返返回回多多个个值值,则则使用子过程比较方便使用子过程比较方便。使用子过程还是使用函数过程使用子过程还是使用函数过程?第二十六页,讲稿共七十一页哦 VisualBasic中中数数组组作作参参数数是是通通过过传传地地址址方方式式传传送送。在在传传送送数数组组时时,除遵守参数传送的一般规则外,还应注意以下几点:除遵守参数传送的一般规则外,还应注意以下几点:1为为了了把把一一个个数数组组的的全全部
22、部元元素素传传送送给给一一个个过过程程,应应将将数数组组名名写入形参表中,并写入形参表中,并略略去数组的上下界,但去数组的上下界,但括号不能省略。括号不能省略。Private Sub Sort(a()As single)End Sub其中形参其中形参“a()”即为数组。即为数组。8.3.4数组作为过程的参数数组作为过程的参数第二十七页,讲稿共七十一页哦2被调过程可通过被调过程可通过Lbound和和Ubound函数确定实参数组的上、下界。函数确定实参数组的上、下界。3当用数组作形参时,对应的实参必须也是数组,且类型一致。当用数组作形参时,对应的实参必须也是数组,且类型一致。4实实参参和和形形参参
23、结结合合是是按按地地址址传传递递,即即形形参参数数组组和和实实参参数数组组共共用用一一段段内内存单元。存单元。例例如如:定定义义了了实实参参数数组组b(1to8),给给它它们们赋赋了了值值,调调用用Sort()函函数数过过程的形式如下:程的形式如下:Sortb()或或CallSort(b()实参数组后面的括号可以省略实参数组后面的括号可以省略,但为便于阅读,但为便于阅读,建议建议一般不要省略为一般不要省略为好。好。第二十八页,讲稿共七十一页哦课堂练习课堂练习第二十九页,讲稿共七十一页哦FunctionFirProc(zAsInteger,yAsInteger,zAsInteger)FirPro
24、c2x+y+3zEndFunctionFunctionSecProc(xAsInteger,yAsInteger,zAsInteger)SecProcFirProc(x,y,z)+xEndFunctionPrivateSubCommand1_Click()()DimaAsInteger,bAsInteger,cAsIntegera2:b3:c4PrintSecProc(c,b,a)EndSubA)21B)19C)17D)34课堂练习课堂练习第三十页,讲稿共七十一页哦2010-9-22以下关于局部变量的叙述中错误的是以下关于局部变量的叙述中错误的是A)在过程中用)在过程中用Dim语句或语句或St
25、atic语句声明的变量是局部变量语句声明的变量是局部变量B)局部变量的作用域是它所在的过程)局部变量的作用域是它所在的过程C)在过程中用)在过程中用Static语句声明的变量是静态局部变量语句声明的变量是静态局部变量D)过程执行完毕,该过程中用)过程执行完毕,该过程中用Dim或或Static语句声明的变量语句声明的变量即被释放即被释放课堂练习课堂练习第三十一页,讲稿共七十一页哦下列程序的输出结果是下列程序的输出结果是10110。PrivateSubsub1(ByValaAsInteger,bAsInteger)a=a+b:b=b+aEndSubPrivateSubForm_Click()Dim
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 过程 函数 讲稿
限制150内