资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第8章 过程在应用程序中的运用,通用过程通常分为两种: (1)Sub过程(又称子过程、子程序),它不返回值,例如显示矩阵、动画。 (2)Function过程(又称函数过程),它有返回值,例如求阶乘、平均值等。,子过程,1引例 2创建子过程 3调用子过程 4子过程的应用举例,例8-1 要求在文本框中输入姓名,单击“问候”,调用Hello过程,显示“你好!”的消息对话框,单击“确定”清除原有内容。,1.引例,2创建子过程,建立子过程有两种方法:直接在“代码”编辑窗口中输入过程代码或使用“添加过程”对话框。 (1)在“代码”编辑窗口中输入 Sub过程的完整定义格式如下: Private|Public Sub () 子过程体 局部变量和常数声明 Exit Sub End Sub (2)使用“添加过程”对话框,例8-2 编写求n!的子过程。 Public Sub Fac(n%, p#) Fac子过程,求n! Dim i% p = 1 For i = 1 To n p = p * i Next i End Sub,3调用子过程,调用Sub过程有两种方法: (1)使用Call语句:Call () 例8-1中“Call Hello(Text1)” 是实际参数表,实参必须与形参保持个数相同,位置和类型一一对应。 当用Call语句调用执行过程时,其过程名后必须加括号,若有参数,则参数必须放在括号之内。 (2)直接使用过程名: () 例8-1中的调用语句“Call Hello(Text1)”也可以写成“Hello (Text1)”或“ Hello Text1”,4.子过程的应用举例,例8-3 通过调用例8-2的Fac子过程来计算m!/ (n!*(m-n)!)。 新建工程,根据运行结果图设计窗体界面,如图8-5所示。需要7个控件:3个文本框(text1、text2、text3)、3个标签(label1、label2、label3),1个命令按钮(command1)。大部分属性在Form_Load中设置。运行过程中,在text1和text2中分别输入m和n的值,单击command1,表达式结果放在text3中。,例8-4 设计一个程序,其作用是显示字符图案。显示的字符和行数由输入对话框决定,形状可以是正三角形或倒三角形。 提示:编写通用过程triangle,输出三角形图案。显示的字符S、行数Line以及做为正或倒的三角形标志Flag 均作为参数。,函数过程,1引例 2创建函数过程 3调用函数过程 4函数过程应用举例,1引例,例8-5 使用函数过程改写例8-3。,2创建函数过程,建立函数过程和建立子过程类似,也有两种方法。 (1)直接在“代码”编辑窗口中输入过程代码,方法同子过程。 函数过程的完整定义格式如下: Private|Public Function () As 数据类型函数过程体 局部变量和常数声明 Exit Function 函数名=表达式 End Function (2)使用“添加过程”对话框。,3调用函数过程,调用Function过程的方法和调用Visual Basic 6.0内部函数的方法一样,即在表达式中可以通过使用函数名,并在其后用圆括号给出相应的参数列表来调用一个Function过程。一般形式如下: 变量名=函数过程名(实参列表) 被调用的函数过程可以作为表达式,也可以作为表达式的一部分。 在例8-5中调用函数过程的语句是“Text3.Text = Fac2(m) / (Fac2(n) * Fac2(m - n)”。程序执行时3次调用函数过程Fac2,返回值分别为m!、n!、(m-n)!。,4函数过程应用举例,例8-6 由滚动条的位置来决定n的值,求1到n的整数和。 例8-7 分别利用函数过程和子过程计算学生的平均成绩。,参数传递,1形式参数和实际参数 2参数传递 3可变参数 4数组参数 5对象参数,1形式参数和实际参数,(1)形式参数简称形参,指在定义通用过程时,出现在Sub或Function语句中子过程名(或函数过程名)后面圆括号内的数,是用来接收传送给过程的数据,形参表中的各个变量之间用逗号分隔。 在例8-7中,在Form2代码里的语句“Function aver(Chn!, Math!, Eng!) As Single”中的Chn、Math、Eng就是形参。在Form3代码里的语句“Sub aver2(Chn!, Math!, Eng!, aver!)”中的Chn、Math、Eng、aver也是形参。,(2)实际参数简称实参,指在调用Sub或Function过程时,写入子过程名或函数名后括号内的参数,其作用是将他们的数据(数值或地址)传送给Sub或Function过程与其对应的形参变量。 例8-7的Form2代码里的语句“text4.text = Format(aver(a, b, c), “0.0“)” 中的a、b、c就是实参。 在Form3代码里的语句“Call aver2(a, b, c, d)”中的a、b、c、d也是实参。,2参数传递,参数传递指主调过程的实参(调用时已有确定值和内存地址的参数)传递给被调过程的形参,Visual Basic 6.0中不同模块(过程)之间数据的传递有两种方式:按地址传递和按值传递。 (1)按地址传递。 按地址传递简称传址,形参得到的是实参的地址,当形参值改变同时也改变实参的值。形参前面加“ByRef”关键字或缺省的为按地址传递。,(2)按值传递传值。 按值传递简称传值,形参得到的是实参的值,形参值的改变不会影响实参的值。形参前加“ByVal”关键字的是按值传递 。,例8-8 编程实现两个变量的交换。,Sub Swap1(ByVal x%, ByVal y%) t% = x: x = y: y = t End Sub Sub Swap2(x%, y%) t% = x: x = y: y = t End Sub Private Sub Form_Click() a% = 10: b% = 20: Swap1 a, b 传值 Print “A1=“; a, “B1=“; b a = 10: b = 20: Swap2 a, b 传地址 Print “A2=“; a, “B2=“; b End Sub,实参与形参结合时应注意的问题:,(1)个数、顺序、类型三一致。 (2)如果形参是值传递,对应实参可以是表达式、常量、数组元素。 (3)如果形参是地址传递,对应实参只能是简单变量,而且是声明了与形参一致的数据类型。 (4)数组、记录类型、对象只能是地址传递。 (5)当实参是对象的属性时,是值传递,即使形参是地址传递方式,也不会改变实参的值,也就是不会改变对象的属性值。,3可变参数,可变参数其实是一种数组表示法,使用可变参数可使参数个数不受限制,需要在形参前加上ParamArray关键字。 例8-9 将max函数定义为使用可变参数的函数。 Function max(ParamArray a() As Integer 使用可变参数 Dim i As Integer, n As Integer n = a(1) For i = LBound(a) To UBound(a) If a(i) n Then n = a(i) Next i max = n End Function Private Sub Form_Click() 调用时,参数个数可以不限 Print “6, 12, 3, 15, 9 中的最大值是”&max(6, 12, 3, 15, 9) 使用了5个参数 Print “20, 44, 5, 66, 22, 15, 7, 63, 9中的最大值是”&max(20, 44, 5, 66, 22, 15, 7, 63, 9) End Sub,4数组参数,Visual Basic 6.0的过程中允许以数组作为参数。在使用时应注意: (1)数组参数只能按地址传递,而不能按值传递。 (2)在形参列表和实参列表中,数组参数要忽略维数声明。 例8-10 编写求一维数组中所有元素之和的程序。,5对象参数,在Visual Basic 6.0中,可以将窗体、控件等对象传递给过程。用对象作为参数与用其他数据类型作为参数的过程在语法格式上相同,只需将参数声明为特定对象类型即可。这里的“对象类型”是指对象所属的类。窗体和控件所属的类可以在属性窗口的对象下拉列表框中看到。例如文本框对象所属的类TextBox。 调用含有对象参数的过程时,需要将实参设置为对象名称,该对象必须与形参的类型相同,并且采用传址方式。 下面通过一个简单的示例说明对象参数的应用。 例8-11 编制一个计算平均成绩的程序,当用户输入的分数超出规定范围(0100)时,焦点返回出错的文本框并全选其内容,以便让用户修改或重新输入,过程的嵌套与递归调用,1过程的嵌套调用 2过程的递归调用,1过程的嵌套调用,在一个过程中调用另外一个过程,称为过程的嵌套调用。,2过程的递归调用,过程的递归调用是指在一个过程内直接或间接调用自己。,例8-12 利用递归调用编写求n!的函数Fac3(n)。,Function Fac3(n As Integer) As Double Fac3递归函数过程 If n = 0 Or n = 1 Then Fac3= 1 Else Fac3 = n * Fac3(n - 1) End If End Function Private Sub Command1_Click() Print “Fac3(4)=”; Fac3(4) 调用递归函数过程Fac3,显示输出Fac3(4)=24 End Sub,过程与变量的作用域,1VB应用程序结构 2过程的作用域 3变量的作用域,1VB应用程序结构,2过程的作用域,过程的作用域是指在Visual Basic 6.0应用程序中能被识别的范围,分为公有过程和私有过程。,(1)公有过程(全局级) 公有过程就是用Public关键字(或缺省)定义的过程(子过程或函数过程),工程中所有模块(包括窗体模块、标准模块和类模块)中的过程都可以调用他。 (2)私有过程(窗体/模块级) 私有过程就是用Private关键字定义的过程(子过程或函数过程),只有与该过程定义在同一个模块中的其他过程才能调用,而其他模块中的所有过程都不能够调用该过程,就像他根本不存在一样。,3变量的作用域,变量的作用域指变量能被某一过程识别的范围。当一个应用程序出现多个过程或函数时,在他们各自的子程序中都可以定义自己的常量、变量,但这些常量或变量并不可以在程序中到处使用。在Visual Basic 6.0中,根据作用域的大小变量分为:局部变量、模块级变量和全局变量。,(1)局部变量 在一个过程内声明的变量就是局部变量,只有该过程内部的代码才能访问或改变该变量的值。 用Dim声明的变量只在过程执行时存在,退出过程后,这类变量就会消失。在过程内用Dim声明的变量,只能在本过程中使用。 用Static声明,每次调用过程,变量保持原来的值。Static关键字对所声明过程之外的变量不起作用。声明形式: Static 变量名 AS 类型,(2)模块级变量:在“通用声明”段中用Dim语句或用Private语句声明的变量,可被本窗体或模块的任何过程访问。 (3)全局变量:在 “通用声明”段中用Public语句声明的变量,可被本应用程序的任何过程或函数访问。,本章小结,1Visual Basic 6.0中函数过程和子过程的定义、调用和使用。 2各种类型的参数传递。 3过程的嵌套调用和递归调用。 4过程和变量的作用域。,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号