资源预览内容
第1页 / 共74页
第2页 / 共74页
第3页 / 共74页
第4页 / 共74页
第5页 / 共74页
第6页 / 共74页
第7页 / 共74页
第8页 / 共74页
第9页 / 共74页
第10页 / 共74页
亲,该文档总共74页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
本章内容及要求 8.1 Sub过程的定义和调用 8.2 Function函数过程的定义和调用 8.3 参数传递 8.4 过程的嵌套和递归调用 8.5 变量及过程的作用域(1)窗体事件过程 Private Sub Form_事件名(参数列表)语句组 End Sub(2)控件事件过程 Private Sub 控件名_事件名(参数列表) 语句组 End Sub8.1.1 事件Sub过程8.1 Sub子过程的定义和调用在VB中Sub子过程分为:事件过程和用户自定义过程方法一: 通过 “工具”菜单中的“添加过程”命令,出现“添加过 程”对话框,选择过程类型(子过程、函数、属性、事件)及 作用范围(公有的Public、私有的Private),单击确定后得到一个过程定义的结构框架(模板),如:Sub子过程的定义-两种方法8.1.2 用户自定义 Sub子过程定义Public Sub Sort( ) End SubPublic|PrivateStatic Sub 子过程名(形参表)语句组Exit Sub语句组 End Sub 方法二:直接在代码窗口中输入过程体例1: 编一个交换两个整型变量值的子过程。Private Sub Swap( X As Integer, Y As Integer)Dim temp As IntegerTemp=X X=YY=Temp End Sub例2:编写求阶乘的子过程。 Private sub fact(n As Integer,f as Double) Dim i As Integerf = 1For i = 1 To nf = f * iNext End sub。说明: (1)子过程名:命名规则与变量名规则相同。子过程名不返回值 ,而是通过形参与实参的传递得到结果,调用时可返回多个值(2)形式参数列表:形式参数通常简称“形参”,仅表示形参的类型、个数、位置,定义时是无值的,只有在过程被调用时,虚实参结合后才获得相应的值。(3)过程可以无形式参数,但括号不能省。(4)参数的定义形式:ByValByRef变量名( )As 类型,ByVal表示当该过程被调用时,参数是按值传递的;ByRef表示当该过程被调用时,参数是按地址传递的,缺省时传址。 方法一: Call 子过程名(参数列表)方法二:子过程名 参数列表 说明:(1)参数列表称为实参或实元,它必须与形参保持个数相同,位置与类型一一对应。(2)调用时把实参值传递给对应的形参。其中值传递(形参前有ByVal说明)时实参的值不随形参的值变化而改变。而地址传递时实参的值随形参值的改变而改变。8.1.3 子过程的调用(3)当参数是数组时,形参与实参在参数声明时应省略其维数,但括号不能省。(4)调用子过程的形式有两种,用Call关键字时,实参必须加圆括号括起,反之则不用加圆括号括起。实参之间用“,”分隔。例:调用上面定义的Swap子过程的形式:Swap a,bCall Swap(a,b)在某个事件过程中调用已定义 的阶乘的过程fact: Private Sub Command1_Click()Dim n As Integer, m As Longn = 5Call fact(n, m)Print m End SubPrivate Sub CmdOK_click()Call Swap(a,b)Swap a,bEnd SubPrivate Sub Swap(x%,y%)Dim temp%Temp=X X=Y Y=TempEnd Sub过程调用的执行过程:Visual Basic函数分为内部函数和外部(自定义)函数,外部函数是用户根据需要用Function关键字定义的函数过程,与子过程不同的是函数名将返回一个值 。 8.2 Function函数过程的定义和调用方法一: 通过 “工具”菜单中的“添加过程”命令,出现“添加过程”对话框,选择过程类型(子过程、函数、属性、事件)及作用范围 (公有的Public、私有的Private),单击确定后得到一个函数定义的结构框架(模板),如:Public Function Sort( ) End Function8.2.1 Function函数过程的定义Function函数过程过程的定义-两种方法Public|PrivateStatic Function 函数名()As函数名=返回值 Exit Function函数名=返回值End Function方法二:直接在代码窗口中输入函数体Function fact(n As Integer) As DoubleDim i As Integer, f As Doublef = 1For i = 1 To nf = f * iNextfact = f End Function把例2阶乘的sub 子过程改为Function函数过程说明:(1)函数名:命名规则与变量名规则相同。但不能与系统的内部函数或其它通用子过程同名,也不能与已定义的全局变 量和本模块中模块级变量同名。 (2)在函数体内,函数名可以当变量使用,函数的返回值就是通过对函数名的赋值语句来实现的,在函数过程中至少要 对函数名赋值一次。 (3)AS类型:是指函数返回值的类型,若省略,则函数返 回变体类型值(Variant)。 (4)Exit Function:表示退出函数过程,常常是与选择结构 (If或Select Case语句)联用,即当满足一定条件时,退出函数过程。 (5)形参数列表:形参的定义与子过程完全相同。 调用形式如下:函数名(实参列表)说明:在调用时实参和形参的数据类型、顺序、个数必须匹配 。函数调用只能出现在表达式中,其功能是求得函数的返回值 。8.2.2 函数过程的调用调用阶乘的过程: Private Sub Command1_Click()Dim S As IntegerS = 5Print fact(S) End Sub2009-03-29以下关于过程及过程参数的描述中,错误的是 A)过程的参数可以是控件名称 B)调用过程时使用的实参的个数应与过程形参的个数相同 C)只有函数过程能够将过程中处理的信息返回到调用程中 D)窗体可以作为过程的参数课堂练习2010-03-22下面是求最大公约数的函数的首部 Function gcd(ByVal x As Integer, ByVal y As Integer) As Integer 若要输出8、12、16这3个数的最大公约数,下面正确的语句是A)Print gcd(8,12),gcd(12,16),gcd(16,8)B)Print gcd(8,12,16)C)Print gcd(8),gcd(12),gcd(16)D)Print gcd(8,gcd(12,16)Visual Basic中不同模块(过程)之间数据的传递有两种方式 : 通过过程调用实参与形参的结合实现; 使用全局变量来实现各过程中共享数据。 1、形式参数是指在定义子过程和函数时,出现在Sub过程名或Function 函数名后面括号内的变量,是用来接收传送给Sub过程或 Function的数据,形参表中的各个变量之间用逗号分隔。 8.3 参数传递8.3.1 形式参数与实际参数2、实际参数实际参数是指在调用Sub或Function时,出现在子过程名或函数名后括号内的参数,其作用是将它们的数据(数值或地 址)传送给Sub或Function过程与其对应的形参变量。实参可由常量、表达式、有效的变量名、数组名(如A( ))组成,实参表中各参数用逗号分隔。参数传递指主调过程的实参(调用时已有确定值和内存地址的参数)传递给被调过程的形参。参数的传递有两种方式:按值传递、按地址传递。形参前加“ByVal”关键字的是按值传递,缺省或加“ByRef”关键字则按地址传递。 8.3.2 传地址与传值传址: 形参得到的是实参的地址,当形参值的改变同时也改变实参的值。因为它们共用一个地址。传值: 形参只得到的是实参的值,形参值的改变不会影响实参的值。因为形参并不知道实参的地址。Sub Swap2(x%, y%)Dim Temp% Temp = x: x = y: y = Temp End SubSub Swap1(ByVal x%, ByVal y%)Dim Temp% Temp = x: x = y: y = TempEnd Sub什么是传址和传值呢?传值传址传值Private Sub CmdOK_Click()Dim a%,b%a = 10: b = 20Swap1 a, b 传 值Print “A1=“; a, “B1=“; ba = 10: b = 20Swap2 a, b 传地址Print “A2=“; a, “B2=“; b End SubSub Swap2(x%, y%)Dim Temp% Temp = x: x = y: y = Temp End SubSub Swap1(ByVal x%, ByVal y%)Dim Temp% Temp = x: x = y: y = TempEnd Sub值传递的执行过程如下图:通过地址传递数据的执行过程 在子过程和函数过程调用时,如果实参是常量( 包括系统常量、用Const自定义的符号常量)或表达式,无论在定义时使用值传递还是地址传递,此时 都是按值传递方式将常量或表达式计算的值传递给 形参变量。如果形参定义是按传地址方式,但调用时想使实 参变量按值方式传递,可以把实参变量加上括号, 将其转换成表达式即可。 8.3.3 有关过程之间数据传递的几点说明解决一个问题既可以使用子过程,也可以使用函数 过程,是使用子过程还是使用函数过程呢?如果是需要求得一个值,一般情况使用函数过程, 如不是为了求一个值,而是完成一些操作,或需要返回 多个值,则使用子过程比较方便。使用子过程还是使用函数过程?Visual Basic中数组作参数是通过传地址方式传送。在传送数组时,除遵守参数传送的一般规则外,还应注意以下 几点:1为了把一个数组的全部元素传送给一个过程,应将 数组名写入形参表中,并略去数组的上下界,但括号不能省略。Private Sub Sort( a() As single)End Sub其中形参“a( )”即为数组。8.3.4 数组作为过程的参数2被调过程可通过Lbound和Ubound函数确定实参数组的上、下界。3当用数组作形参时,对应的实参必须也是数组,且类型一致。4实参和形参结合是按地址传递,即形参数组和实参数组共用一段内存单元。例如:定义了实参数组b(1 to 8),给它们赋了值,调用Sort()函数过程的形式如下:Sort b() 或 Call Sort(b() ) 实参数组后面的括号可以省略,但为便于阅读,建议一般不要 省略为好。 课堂练习Function FirProc(z As Integer,y As Integer,z As Integer)FirProc2x+y+3z End Function Function SecProc(x As Integer,y As Integer,z As Integer)SecProcFirProc(x,y,z)+x End Function Private Sub Command1_Click()Dim a As Integer,b As Integer,c As Integera2:b3:c4Print SecProc(c,b,a) End Sub A) 21 B) 19 C) 17 D) 34课堂练习2010-9-22以下关于局部变量的叙述中错误的是 A)在过程中
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号