资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,计算机公共课教研室,2010,年,*,Click to edit Master title style,Visual Basic 6.0,计算机语言与程序设计,Visual Basic 6.0,计算机公共课教研室,2010,年,上章回顾,图形控件,图片框,图像框,显示图形,对象名,.,Picture=LoadPicture,(,文件名,),删除图形,对象名,.,Picture=LoadPicture,(,),驱动器列表框,(,DriveListBox,),Drive,属性,目录列表框,(,DirListBox,),Path,属性,文件列表框,(,FileListBox,),Path,属性,Private Sub Drive1_Change(),Dir1.Path=Drive1.Drive,End Sub,Private Sub Dir1_Change(),File1.Path=Dir1.Path,End Sub,计算机公共课教研室,2010,年,Function,过程,1,参数传递,3,第八章 过程与函数,Sub,过程,2,过程的嵌套与递归,4,计算机公共课教研室,2010,年,例:某同学遇到了这样的一个编程问题:,1!+3!+5!=,?,过程的引入,如何编程?,分析:,把求阶乘的代码作为,“,公共,”,程序段落,那么求各个数的阶乘时,就只需调用这个,“,公共,”,程序段落就可以了。,求阶乘的方法如下:,For i=1 to n,S=S*i,Next i,这个,“,公共,”,程序段落可以定义成过程,称为,“,通用过程,”,。,计算机公共课教研室,2010,年,过程的引入,:,使同类的操作不重复,(,操作方法相同、参数不同,),过程,:,完成一段独立功能,可供其他过程使用,(,调用,),。,过程又称为子程序,调用过程,:,调用其他过程的过程,过程的引入,调用过程,:,调用,fact,调用,fact,调用,fact,子程序,:fact,计算机公共课教研室,2010,年,过程分类,Sub,过程,Function,过程,内部过程,(,方法,),事件过程,自定义过程*,内部函数,自定义函数*,计算机公共课教研室,2010,年,8.1 Function,过程,8.1.1 Function,过程的定义,1.Function,过程的格式,Public|PrivateStatic,Function,()As,=,Exit Function,=,End Function,计算机公共课教研室,2010,年,2.,说明,(1)Public:,缺省值。,(2)Private:,(3)Static:,使用,Static,时表示将过程中的所有局部变量说明为静态变量。,(4):Function,过程的名称,遵循变量的命名规则。,(5),:,表示在调用时要传递给,Function,过程的参数变量列表。多个变量之间用逗号隔开。,8.1 Function,过程,计算机公共课教研室,2010,年,(6)Exit Function,语句,:,从,Function,过程中退出。,(7)Function,过程通过赋值语句,=,将函数的返回值赋给,。,(8)Function,过程的定义不能嵌套。,8.1 Function,过程,计算机公共课教研室,2010,年,3.Function,过程的建立,:,直接在代码窗口中输入。,在代码窗口,:,“,工具,”,菜单,“,添加过程,”,命令。,8.1.2 Function,过程的调用,直接在表达式中调用。,格式,:(),:,常量、变量或表达式,各参数之间用逗号分隔。如果是数组,在数组名之后必须跟一对空括号。,8.1 Function,过程,计算机公共课教研室,2010,年,【,例,8-1】,求,1!+3!+5!=,?,自定义求阶乘的函数过程,Fact,Function Fact(N As Integer)As Double,Dim i As Integer,F As Double,F=1,F,用于保存阶乘值,For i=1 To N,F=F*i,Next i,Fact=F,给函数过程名赋值,End Function,在按钮的,Click,事件过程中调用函数过程,Private Sub,Form_Click,(),Dim sum As Double,sum=sum+Fact(1)+Fact(3)+Fact(5),调用函数,Print 1!+3!+5!=;sum,End Sub,8.1 Function,过程,函数需先定义再调用。,函数通过函数名返回结果。,计算机公共课教研室,2010,年,【,例,8-2】,利用,Function,过程计算阶乘,求组合数。界面如下图所示。运行时,在文本框,Text1,和,Text2,中输入,m,和,n,值,单击按钮计算组合数,结果显示于文本框,Text3,中。,8.1 Function,过程,计算机公共课教研室,2010,年,自定义求阶乘的函数,Fact,Function,Fact,(N As Integer)As Double,Dim F As Double,i As Integer,F=1,For i=1 To N,F=F*i,Next i,Fact=F,End Function,8.1 Function,过程,计算机公共课教研室,2010,年,按钮的,Click,事件过程,Private Sub Command1_Click(),Dim m As Integer,n As Integer,c As Double,m=Val(Text1.Text):n=Val(Text2.Text),调用,Fact,函数求各阶乘值,c=,Fact(m)/(Fact(n)*(Fact(m-n),Text3.Text=Trim(,Str,(c),End Sub,8.1 Function,过程,调用时的参数可以是常量,也可以是变量。,计算机公共课教研室,2010,年,8.2 Sub,过程,8.2.1 Sub,过程的定义,1.Sub,过程的格式,Private|PublicStatic,Sub,(),Exit Sub,End Sub,2.,说明,(1)Exit Sub,用于退出,Sub,过程。,(2),不具有值的意义,在,Sub,过程中不能给,赋值,也不能给,定义类型。,(3)Sub,过程通过,中的参数返回值。,(4)Sub,过程的建立方法与,Function,过程的建立方法相同。,计算机公共课教研室,2010,年,8.2.2 Sub,过程的调用,格式一,:,Call(),格式二,:,说明,:,(1):,要调用的,Sub,过程名;,(2):,可以是常量、变量或表达式,各参数之间用逗号分隔。如果是数组参数,则要在数组名之后跟一对空括号。,(3),用,Call,语句调用一个,Sub,过程时,如果过程本身没有参数,则省略,和括号。,(4),格式二省略了,Call,关键字,同时,两边也不能带括号。,8.2 Sub,过程,计算机公共课教研室,2010,年,【,例,8-3】,用,Sub,过程实现求,1!+3!+5!,。,分析,:,参数表中应有一个参数,n,,还应有另,一个参数,F,用来返回阶乘值。,Option Explicit,Sub Fact(N As Integer,F As Double),Dim I As Integer,F=1,For I=1 To N,F=F*I,Next I,End Sub,8.2 Sub,过程,计算机公共课教研室,2010,年,Private Sub Command1_Click(),Dim F1 As Double,F2 As Double,F3 As Double,Dim sum As Double,调用,Fact,过程求,1,的阶乘,阶乘值存于实参,F1,中,Call Fact(1,F1),调用,Fact,过程求,3,的阶乘,阶乘值存于实参,F2,中,Call Fact(3,F2),调用,Fact,过程求,5,的阶乘,阶乘值存于实参,F3,中,Call Fact(5,F3),sum=F1+F2+F3,Print 1!+3!+5!=;sum,End Sub,8.2 Sub,过程,Sub,过程需先定义再调用。,Sub,过程通过参数返回结果。,计算机公共课教研室,2010,年,【,例,8-4】,编写,Sub,过程,打印以下图形。,分析,:,打印以上图形,不需要返回值,因此,无需引入参数,。,*,*,*,*,*,Sub a(),For i=1 To 6,Print Tab(7-i);,For j=1 To 2*i-1,Print*;,Next j,Print,Next i,End Sub,Private Sub,Form_Click,(),Call a(),End Sub,8.2 Sub,过程,计算机公共课教研室,2010,年,【,例,8-5】,编写,Sub,过程,求三个数中的最大数和最小数。,分析,:,首先要设置三个参数,如,x,、,y,、,z,,,用于接收三个原始数据,另外引入,两个参数,max,和,min,,,用于返回最大和最小数。,Sub s(x,y,z,max,min),max=x,min=x,If y max Then max=y,If y max Then max=z,If z min Then min=z,End Sub,Private Sub,Form_Click,(),Dim max,min,Call s(5,20,4,max,min),Print,最大值是,;max;,最小值是,;min,End Sub,8.2 Sub,过程,计算机公共课教研室,2010,年,8.3,参数的传递,作用:,调用过程与被调用过程之间的一种数据通讯方法。,8.3.1,形参和实参,形参:出现在,Sub,或,Function,语句中。,实参,:,出现在调用程序中。,例如,定义如下一个过程,:,Sub,SubTest,(,n,As Integer,Sum As Single),End Sub,调用语句,:,Call,SubTest,(,a,s),形参,实参,计算机公共课教研室,2010,年,说明,:,形参表与实参表中对应参数个数、类型、位置顺序必须一一对应。,形参表中的参数可以是,:,除固定长度字符串之外的合法变量名、数组名,(),实参表中的参数可以是,:,常量、变量、表达式、数组名,(),形参与实参的结合有两种方式,:,按值传递和按地址传递。,8.3,参数的传递,计算机公共课教研室,2010,年,8.3,参数的传递,格式,:,ByVal,|,ByRef,()As,ByVal,:,表示该参数,按值传递,。,ByRef,:,缺省值。表示该参数,按地址传递,。,:,遵循变量命名规则的任何变量名 或数组名。,():,当参数为数组时使用。,计算机公共课教研室,2010,年,8.3.2,按值传递和按地址传递,1.,按值传递,实参把其值传递给形参而不传递实参的地址。,(1),当实参为常量或表达式时,数据传递总是单向的。,例如,:Call SubTest(10,1+2),Sub,SubTest,(n As Integer,Sum As Single),8.3,参数的传递,计算机公共课教研室,2010,年,(2),实参是变量时,,,要实现按值传递需要在形参之前通过关键字,ByVal,来实现。,【,例,8-6】,请阅读下列程序。,Sub SS(,ByVal,X,ByVal,Y,ByVal,Z),X=X+1:Y=Y+1:Z=Z+1,End Sub,Private Sub Command1_Click(),A=1:B=2:C=3,Call SS(A,B,C),Print A,B,C,End Sub,运行时,单击命令按钮在窗体上打印,:,1 2 3,8.3,参数的传递,计算机公共课教研室,2010,年,2.,按地址传递,指将实参的地址传给形参,使形参和实参具有相同的地址,即形参与实参共享同一存储单元。,(1),当实参为变量或数组时,形参使用关键字,ByRef,定义,(,或省略,),表示要按地址传递。,(2),当参数是数组时,数组名之后必须使用一对空的圆括号。,按地址传递可以实现调用过程与子过程之间数据的双向传递。,8.3,参数的传递,计算机公共课教研室,2010,年,【,例,8-7】,请阅读下列程序。,Sub SS(,ByRef,X,ByRef,Y,ByRef,Z),X=X+1:Y=Y+1:Z=Z+1,End Sub,Private Sub Command1_Click(),A=1:B=2:C=3,Call SS(A,B,C),Print A,B,C,End Sub,形参,:X Y Z,实参,:A B C,存储单元,运行时,单击命令按钮在窗体上打印,:,2 3 4,8.3,参数的传递,计算机公共课教研室,2010,年,【,例,8-8】,编写一个计算乘幂的,Function,过程,用来计算,x,的,y,次幂,其中,y0,。,单击窗体时调用该过程打印,5,1,、,5,2,、,5,3,、,5,4,、,5,5,的值。,Option Explicit,Function Power(x As Single,ByVal,y As Integer),Dim result As Single,result=1,Do While y 0,result=result*x,y=y-1,Loop,Power=result,End Function,8.3,参数的传递,计算机公共课教研室,2010,年,Private Sub Form_Click(),Dim i As Integer,For i=1 To 5,Print Power(5,i),Next i,End Sub,思考,:,如果取消过程,Power,中参数,y,前的关键字,ByVal,,,则会出现什么情况?,8.3,参数的传递,计算机公共课教研室,2010,年,8.6,过程的嵌套,在一个过程执行期间又调用另一个过程,称为过程的嵌套调用。,调用过程 子过程,S1,子过程,S2,调用,S1,调用,S2,计算机公共课教研室,2010,年,【,例,8-9】,用,Function,过程求,1!+2!+3!+,+20!,Private Sub Command1_Click(),Dim n As Integer,n=Val(,InputBox,(n=),Print,Sigma(n),调用,Sigma,过程,End Sub,Function Sigma(n As Integer)As Double,Dim i As Integer,sum As Double,sum=0,For i=1 To n,sum=sum+,Fact(i),调用,Fact,过程,Next i,Sigma=sum,End Function,8.6,过程的嵌套,计算机公共课教研室,2010,年,Function Fact(n As Integer)As Double,Dim i As Integer,f As Double,f=1,For i=1 To n,f=f*i,Next i,Fact=f,End Function,8.6,过程的嵌套,计算机公共课教研室,2010,年,本章小结,1.,函数过程的定义和调用,定义,:,Public|Private Static Function (),As,函数名,=,表达式,End Function,形参表,:,变量、数组名,(),调用,:,变量,=,函数名,(),Print,函数名,(),与,VB,的内部函数使用方法一样。,计算机公共课教研室,2010,年,2.Sub,过程的定义和调用,定义,:,Private|Public Static Sub(),End Sub,调用,:,(1),Call,(,),(2),实参表,:,常量、变量、表达式,参数应与定义时一致,(,个数、类型、次序,),注意,:,实参与形参的类型声明位置,注意,:,Sub,过程调用与函数过程调用的区别,本章小结,计算机公共课教研室,2010,年,3.,过程之间的参数传递,按值传送、按地址传送,CALL S(,实际参数,),SUB S(,形式参数,),按值传送,:,实际参数为常数、表达式、,ByVal,变量,按地址传送,:,实际参数变量、,ByRef,变量、数组名,(),按值传送,按地址传送,本章小结,计算机公共课教研室,2010,年,课外作业,某班有,50,名学生,按学号输入了,49,名学生的计算机成绩,学号为,27,号的学生成绩没有输入,请将,27,号学生的计算机成绩插入到指定位置。要求用过程来实现程序的编写。,计算机公共课教研室,2010,年,Thank You!,计算机公共课教研室,2010,年,
展开阅读全文