资源预览内容
第1页 / 共69页
第2页 / 共69页
第3页 / 共69页
第4页 / 共69页
第5页 / 共69页
第6页 / 共69页
第7页 / 共69页
第8页 / 共69页
第9页 / 共69页
第10页 / 共69页
亲,该文档总共69页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第7章过 程本章要点: Function过程 Sub过程 参数的传递* 过程的嵌套调用 过程的递归调用* VB的工程结构 变量的作用域与生存期* 过程的引入: 使同类的操作不重复 (操作方法相同、参数不同) 过程: 完成一段独立功能,可供其他过程使用( 调用)。 过程又称为子程序 调用过程: 调用其他过程的过程调用过程: 调用Sprg1调用Sprg1调用Sprg2子过程: Sprg1子过程: Sprg2过程分类: Sub过程Function过程内部过程(方法)事件过程自定义过程内部函数自定义函数其中,自定义函数和自定义过程统称为通用过程7.1 Function过程(函数过程)7.1.1 Function过程的定义1. Function过程的格式Public|PrivateStatic Function () As = Exit Function End Function2. 说明 (1) Public: 缺省值。使用Public时表示各模块的所 有其他过程都可以调用该Function过程。 (2) Private: 使用Private时表示只有本模块中的其 他过程才可以调用该Function过程。 (3) Static: 使用Static时表示将过程中的所有局部变 量说明为静态变量。 (4) : Function过程的名称,遵循变量 的命名规则。 (5) : 表示Function过程的参数变量列表。 多个变量之间用逗号隔开。 格式: ByVal|ByRef|Optional|ParamArray( ) As ByVal: 表示该参数按值传递。ByRef: 缺省值。表示该参数按地址传递。Optional:表示该参数为可选参数。ParamArray:表示该参数是一个Variant类型的Optional 数组。: 任何变量名或数组名。( ): 当参数为数组时使用。(6) As : 声明函数值的类型。(7) Exit Function语句: 从Function过程中退出。(8) Function过程通过赋值语句:=将函数的返回值赋给。(9) Function过程的定义不能嵌套。3. Function过程的建立: 建立位置窗体模块标准模块类模块*建立方法直接在代码窗口中输入应写在“通用”的位置。使用菜单命令:工具添加过程先切换到代码窗口,才可以使用该菜单命令。【例7-1】编写一个计算n!的Function过程。分析:确定参数个数、类型、函数名、类型Function Fact(N As Integer) As Long Dim I As Integer, F As LongF = 1 F用于保存阶乘值For I = 1 To NF = F * INext IFact = F 给函数过程名赋值End Function【例7-2】编写一个Function过程,计算下 面表达式的值。问:应设置几个参数?Function F(X, Y, Z)F = Sqr(Abs(X 3 + Y 3 + Z 3)End Function这里的参数和函数名都没有定义类型,默认 为Variant类型。7.1.2 Function过程的调用1. 调用位置:直接在表达式中调用。2. 调用格式: ()其中,: n常量、变量或表达式n各参数之间用逗号分隔n如果是数组,在数组名之后要跟一对空括号。【例7-3】从键盘任意输入一个整数,然 后调用计算 阶乘的函数求该整数的阶乘 值。设计界面和运行界面如下:Label3Text1Command1Label2设计界面运行界面代码如下: Option Explicit 自定义求阶乘的函数过程Fact Function Fact(N As Integer) As LongDim I As Integer, F As LongF = 1For I = 1 To NF = F * INext IFact = F 给函数过程名赋值 End Function 在按钮的Click事件过程中调用函数过程Private Sub Command1_Click()Dim X As IntegerX = Val(Text1.Text)Label2.Caption=Trim(Str(X) 输出左半部分Print CreateStr(2 * N - 2 * I + 1);Print Spc(4); 左右两部分的间隔Print CreateStr(2 * I - 1); 输出右半部分PrintNext I End Sub7.2 Sub过程当需要自定义过程返回一个值时,使用Function过程很容易实现。但在实际应用中,可能希望过程不需要返回值,例如,使用过程打印一个图形;或需要过程返回多个值,例如,利用过程对一批数据进行排序,在这些情况下就需要使用Sub过程。7.2.1 Sub过程的定义 1. Sub过程的格式Private|PublicStatic Sub ()Exit SubEnd Sub 2. 说明 (1) Exit Sub用于退出Sub过程。 (2) 不具有值的意义,在Sub过程中不能 给赋值,也不能给定义类型 。 (3) Sub过程通过中的参数返回值。 (4) Sub过程的建立方法与Function过程的建立方 法相同。【例7-7】编写计算n!的Sub过程。分析: 参数表中应有一个参数n,还应有另一个参 数F用来返回阶乘值。Sub Fact(N As Integer, F As Long) Dim I As IntegerF = 1For I = 1 To NF = F * INext IEnd Sub【例7-8】编写Sub过程,打印以下图形 。分析: 打印该图形不需要返回值,因此 无需引入参数。*Sub a()For i = 1 To 6Print Tab(7 - i);For j = 1 To 2 * i - 1Print “*“;Next jPrintNext i End Sub【例7-9】编写Sub过程,求三个数中的最大数和 最小数。分析: 首先要设置三个参数,如x、y、z,用于 接收三个原始数据,另外引入两个参数max和 min,用于返回最大和最小数。Sub s(x, y, z, max, min)max = xmin = xIf y max Then max = yIf y max Then max = zIf z : 要调用的Sub过程名。 (2) : 可以是常量、变量或表达式,各参数之间用逗号分隔。如果是数组参数,则要在数 组名之后跟一对空括号。 (3) 用Call语句调用一个Sub过程时,如果过程本身没有参数,则省略和括号。 (4) 格式二省略了Call关键字,同时两边也不能带括号。格式一: Call () 格式二: 【例7-10】将求组合数一题改成用Sub过程实现 Sub Fact(N As Integer, F As Long)Dim I As IntegerF = 1For I = 1 To NF = F * INext I End Sub Private Sub Command1_Click()Dim M As Integer, N As IntegerDim f1 As Long, f2 As Long, f3 As LongM = Val(Text1.Text) : N = Val(Text2.Text)Call Fact(M, f1):Call Fact(N, f2):Call Fact(M - N, f3)Text3.Text = Trim(Str(f1 / (f2 * f3) End Sub【例7-11】编写一个Sub过程,计算K个数的和,即1+2+K,并通过命令按钮的单击事件调用该过程计算S=1+(1+2)+(1+2+3)+ +(1+2+N)。分析: 编写一个Sub过程计算1+2+K,设参数K、S,参数S用于返回该和值。Sub A1(K As Integer, S As Integer)S = 0For J = 1 To KS = S + JNext JEnd SubPrivate Sub Command1_Click()Dim N As Integer, S1 As Integer, I As IntegerN = Val(Text1.Text)For I = 1 To N 调用过程A1求1+2+I,和值返回到S1 中Call A1(I, S1)Sum = Sum + S1Next IText2.Text = Sum End Sub7.3 参数的传递参数传递是指调用过程与被调用过程之间的一种数据通讯方法。数据的传递方式可以是单向的,也可以是双向的。分别称为按值传递和按地址传递。数据传递是通过形参和实参进行传递的。7.3.1 形参和实参形参: 出现在Sub或Function语句中。实参: 出现在调用程序中。例如,定义如下一个过程: Sub SubTest(n As Integer,Sum As Single)End Sub调用语句: Call SubTest( a , s )形参实参说明: 一般情况下,形参表与实参表中对应参数个数、 类型、位置顺序必须一一对应(除非使用关键字 Optional或ParamArray对形参进行了约束) 形参表中的参数可以是: 除固定长度字符串之外的合法变量名、数组名() 实参表中的参数可以是: 常量、变量、表达式、数组名() 形参与实参的结合有两种方式: 按值传递和按地址传递。1. 按值传递实参把其值传递给形参而不传递实参的地址。数据的传递是单向的。 (1) 当实参为常量或表达式时,数据传递总是单 向的。例如: Call SubTest(10, 1+2)Sub SubTest( n As Integer,Sum As Single)7.3.2 按值传递和按地址传递(2) 实参是变量时,要实现按值传递需要在形参之 前通过关键字ByVal来实现。例如: Sub SS(ByVal X, ByVal Y, ByVal Z)X = X + 1: Y = Y + 1: Z = Z + 1End SubPrivate Sub Command1_Click()A = 1: B = 2: C = 3Call SS(A, B, C)Print A, B, CEnd Sub运行时,单击命令按钮在窗体上打印: 1 2 32. 按地址传递指将实参的地址传给形参,使形参和实参具有相同的地址,即形参与实参共享同一存储单元。(1) 当实参为变量或数组时,形参使用关键字 ByRef定义(或省略)表示要按地址传递。(2) 当参数是数组时,数组名之后必须使用一对空的圆括号。按地址传递可以实现调用过程与子过程之间数据的双向传递。例: Sub SS(ByRef X, ByRef Y, ByRef Z)X = X + 1: Y = Y + 1: Z = Z + 1End SubPrivate Sub Command1_Click()A = 1: B = 2: C = 3Call SS(A, B, C)Print A, B, CEnd Sub形参: X Y Z实参: A B C存储单元运行时,单击命令按钮在窗体上打印: 2
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号