《第九章 过程课件.ppt》由会员分享,可在线阅读,更多相关《第九章 过程课件.ppt(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九章 过程ppt课件(全)第9章第九章 过程ppt课件(全) 在设计一个规模较大、复杂程度较高的程序时,往往根在设计一个规模较大、复杂程度较高的程序时,往往根据需要按功能据需要按功能将程序分解成若干个相对独立的部分将程序分解成若干个相对独立的部分,然后对,然后对每个部分分别编写一段程序,这些程序段称为每个部分分别编写一段程序,这些程序段称为 第九章 过程ppt课件(全)VB子程序分类图子程序分类图是对是对进行处理的程序段进行处理的程序段第九章 过程ppt课件(全)是指是指以规定语法结构组织的以规定语法结构组织的、可以被重复调用的可以被重复调用的、具具有特定功能的有特定功能的、相对独立的相对独
2、立的程序段。程序段。 不与任何特定的事件过程相关联,只能由别的过程调用不与任何特定的事件过程相关联,只能由别的过程调用 声明声明 Sub 过程过程就是在就是在的代码窗口编写一个能的代码窗口编写一个能实现预期功能的语句块。实现预期功能的语句块。 () Exit Sub 过程体过程体 第九章 过程ppt课件(全)每个通用过程都有一个每个通用过程都有一个同一模块中过程名不得重复。同一模块中过程名不得重复。过程前加上过程前加上Public关键字关键字或缺省,则该过程为或缺省,则该过程为,过程前加上过程前加上Private关键字关键字,则该过程为,则该过程为,只有在声明,只有在声明它的模块中才可以调用此
3、过程。它的模块中才可以调用此过程。在过程名前加上在过程名前加上Static关键字关键字,表明该过程的变量都是静态变量。,表明该过程的变量都是静态变量。形参列表形参列表是传递到过程中的变量名是传递到过程中的变量名(多个时用多个时用“,”分隔分隔),它指明了调它指明了调用时传递给过程的参数的类型和个数用时传递给过程的参数的类型和个数. 过程可以有参数,也可以不带任何参数。根据需要而定过程可以有参数,也可以不带任何参数。根据需要而定 格式为:格式为:ByVal|ByRef变量名变量名( ) AS 数据类型数据类型, ByVal 表示按值传递;表示按值传递;ByRef 表示按地址传递表示按地址传递6、
4、过程内不能再定义过程,过程定义也不能写在事件过程内、过程内不能再定义过程,过程定义也不能写在事件过程内第九章 过程ppt课件(全)Sub Tryout( x as integer , y as integer) x=x+100 y=y*6 Print x,y End Sub 建立通用过程可以使用以下两种方法:建立通用过程可以使用以下两种方法:第九章 过程ppt课件(全)要执行一个过程,必须调用该过程要执行一个过程,必须调用该过程。调用的方法为:。调用的方法为: Call 过程名过程名(实参列表实参列表) 过程名过程名 Sub 过程的调用过程的调用例:要调用前面的例:要调用前面的Tryout过程
5、,可以使用下面两种方式:过程,可以使用下面两种方式:Tryout(a , b) 或或 Tryout a , b主过程主过程Call 过程过程1End Sub过程过程1Call 过程过程2End Sub过程过程2End Sub调用的本质:转入被调用过程去执行调用的本质:转入被调用过程去执行,完成后返回完成后返回第九章 过程ppt课件(全)可以直接调用本模块中声明的过程或可以直接调用本模块中声明的过程或当定义的过程重名时,调用过程时,过程名前应加模块名修当定义的过程重名时,调用过程时,过程名前应加模块名修饰;饰;如果要调用如果要调用中声明的中声明的调用时过程名前调用时过程名前第九章 过程ppt课件
6、(全)与与Sub 过程过程 的主要区别是:的主要区别是: Public|Private Static Function 函数过程名函数过程名 () As End Function在函数体内,函数名可以当变量名使用,函数的返回值就是通过对函在函数体内,函数名可以当变量名使用,函数的返回值就是通过对函数名的赋值语句来实现的。即函数值通过函数名返回。数名的赋值语句来实现的。即函数值通过函数名返回。函数体中的函数体中的Exit Function语句的功能是强制退出函数并返回语句的功能是强制退出函数并返回函数过程需要返回的值的类型由函数过程需要返回的值的类型由 As 设置。设置。第九章 过程ppt课件(
7、全) 函数名函数名()不能独立成为语句,必须参加表达式的运算。不能独立成为语句,必须参加表达式的运算。下面是已知直角三角形两直角边的值,计算斜边的函数。下面是已知直角三角形两直角边的值,计算斜边的函数。 function myfun(A as integer,B as integer) as string myfun=sqr(A*A+B*B) End function 第九章 过程ppt课件(全)将前面的两个将前面的两个Sub过程改为过程改为Function过程。过程。Private Function triarea( As Double, As Double, As Double) Dim
8、s As Double s = (x + y + z) / 2 triarea = Sqr(s - x) * (s - y) * (s - z) * s)End FunctionPrivate Sub Command1_Click() Dim a#, b#, c#, s#, intYesorNo% a = Val(Text1.Text) : b = Val(Text2.Text) c = Val(Text3.Text) If a + b c And b + c a And c + a b Then Print 面积面积 =; triarea(a, b, c) Else intYesorNo =
9、 suberr( ) 无参数时,括号不能省略无参数时,括号不能省略 End IfEnd Sub第九章 过程ppt课件(全)通过全局变量实现各过程中共享数据通过全局变量实现各过程中共享数据(即在即在“通用通用”部份部份定义的变量,由该模块所有过程定义的变量,由该模块所有过程共共享享)通过过程调用实参与形参的结合实现通过过程调用实参与形参的结合实现第九章 过程ppt课件(全)Sub过程和过程和Function函数过程中的函数过程中的中的参数称为中的参数称为,在程序中调用,在程序中调用Sub过程和过程和Function函数过函数过程时程时中称为实际参数中称为实际参数 。 在调用过程时,在调用过程时,
10、就是就是把把“实参实参”依次依次按位置按位置传递给被调用过传递给被调用过程的程的“形参形参” ,然后执行被调用过程中的语句。,然后执行被调用过程中的语句。 Print greatcd(x, y) Public Function greatcd(m As Integer, n As Integer)与与 第九章 过程ppt课件(全) 按值传递按值传递就是将就是将传送给被调用过程中的传送给被调用过程中的。即:即:系统把实参复制一份传送给形参。系统把实参复制一份传送给形参。这样,这样,被调用的过程如果被调用的过程如果改变了形参的值,也不会改变实参的值。改变了形参的值,也不会改变实参的值。 在在VB中
11、,传值方式的标志为:中,传值方式的标志为:。 这种传递方式这种传递方式,第九章 过程ppt课件(全)写出下列程序的运行结果写出下列程序的运行结果Sub tryout(ByVal x as integer, ByVal y as integer) x=x+100 y=y*6 print “x=“;x.”y=“;yEnd SubSub Form_click() Dim a%,b% a=10:b=20 tryout a,b Print “a=“;a,”b=“;bEnd Sub传值:传值:X=110 y=120a=10 b=20第九章 过程ppt课件(全) 传址方式是将实参在内存的地址传递给形参,也就
12、是实参、传址方式是将实参在内存的地址传递给形参,也就是实参、形参公用内存的形参公用内存的“地址地址”。 在在VB中,按址传递数据是在形参前加上中,按址传递数据是在形参前加上ByRef(默认方式)。(默认方式)。 这种传递方式这种传递方式,即调用时实参将值传,即调用时实参将值传递给形参;调用结束由形参将操作结果返回给实参。当用传递给形参;调用结束由形参将操作结果返回给实参。当用传址方式时,址方式时, ByVal ByRef 第九章 过程ppt课件(全)Sub tryout(ByRef x as integer, ByRef y as integer) x=x+100 y=y*6 print “x
13、=“;x.”y=“;yEnd SubSub Form_click() Dim a%,b% a=10:b=20 tryout a,b Print “a=“;a,”b=“;bEnd Sub传址:传址:X=110 y=120a=110 b=120第九章 过程ppt课件(全) Visual Basic允许把数组作为实参传送到过程中。数组作允许把数组作为实参传送到过程中。数组作参数是通过传地址方式传送。在传送数组时,除遵守参数传参数是通过传地址方式传送。在传送数组时,除遵守参数传送的一般规则外,还应注意以下几点:送的一般规则外,还应注意以下几点: 1为了把一个数组的全部元素传送给一个过程,应将数为了把一
14、个数组的全部元素传送给一个过程,应将数组名分别写入形参表中,并略去数组的上下界,但括号不能组名分别写入形参表中,并略去数组的上下界,但括号不能省略。省略。Private Sub Sort(a() As single) End Sub其中形参其中形参“a( )”即为数组。即为数组。第九章 过程ppt课件(全) 2被调过程可通过被调过程可通过Lbound和和Ubound函数确定实参数组函数确定实参数组的上、下界。的上、下界。 3当用数组作形参时,对应的实参必须也是数组,且类当用数组作形参时,对应的实参必须也是数组,且类型一致。型一致。 4实参和形参结合是按地址传递,即形参数组和实参数实参和形参结合
15、是按地址传递,即形参数组和实参数组共用一段内存单元。组共用一段内存单元。 例如:定义了实参数组例如:定义了实参数组b(1 to 8),给它们赋了值,调用,给它们赋了值,调用Sort()函数过程的形式如下:函数过程的形式如下: Sort b( ) 或或 Call Sort( b() ) 实参数组后面的括号可以省略,但为便于阅读,建议一实参数组后面的括号可以省略,但为便于阅读,建议一般不要省略为好。般不要省略为好。 第九章 过程ppt课件(全) 调用时形参数组调用时形参数组a和实参数组和实参数组b虚实结合,共用一段内存单虚实结合,共用一段内存单元,如图元,如图6-7所示。因此在所示。因此在Sort
16、()过程中改变数组过程中改变数组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)参数为数组时虚实结合示意图参数为数组时虚实结合示意图 第九章 过程ppt课件(全) 在过程的形参列表中加入在过程的形参列表中加入Optional关键字关键字,就可以,就可以指定过程的参数为可选的。如果指定了可选参数,则指定过程
17、的参数为可选的。如果指定了可选参数,则参参数表中此参数后面的其它参数也必是可选的数表中此参数后面的其它参数也必是可选的,并且要用,并且要用Optional关键字来声明。关键字来声明。 求两个数的和的函数过程。求两个数的和的函数过程。 函数过程:函数过程:Public Function mysum (first As Integer, second As Long, Optional third ) mysum = first + second If Not IsMissing(third) Then mysum = mysum + thirdEnd Function第九章 过程ppt课件(全)
18、事件过程:事件过程:Private Sub Command1_Click() Dim a As Integer, b As Long, c As Double Dim sum As Integer a = 10: b = 20 Sum=mysum(a, b) Print sum=; Sum a = 10: b = 20: c = 30 Sum=mysum(a, b, c) Print sum=; SumEnd Sub IsMissing( )第九章 过程ppt课件(全) 一般说来,过程调用中的参数个数应等于过程说明一般说来,过程调用中的参数个数应等于过程说明的参数个数。的参数个数。在传递参数时
19、,在传递参数时,如果要求参数的数目可以如果要求参数的数目可以变化变化,则在函数过程或,则在函数过程或Sub过程的过程的ParamArray关键字关键字(不能与(不能与ByVal ByDef连用)连用)指明。指明。 格式如下:格式如下:Sub 过程名过程名( 其他参数其他参数, ParamArray ( ) ) 第九章 过程ppt课件(全)Private Sub Command1_Click() Dim s( ), a%, b As Long, c As Variant, d As Double s = Array(1, 2, 3, 4, 5) Print sum=; multisum( s(0
20、), s(2), s(4) ) a = 1000: b = 10000: c = 100: d = 10 Print sum=; multisum( a, b, c, d )End Sub Public Function multisum( ParamArray p() ) Dim int1%, sum as variant For int1= LBound(p) To UBound(p) sum = sum + p(int1) Next multisum=sum End Sub第九章 过程ppt课件(全) 窗体参数 形参定义格式: 形参名 As form 调用时实参: 必须为某个窗体名称 控
21、件参数: 形参定义格式: 形参名 As Control 调用时实参: 可为任意一个控件对象第九章 过程ppt课件(全)1、 过程的嵌套过程的嵌套 在程序中调用一子过程,而在子过程中又调用另外的子过在程序中调用一子过程,而在子过程中又调用另外的子过程,这种程序结构称为程,这种程序结构称为过程的嵌套。过程的嵌套。过程的嵌套调用执行过过程的嵌套调用执行过程如程如下图:下图:第九章 过程ppt课件(全)2、 过程的递归调用过程的递归调用 用自身的结构来描述自身,称递归。例如,对阶乘的定义:用自身的结构来描述自身,称递归。例如,对阶乘的定义:)!2() 1()!1()!1(!nnnnnn Visual
22、Basic允许在一个允许在一个Sub子过程和子过程和Function过程的定过程的定义内部调用自己,即递归义内部调用自己,即递归Sub子过程和递归子过程和递归Function函数。函数。 直接调用自己称为直接递归调用直接调用自己称为直接递归调用 间接调用自己称为间接递归调用间接调用自己称为间接递归调用第九章 过程ppt课件(全)Private Function fac(n As Integer) As Integer If n = 1 Then fac = 1 Else fac = n * fac(n - 1) End IfEnd FunctionPrivate Sub Form_Click(
23、) Print “fac(4)=”;fac(4)End Sub程序的递归过程:第九章 过程ppt课件(全)说明:说明:递归处理分递推和回归两个过程,如上图所示。递归处理分递推和回归两个过程,如上图所示。当一个大问题能够分解成同类型的小问题当一个大问题能够分解成同类型的小问题,且问题且问题 规模在逐渐减小规模在逐渐减小,才适合用递归解决才适合用递归解决.使用递归算法必须要满足以下的递归条件:使用递归算法必须要满足以下的递归条件: (1)存在递归结束条件及结束时的值;)存在递归结束条件及结束时的值; (2)能用递归形式表示,且递归向终止条件发展。)能用递归形式表示,且递归向终止条件发展。第九章 过
24、程ppt课件(全)变量的作用域 根据变量的作用域,变量分为()变量、变量和变量变量 在过程中用Dim/static语句定义,只存在于过程中 用Dim 定义的变量称为动态变量,生存期为过程的一次调用. 用Static定义的变量称为静态变量,生存期为整个应用程序的执行期间(重点掌握,举例)变量 Dim语句或Private语句定义,模块中的所有过程都可使用变量 Public语句定义,可以在所有模块中使用第九章 过程ppt课件(全)Private Sub Form_Click() Dim acc As Integer, i As Integer acc = 0 For i = 1 To 3 acc =
25、 acc + funa(i) Next i Print accEnd SubPrivate Function funa(x As Integer) As Integer Static s As Integer s = s + x funa = sEnd Function运行时单击窗体运行时单击窗体, 程序输出结果为程序输出结果为:第九章 过程ppt课件(全)能能变量名前加窗体名不能不能被其他模块存取能能不能被本模块的其他过程存取通用声明通用声明过程中声明位置PublicDimPrivateDimStatic声明方式标准模块窗体全局变量窗体/ 模块级变量局部变量作用范围不同作用范围的三种变量声明及使用规则第九章 过程ppt课件(全)不同作用范围的二种过程定义及调用规则能但过程名必须唯一,否则要加标准模块名能但必须在过程名前加窗体名不能不能能否被本应用程序其他模块调用能能能能能否被本模块其他过程调用Public缺省Private定义方式 标准模块窗体标准模块窗体全局级模块级作用范围根据过程的作用域,过程分为级和级。
限制150内