计算机基础与Visual-Basic程序设计(第三版)第九章-过程课件_第1页
计算机基础与Visual-Basic程序设计(第三版)第九章-过程课件_第2页
计算机基础与Visual-Basic程序设计(第三版)第九章-过程课件_第3页
计算机基础与Visual-Basic程序设计(第三版)第九章-过程课件_第4页
计算机基础与Visual-Basic程序设计(第三版)第九章-过程课件_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

第9章过程与函数第9章过程与函数1过程的定义:

在设计一个规模较大、复杂程度较高的程序时,往往根据需要按功能将程序分解成若干个相对独立的部分,然后对每个部分分别编写一段程序,这些程序段称为过程。

过程是构成程序逻辑部件的基本单位,将程序分割成较小的逻辑部件可以简化程序设计任务,结构化设计就是建立在这个思路之上。

每个过程完成一个具有特定目的的任务。9.1事件过程与通用过程过程的定义:9.1事件过程与通用过程2VB中有两类子程序过程函数内部函数(如:Sin(3.14/6))通用函数(自定义函数Function)事件过程通用过程(自定义过程Sub)窗体事件过程(如:Form_Click())控件事件过程(如:Command1_Click())VB子程序分类图事件过程——是对发生的事件进行处理的程序段通用过程和通用函数——是由用户根据自己的需要定义和编写的、可供事件过程多次调用的程序段它们都不直接与特定的事件相关联9.1事件过程与通用过程VB中有两类子程序过程函数内部函数(如:Sin(3.14/639.2通用过程(Sub过程)Sub过程是指以规定语法结构组织的、可以被重复调用的、具有特定功能的、相对独立的程序段。

Sub过程不与任何特定的事件过程相关联,只能由别的过程调用1、

声明Sub过程(定义)声明Sub过程就是在窗体或标准模块的代码窗口编写一个能实现预期功能的语句块。声明Sub过程的语法格式为:

[Private|Public][Static]Sub

过程名([<形参列表>])[<语句块1>][ExitSub]过程体[<语句块2>]

EndSub

注意:

Sub过程名无值,无类型。9.2通用过程(Sub过程)Sub过程是指以规定语法4说明:1、每个通用过程都有一个过程名(由用户自己指定,规定同变量名),同一模块中过程名不得重复。2、过程前加上Public关键字或缺省,则该过程为全局级过程,可以被应用程序的所有窗体模块或标准模块中的过程调用(在窗体中定义,调用时应加窗体名)。3、过程前加上Private关键字,则该过程为模块级过程,只有在声明它的模块中才可以调用此过程。4、在过程名前加上Static关键字,表明该过程的变量都是静态变量。5、形参列表是传递到过程中的变量名(多个时用“,”分隔),它指明了调用时传递给过程的参数的类型和个数.过程可以有参数,也可以不带任何参数。根据需要而定格式为:[ByVal|ByRef]变量名[()][AS数据类型][,……]

ByVal表示按值传递;ByRef表示按地址传递6、过程内不能再定义过程,过程定义也不能写在事件过程内说明:1、每个通用过程都有一个过程名(由用户自己指定,规定同5如:SubTryout(xasinteger,yasinteger)x=x+100y=y*6Printx,yEndSub7、建立通用过程可以使用以下两种方法:①

“工具”——”添加过程”②

在标准模块或窗体模块中,直接输入通用过程的代码。8、子过程名不返回值,只能通过形式参数与调用语句通信9、过程体中的ExitSub表示强制退出过程返回9.2通用过程(Sub过程)如:SubTryout(xasinteger62、调用Sub过程要执行一个过程,必须调用该过程。调用的方法为:方法1.使用Call语句

格式:Call过程名[(实参列表)]方法2.

将过程名作为语句使用:格式:

过程名<实参列表>特点:

Sub过程的调用是一句独立的语句。例:要调用前面的Tryout过程,可以使用下面两种方式:CallTryout(a,b)或Tryouta,b主过程Call过程1EndSub过程1Call过程2EndSub过程2EndSub调用的本质:转入被调用过程去执行,完成后返回2、调用Sub过程要执行一个过程,必须调用该过程。调用的7说明:1、使用Call语句调用时,参数必须放在括号内,如没有参数,括号可省略2、用过程名调用时,过程名后不能加括号,若有参数,参数与过程名间用空格隔开3、参数表:在调用语句中的参数称为实际参数(简称实参),实参可以是变量、常量、数组或表达式,参数间用逗号隔开4、可以直接调用本模块中声明的过程或标准模块中声明的全局过程;5、当定义的过程重名时,调用过程时,过程名前应加模块名修饰;6、如果要调用窗体模块中声明的全局过程,调用时过程名前应加窗体名。说明:1、使用Call语句调用时,参数必须放在括号内,如没有8Function过程与Sub过程的主要区别是:

Function过程可通过函数名返回一个值到调用的过程1、

声明Function过程(函数定义)格式:[Public|Private][Static]Function函数过程名[(<参数列表>)][As<类型>]

[<语句块>][<函数过程名>=<表达式>]‘返回值语句[ExitFunction]EndFunction注意:在函数体内,函数名可以当变量名使用,函数的返回值就是通过对函数名的赋值语句来实现的。即函数值通过函数名返回。函数体中的ExitFunction语句的功能是强制退出函数并返回函数过程需要返回的值的类型由As<类型>设置。9.3Function过程(自定义函数)函数体Function过程与Sub过程的主要区别是92、调用Function过程Function过程的调用,与标准函数(内部函数)相同。

通常用在表达式中

格式:函数名(<实参列表>)特点:不能独立成为语句,必须参加表达式的运算。如1:下面是已知直角三角形两直角边的值,计算斜边的函数。

functionmyfun(Aasinteger,Basinteger)asstring

myfun=sqr(A*A+B*B)

Endfunction

SubCommand1_Click()a=val(text1.text):b=val(text2.text)

label1.caption=myfun(a,b)

EndSub2、调用Function过程Function过程的10例2:将前面的两个Sub过程改为Function过程。PrivateFunctiontriarea(xAsDouble,yAsDouble,zAsDouble)DimsAsDoubles=(x+y+z)/2triarea=Sqr((s-x)*(s-y)*(s-z)*s)EndFunctionPrivateSubCommand1_Click()

Dima#,b#,c#,s#,intYesorNo%a=Val(Text1.Text):b=Val(Text2.Text)c=Val(Text3.Text)

Ifa+b>cAndb+c>aAndc+a>bThen

Print"面积=";triarea(a,b,c)

Else

intYesorNo=suberr()‘无参数时,括号不能省略

EndIfEndSub例2:将前面的两个Sub过程改为Function过程。119.4参数传递不同模块(过程)之间数据的传递方式:通过全局变量实现各过程中共享数据(即在“通用”部份定义的变量,由该模块所有过程共享)通过过程调用实参与形参的结合实现按值传递(单向传递)按地址传递(双向传递)9.4参数传递不同模块(过程)之间数据的传递方式:通过12Sub过程和Function函数过程中的<参数列表>中的参数称为形式参数(形参),在程序中调用Sub过程和Function函数过程时<参数列表>中称为实际参数(实参)。在调用过程时,就是把“实参”依次按位置传递给被调用过程的“形参”,然后执行被调用过程中的语句。参数传递时相当于给变量赋初值。如:

Printgreatcd(x,y)

PublicFunctiongreatcd(mAsInteger,nAsInteger)

参数传递有两种模式:按值传递与按址传递9.4参数传递Sub过程和Function函数过程中的<参数列表>中的参数13按值传递就是将实参的值传送给被调用过程中的形参。即:系统把实参复制一份传送给形参。这样,被调用的过程如果改变了形参的值,也不会改变实参的值。在VB中,传值方式的标志为:在形参前加上ByVal。这种传递方式是一种单向的数据传递,即调用时只能由实参的值传递给形参,调用结束不能由形参将操作结果返回给实参。实参可以是常数、变量或表达式。1、按值传递按值传递就是将实参的值传送给被调用过程中的形参。即:系统把实14例:写出下列程序的运行结果Subtryout(ByValxasinteger,ByValyasinteger)x=x+100y=y*6print“x=“;x.”y=“;yEndSubSubForm_click()Dima%,b%a=10:b=20tryouta,bPrint“a=“;a,”b=“;bEndSub传值:X=110y=120a=10b=20例:写出下列程序的运行结果Subtryout(ByVal152、按址传递——变量的引用传址方式是将实参在内存的地址传递给形参,也就是实参、形参公用内存的“地址”。在VB中,按址传递数据是在形参前加上ByRef(默认方式)。这种传递方式是一种双向的数据传递,即调用时实参将值传递给形参;调用结束由形参将操作结果返回给实参。当用传址方式时,实参只能是变量、数组名,不能是常数、表达式。修改前例题ByValByRef再写其运行结果2、按址传递——变量的引用传址方式是将实参在内存的地址传16Subtryout(ByRefxasinteger,ByRefyasinteger)x=x+100y=y*6print“x=“;x.”y=“;yEndSubSubForm_click()Dima%,b%a=10:b=20tryouta,bPrint“a=“;a,”b=“;bEndSub传址:X=110y=120a=110b=120Subtryout(ByRefxasinteger,173、数组作过程的参数VisualBasic允许把数组作为实参传送到过程中。数组作参数是通过传地址方式传送。在传送数组时,除遵守参数传送的一般规则外,还应注意以下几点:

1.为了把一个数组的全部元素传送给一个过程,应将数组名分别写入形参表中,并略去数组的上下界,但括号不能省略。PrivateSubSort(a()Assingle)

……EndSub其中形参“a()”即为数组。3、数组作过程的参数VisualBasic182.被调过程可通过Lbound和Ubound函数确定实参数组的上、下界。3.当用数组作形参时,对应的实参必须也是数组,且类型一致。4.实参和形参结合是按地址传递,即形参数组和实参数组共用一段内存单元。例如:定义了实参数组b(1to8),给它们赋了值,调用Sort()函数过程的形式如下:Sortb()或CallSort(b())实参数组后面的括号可以省略,但为便于阅读,建议一般不要省略为好。3、数组作过程的参数2.被调过程可通过Lbound和Ubound函19调用时形参数组a和实参数组b虚实结合,共用一段内存单元,如图6-7所示。因此在Sort()过程中改变数组a的各元素值,也就相当于改变了实参数组b中对应的元素的值,当调用结束时,形参数组a成为无定义。

b(1)b(2)b(3)b(4)b(5)b(6)b(7)b(8)

a(1) a(2)a(3)a(4)a(5)a(6)a(7)a(8)参数为数组时虚实结合示意图

3、数组作过程的参数调用时形参数组a和实参数组b虚实结合,共用一20可选参数和可变参数1、可选参数

在过程的形参列表中加入Optional关键字,就可以指定过程的参数为可选的。如果指定了可选参数,则参数表中此参数后面的其它参数也必是可选的,并且要用Optional关键字来声明。

例6:求两个数的和的函数过程。

lt6.vbp函数过程:PublicFunctionmysum(firstAsInteger,secondAsLong,Optionalthird)mysum=first+second

IfNotIsMissing(third)Thenmysum=mysum+thirdEndFunction可选参数和可变参数1、可选参数例6:求两个数的和的函数21事件过程:PrivateSubCommand1_Click()DimaAsInteger,bAsLong,cAsDoubleDimsumAsIntegera=10:b=20Sum=mysum(a,b)Print"sum=";Suma=10:b=20:c=30Sum=mysum(a,b,c)Print"sum=";SumEndSubIsMissing()——检测可选参数是否被省略事件过程:222、不定数量的参数(可变参数)

一般说来,过程调用中的参数个数应等于过程说明的参数个数。在传递参数时,如果要求参数的数目可以变化,则在函数过程或Sub过程的形参前可加ParamArray关键字(不能与ByValByDef…连用)指明。格式如下:Sub过程名([其他参数,]ParamArray<数组名>())

2、不定数量的参数(可变参数)一般说来23PrivateSubCommand1_Click()

Dims(),a%,bAsLong,cAsVariant,dAsDoubles=Array(1,2,3,4,5)Print"sum=";multisum(s(0),s(2),s(4))a=1000:b=10000:c=100:d=10Print"sum=";multisum(a,b,c,d)EndSub

PublicFunctionmultisum(ParamArrayp())

Dimint1%,sumasvariantForint1=LBound(p)ToUBound(p)sum=sum+p(int1)Nextmultisum=sumEndSubPrivateSubCommand1_Click()249.4.4对象参数窗体参数形参定义格式:形参名Asform调用时实参:必须为某个窗体名称控件参数:形参定义格式:形参名AsControl调用时实参:可为任意一个控件对象9.4.4对象参数窗体参数25变量的作用域根据变量的作用域,变量分为局部(过程级)变量、窗体/模块变量和全局变量局部变量在过程中用Dim/static语句定义,只存在于过程中用Dim定义的变量称为动态变量,生存期为过程的一次调用.用Static定义的变量称为静态变量,生存期为整个应用程序的执行期间(重点掌握,举例)窗体/模块变量Dim语句或Private语句定义,模块中的所有过程都可使用全局变量Public语句定义,可以在所有模块中使用9.5变量与过程的作用范围变量的作用域根据变量的作用域,变量分为局部(过程级)变量、窗26PrivateSubForm_Click()DimaccAsInteger,iAsIntegeracc=0Fori=1To3acc=acc+funa(i)NextiPrintaccEndSubPrivateFunctionfuna(xAsInteger)AsIntegerStaticsAsIntegers=s+xfuna=sEndFunction运行时单击窗体,程序输出结果为:PrivateSubForm_Click()Privat27能能变量名前加窗体名不能不能被其他模块存取能能不能被本模块的其他过程存取通用声明通用声明过程中声明位置PublicDimPrivateDimStatic声明方式标准模块窗体全局变量窗体/模块级变量局部变量作用范围不同作用范围的三种变量声明及使用规则能能不能不能被其他模块存取能能不能被本模块的其他过程存取通用28不同作用范围的二种过程定义及调用规则能但过程名必须唯一,否则要加标准模块名能但必须在过程名前加窗体名不能不能能否被本应用程序其他模块调用能能能能能否被本模块其他过程调用Public缺省Private定义方式标准模块窗体标准模块窗体全局级模块级作用范围根据过程的作用域,过程分为窗体/模块级和全局级。不同作用范围的二种过程定义及调用规则能能不能不能能否被本应用299.7过程的嵌套和递归1、过程的嵌套在程序中调用一子过程,而在子过程中又调用另外的子过程,这种程序结构称为过程的嵌套。过程的嵌套调用执行过程如下图:9.7过程的嵌套和递归1、过程的嵌套在程序302、过程的递归调用用自身的结构来描述自身,称递归。例如,对阶乘的定义:VisualBasic允许在一个Sub子过程和Function过程的定义内部调用自己,即递归Sub子过程和递归Function函数。直接调用自己称为直接递归调用间接调用自己称为间接递归调用9.7过程的嵌套和递归调用2、过程的递归调用用自身的结构来描述自身,称递归。例如31PrivateFunctionfac(nAsInteger)AsIntegerIfn=1Then fac=1Else fac=n*fac(n-1)EndIfEndFunctionPrivateSubForm_Click() Print“fac(4)=”;fac(4)EndSub程序的递归过程:PrivateFunctionfac(nAsInte32说明:递归处理分递推和回归两个过程,如上图所示。当一个大问题能够分解成同类型的小问题,且问题规模在逐渐减小,才适合用递归解决.使用递归算法必须要满足以下的递归条件:

(1)存在递归结束条件及结束时的值;(2)能用递归形式表示,且递归向终止条件发展。说明:33第9章过程与函数第9章过程与函数34过程的定义:

在设计一个规模较大、复杂程度较高的程序时,往往根据需要按功能将程序分解成若干个相对独立的部分,然后对每个部分分别编写一段程序,这些程序段称为过程。

过程是构成程序逻辑部件的基本单位,将程序分割成较小的逻辑部件可以简化程序设计任务,结构化设计就是建立在这个思路之上。

每个过程完成一个具有特定目的的任务。9.1事件过程与通用过程过程的定义:9.1事件过程与通用过程35VB中有两类子程序过程函数内部函数(如:Sin(3.14/6))通用函数(自定义函数Function)事件过程通用过程(自定义过程Sub)窗体事件过程(如:Form_Click())控件事件过程(如:Command1_Click())VB子程序分类图事件过程——是对发生的事件进行处理的程序段通用过程和通用函数——是由用户根据自己的需要定义和编写的、可供事件过程多次调用的程序段它们都不直接与特定的事件相关联9.1事件过程与通用过程VB中有两类子程序过程函数内部函数(如:Sin(3.14/6369.2通用过程(Sub过程)Sub过程是指以规定语法结构组织的、可以被重复调用的、具有特定功能的、相对独立的程序段。

Sub过程不与任何特定的事件过程相关联,只能由别的过程调用1、

声明Sub过程(定义)声明Sub过程就是在窗体或标准模块的代码窗口编写一个能实现预期功能的语句块。声明Sub过程的语法格式为:

[Private|Public][Static]Sub

过程名([<形参列表>])[<语句块1>][ExitSub]过程体[<语句块2>]

EndSub

注意:

Sub过程名无值,无类型。9.2通用过程(Sub过程)Sub过程是指以规定语法37说明:1、每个通用过程都有一个过程名(由用户自己指定,规定同变量名),同一模块中过程名不得重复。2、过程前加上Public关键字或缺省,则该过程为全局级过程,可以被应用程序的所有窗体模块或标准模块中的过程调用(在窗体中定义,调用时应加窗体名)。3、过程前加上Private关键字,则该过程为模块级过程,只有在声明它的模块中才可以调用此过程。4、在过程名前加上Static关键字,表明该过程的变量都是静态变量。5、形参列表是传递到过程中的变量名(多个时用“,”分隔),它指明了调用时传递给过程的参数的类型和个数.过程可以有参数,也可以不带任何参数。根据需要而定格式为:[ByVal|ByRef]变量名[()][AS数据类型][,……]

ByVal表示按值传递;ByRef表示按地址传递6、过程内不能再定义过程,过程定义也不能写在事件过程内说明:1、每个通用过程都有一个过程名(由用户自己指定,规定同38如:SubTryout(xasinteger,yasinteger)x=x+100y=y*6Printx,yEndSub7、建立通用过程可以使用以下两种方法:①

“工具”——”添加过程”②

在标准模块或窗体模块中,直接输入通用过程的代码。8、子过程名不返回值,只能通过形式参数与调用语句通信9、过程体中的ExitSub表示强制退出过程返回9.2通用过程(Sub过程)如:SubTryout(xasinteger392、调用Sub过程要执行一个过程,必须调用该过程。调用的方法为:方法1.使用Call语句

格式:Call过程名[(实参列表)]方法2.

将过程名作为语句使用:格式:

过程名<实参列表>特点:

Sub过程的调用是一句独立的语句。例:要调用前面的Tryout过程,可以使用下面两种方式:CallTryout(a,b)或Tryouta,b主过程Call过程1EndSub过程1Call过程2EndSub过程2EndSub调用的本质:转入被调用过程去执行,完成后返回2、调用Sub过程要执行一个过程,必须调用该过程。调用的40说明:1、使用Call语句调用时,参数必须放在括号内,如没有参数,括号可省略2、用过程名调用时,过程名后不能加括号,若有参数,参数与过程名间用空格隔开3、参数表:在调用语句中的参数称为实际参数(简称实参),实参可以是变量、常量、数组或表达式,参数间用逗号隔开4、可以直接调用本模块中声明的过程或标准模块中声明的全局过程;5、当定义的过程重名时,调用过程时,过程名前应加模块名修饰;6、如果要调用窗体模块中声明的全局过程,调用时过程名前应加窗体名。说明:1、使用Call语句调用时,参数必须放在括号内,如没有41Function过程与Sub过程的主要区别是:

Function过程可通过函数名返回一个值到调用的过程1、

声明Function过程(函数定义)格式:[Public|Private][Static]Function函数过程名[(<参数列表>)][As<类型>]

[<语句块>][<函数过程名>=<表达式>]‘返回值语句[ExitFunction]EndFunction注意:在函数体内,函数名可以当变量名使用,函数的返回值就是通过对函数名的赋值语句来实现的。即函数值通过函数名返回。函数体中的ExitFunction语句的功能是强制退出函数并返回函数过程需要返回的值的类型由As<类型>设置。9.3Function过程(自定义函数)函数体Function过程与Sub过程的主要区别是422、调用Function过程Function过程的调用,与标准函数(内部函数)相同。

通常用在表达式中

格式:函数名(<实参列表>)特点:不能独立成为语句,必须参加表达式的运算。如1:下面是已知直角三角形两直角边的值,计算斜边的函数。

functionmyfun(Aasinteger,Basinteger)asstring

myfun=sqr(A*A+B*B)

Endfunction

SubCommand1_Click()a=val(text1.text):b=val(text2.text)

label1.caption=myfun(a,b)

EndSub2、调用Function过程Function过程的43例2:将前面的两个Sub过程改为Function过程。PrivateFunctiontriarea(xAsDouble,yAsDouble,zAsDouble)DimsAsDoubles=(x+y+z)/2triarea=Sqr((s-x)*(s-y)*(s-z)*s)EndFunctionPrivateSubCommand1_Click()

Dima#,b#,c#,s#,intYesorNo%a=Val(Text1.Text):b=Val(Text2.Text)c=Val(Text3.Text)

Ifa+b>cAndb+c>aAndc+a>bThen

Print"面积=";triarea(a,b,c)

Else

intYesorNo=suberr()‘无参数时,括号不能省略

EndIfEndSub例2:将前面的两个Sub过程改为Function过程。449.4参数传递不同模块(过程)之间数据的传递方式:通过全局变量实现各过程中共享数据(即在“通用”部份定义的变量,由该模块所有过程共享)通过过程调用实参与形参的结合实现按值传递(单向传递)按地址传递(双向传递)9.4参数传递不同模块(过程)之间数据的传递方式:通过45Sub过程和Function函数过程中的<参数列表>中的参数称为形式参数(形参),在程序中调用Sub过程和Function函数过程时<参数列表>中称为实际参数(实参)。在调用过程时,就是把“实参”依次按位置传递给被调用过程的“形参”,然后执行被调用过程中的语句。参数传递时相当于给变量赋初值。如:

Printgreatcd(x,y)

PublicFunctiongreatcd(mAsInteger,nAsInteger)

参数传递有两种模式:按值传递与按址传递9.4参数传递Sub过程和Function函数过程中的<参数列表>中的参数46按值传递就是将实参的值传送给被调用过程中的形参。即:系统把实参复制一份传送给形参。这样,被调用的过程如果改变了形参的值,也不会改变实参的值。在VB中,传值方式的标志为:在形参前加上ByVal。这种传递方式是一种单向的数据传递,即调用时只能由实参的值传递给形参,调用结束不能由形参将操作结果返回给实参。实参可以是常数、变量或表达式。1、按值传递按值传递就是将实参的值传送给被调用过程中的形参。即:系统把实47例:写出下列程序的运行结果Subtryout(ByValxasinteger,ByValyasinteger)x=x+100y=y*6print“x=“;x.”y=“;yEndSubSubForm_click()Dima%,b%a=10:b=20tryouta,bPrint“a=“;a,”b=“;bEndSub传值:X=110y=120a=10b=20例:写出下列程序的运行结果Subtryout(ByVal482、按址传递——变量的引用传址方式是将实参在内存的地址传递给形参,也就是实参、形参公用内存的“地址”。在VB中,按址传递数据是在形参前加上ByRef(默认方式)。这种传递方式是一种双向的数据传递,即调用时实参将值传递给形参;调用结束由形参将操作结果返回给实参。当用传址方式时,实参只能是变量、数组名,不能是常数、表达式。修改前例题ByValByRef再写其运行结果2、按址传递——变量的引用传址方式是将实参在内存的地址传49Subtryout(ByRefxasinteger,ByRefyasinteger)x=x+100y=y*6print“x=“;x.”y=“;yEndSubSubForm_click()Dima%,b%a=10:b=20tryouta,bPrint“a=“;a,”b=“;bEndSub传址:X=110y=120a=110b=120Subtryout(ByRefxasinteger,503、数组作过程的参数VisualBasic允许把数组作为实参传送到过程中。数组作参数是通过传地址方式传送。在传送数组时,除遵守参数传送的一般规则外,还应注意以下几点:

1.为了把一个数组的全部元素传送给一个过程,应将数组名分别写入形参表中,并略去数组的上下界,但括号不能省略。PrivateSubSort(a()Assingle)

……EndSub其中形参“a()”即为数组。3、数组作过程的参数VisualBasic512.被调过程可通过Lbound和Ubound函数确定实参数组的上、下界。3.当用数组作形参时,对应的实参必须也是数组,且类型一致。4.实参和形参结合是按地址传递,即形参数组和实参数组共用一段内存单元。例如:定义了实参数组b(1to8),给它们赋了值,调用Sort()函数过程的形式如下:Sortb()或CallSort(b())实参数组后面的括号可以省略,但为便于阅读,建议一般不要省略为好。3、数组作过程的参数2.被调过程可通过Lbound和Ubound函52调用时形参数组a和实参数组b虚实结合,共用一段内存单元,如图6-7所示。因此在Sort()过程中改变数组a的各元素值,也就相当于改变了实参数组b中对应的元素的值,当调用结束时,形参数组a成为无定义。

b(1)b(2)b(3)b(4)b(5)b(6)b(7)b(8)

a(1) a(2)a(3)a(4)a(5)a(6)a(7)a(8)参数为数组时虚实结合示意图

3、数组作过程的参数调用时形参数组a和实参数组b虚实结合,共用一53可选参数和可变参数1、可选参数

在过程的形参列表中加入Optional关键字,就可以指定过程的参数为可选的。如果指定了可选参数,则参数表中此参数后面的其它参数也必是可选的,并且要用Optional关键字来声明。

例6:求两个数的和的函数过程。

lt6.vbp函数过程:PublicFunctionmysum(firstAsInteger,secondAsLong,Optionalthird)mysum=first+second

IfNotIsMissing(third)Thenmysum=mysum+thirdEndFunction可选参数和可变参数1、可选参数例6:求两个数的和的函数54事件过程:PrivateSubCommand1_Click()DimaAsInteger,bAsLong,cAsDoubleDimsumAsIntegera=10:b=20Sum=mysum(a,b)Print"sum=";Suma=10:b=20:c=30Sum=mysum(a,b,c)Print"sum=";SumEndSubIsMissing()——检测可选参数是否被省略事件过程:552、不定数量的参数(可变参数)

一般说来,过程调用中的参数个数应等于过程说明的参数个数。在传递参数时,如果要求参数的数目可以变化,则在函数过程或Sub过程的形参前可加ParamArray关键字(不能与ByValByDef…连用)指明。格式如下:Sub过程名([其他参数,]ParamArray<数组名>())

2、不定数量的参数(可变参数)一般说来56PrivateSubCommand1_Click()

Dims(),a%,bAsLong,cAsVariant,dAsDoubles=Array(1,2,3,4,5)Print"sum=";multisum(s(0),s(2),s(4))a=1000:b=10000:c=100:d=10Print"sum=";multisum(a,b,c,d)EndSub

PublicFunctionmultisum(ParamArrayp())

Dimint1%,sumasvariantForint1=LBound(p)ToUBound(p)

温馨提示

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

评论

0/150

提交评论