课件压缩版vb第6章_第1页
课件压缩版vb第6章_第2页
课件压缩版vb第6章_第3页
课件压缩版vb第6章_第4页
课件压缩版vb第6章_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第6章过 程本章要点: Function过程 Sub过程 参数的传递 代码模块 变量的作用域与生存期2过程的引入: 使同类的操作不重复 (操作方法相同、参数不同)过程: 完成一段独立功能,可供其他过程使用(调用)。 过程又称为子程序调用过程: 调用其他过程的过程调用过程: 调用Sprg1调用Sprg1调用Sprg2子过程: Sprg1子过程: Sprg23过程分类: Sub过程Function过程*内部过程(方法) 事件过程 自定义过程 内部函数 自定义函数46.1 Function过程6.1.1 Function过程的定义1. Function过程的格式 Public|PrivateSta

2、tic Function () As = Exit Function = End Function52. 说明(1) Public: 缺省值。使用Public时表示所有模块的所 有其他过程都可以调用该Function过程。(2) Private: 使用Private时表示只有本模块中的其他 过程才可以调用该Function过程。(3) Static: 使用Static时表示将过程中的所有局部变 量说明为静态变量。(4) : Function过程的名称,遵循变量 的命名规则。(5) : 表示在调用时要传递给Function过程的参数变量列表。多个变量之间用逗号隔开。6 格式: ByVal|ByR

3、ef( ) As ByVal: 表示该参数按值传递。 ByRef: 缺省值。表示该参数按地址传递。 : 遵循变量命名规则的任何变量名 或数组名。 ( ): 当参数为数组时使用。(6) As : 声明函数值的类型。(7) Exit Function语句: 从Function过程中退出。(8) Function过程通过赋值语句: = 将函数的返回值赋给。(9) Function过程的定义不能嵌套。7Function过程的建立: 直接在代码窗口中输入。 在代码窗口: 工具 添加过程。【例6-1】编写一个计算n!的Function过程。 Function Fact(N As Integer) As L

4、ong Dim I As Integer, F As Long F = 1 F用于保存阶乘值 For I = 1 To N F = F * I Next I Fact = F 给函数过程名赋值 End Function8【例6-2】编写一个Function过程,计算下面表达式的值。 Function F(X, Y, Z) F = Sqr(Abs(X 3 + Y 3 + Z 3) End Function9.1.2 Function过程的调用 直接在表达式中调用。 格式: () : 常量、变量或表达式,各参数之间用逗号分隔。如果是数组,在数组名之后必须跟一对空括号。9【例6-3】利用Functi

5、on过程计算阶乘,求组合数。设计界面如下图。Text2OLE1控件Text1Text3Command1BackStyle: 0 - TransparentBorderStyle: 0 NoneSizeMode: 2 - AutoSize10 定义求阶乘的函数FactFunction 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 = FEnd FunctionPrivate Sub Command1_Click() =按钮的事件过程 Dim

6、 m As Integer, n As Integer, c As Double m = Val(Text1.Text) n = Val(Text2.Text) c = Fact(m) / (Fact(n) * (Fact(m - n) 调用Fact Text3.Text = Trim(Str(c)End Sub116.2 Sub过程6.2.1 Sub过程的定义1. Sub过程的格式 Private|PublicStatic Sub () Exit Sub End Sub2. 说明(1) Exit Sub用于退出Sub过程。(2) 不具有值的意义,在Sub过程中不能给赋值,也不能给定义类型。1

7、2(3) Sub过程通过中的参数返回值。(4) Sub过程的建立方法与Function过程的建立方法相同。【例6-4】编写计算n!的Sub过程。 分析: 参数表中应有一个参数n,还应有另一个参数F用来返回阶乘值。 Sub Fact(N As Integer, F As Long) Dim I As Integer F = 1 For I = 1 To N F = F * I Next I End Sub136.2.2 Sub过程的调用 格式一: Call () 格式二: 说明: (1) : 要调用的Sub过程名;(2) : 可以是常量、变量或表达式,各参数之间用逗号分隔。如果是数组参数,则要在

8、数组名之后跟一对空括号。(3) 用Call语句调用一个Sub过程时,如果过程本身没有参数,则省略和括号。(4) 格式二省略了Call关键字,同时两边也不能带括号。14【例6-5】将求组合数一题改成用Sub过程实现Sub Fact(N As Integer, F As Long) Dim I As Integer F = 1 For I = 1 To N F = F * I Next IEnd SubPrivate Sub Command1_Click() Dim M As Integer, N As Integer Dim f1 As Long, f2 As Long, f3 As Long

9、M = 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 Sub15【例6-6】编写一个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 =

10、 0 For J = 1 To K S = S + J Next J End Sub16Private Sub Command1_Click() Dim N As Integer, S1 As Integer, I As Integer N = Val(Text1.Text) For I = 1 To N 调用过程A1求1+2+I,和值返回到S1中 Call A1(I, S1) Sum = Sum + S1 Next I Text2.Text = SumEnd Sub176.3 过程的嵌套 在一个过程执行期间又调用另一个过程,称为过程的嵌套调用。调用过程 子过程S1 子过程S2调用S1调用S2

11、186.4 参数的传递 调用过程与被调用过程之间的一种数据通讯方法。 数据的传递可以是单向的,也可以是双向的。6.4.1 形参和实参 形参: 出现在Sub或Function语句中。 实参: 出现在调用程序中。 例如,定义如下一个过程: Sub SubTest(n As Integer,Sum As Single) End Sub 调用语句: Call SubTest( a , s)形参实参19说明: 在传递参数时,形参表与实参表中对应参数个数、类型、位置顺序必须一一对应。 形参表中的参数可以是: 除固定长度字符串之外的合法变量名、数组名() 实参表中的参数可以是: 常量、变量、表达式、 数组名

12、() 形参与实参的结合有两种方式: 按值传递和按地址传递。206.4.2 按值传递和按地址传递1. 按值传递 实参把其值传递给形参而不传递实参的地址。 数据的传递是单向的。(1) 当实参为常量或表达式时,数据传递总是单向的。 例如: Call SubTest(10, 1+2) Sub SubTest( n As Integer,Sum As Single)21(2) 实参是变量时,要实现按值传递需要在形参之前通过关键字ByVal来实现。 例如: Sub SS(ByVal X, ByVal Y, ByVal Z) X = X + 1: Y = Y + 1: Z = Z + 1 End Sub P

13、rivate Sub Command1_Click() A = 1: B = 2: C = 3 Call SS(A, B, C) Print A, B, C End Sub 运行时,单击命令按钮在窗体上打印: 1 2 3222. 按地址传递 指将实参的地址传给形参,使形参和实参具有相同的地址,即形参与实参共享同一存储单元。(1) 当实参为变量或数组时,形参使用关键字ByRef定义(或省略)表示要按地址传递。(2) 当参数是数组时,数组名之后必须使用一对空的圆括号。 按地址传递可以实现调用过程与子过程之间数据的双向传递。23 例: Sub SS(ByRef X, ByRef Y, ByRef Z

14、) 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 424【例6-7】编写一个计算乘幂的Function过程,用来计算x的y次幂,其中y0。单击窗体时调用该过程打印51、52、53、54、55的值。 Function Power(x As Single, ByVal y As Integer) Dim r

15、esult As Single result = 1 Do While y 0 result = result * x y = y - 1 Loop Power = result End Function25Private Sub Form_Click() Dim i As Integer For i = 1 To 5 Print Power(5, i) Next iEnd Sub思考: 如果取消过程Power中参数y前的关键字ByVal,则会出现什么情况?266.5 代码模块VB应用程序由三种模块组成: 窗体模块(Form) (文件扩展名.frm) 标准模块(Module) (文件扩展名.b

16、as) 类模块(Class) (文件扩展名.cls)应用程序工程文件(.vbp)窗体模块(.frm)文件类模块(.cls)文件标准模块(.bas)文件Function过程Sub过程事件过程Function过程Sub过程276.5.1 窗体模块 包含: 事件过程 通用过程 通用声明6.5.2 标准模块 不对应于某个窗体、完全是纯代码。 包含: 全局常量、变量、全局过程 标准模块级常量、变量、通用过程 注: 不能包含事件过程 添加: 工程添加模块选“新建”标签打开“添加模块”对话框 6.5.3 类模块 在类模块中编写代码建立新对象。286.5.4 过程的作用域 过程的建立位置不同,允许被访问的范围

17、也不同。 作用域: 模块级、全局级 1. 模块级过程: 在过程前如果加Private关键字,则这种过程只能被其所在的模块中的其他过程所调用。2. 全局过程: 在过程前如果加Public关键字(或省略),则这种过程可以被其他模块中的过程所调用。3. 过程的作用域: 见P15629例:设窗体Form1中有按钮: Command1、 Command2 Public Sub aa() aa为全局过程 MsgBox (这是窗体Form1中的过程) End Sub Private Sub Command1_Click() Call aa End Sub Private Sub Command2_Click

18、() Form2.Show End Sub可以省略添加标准模块Module1 ,编写以下过程: Public Sub bb() bb为全局过程 MsgBox (这是标准模块中的过程bb) End Sub可以省略30设窗体Form2中有按钮: Command1 、 Command2 Private Sub Command1_Click() Call Form1.aa End Sub Private Sub Command2_Click() Call Module1.bb End Sub不可以省略可以省略316.6 变量的作用域与生存期 变量的作用域: 指变量的有效范围。 变量的生存期: 指变量的

19、作用时间。6.6.1 变量的作用域 将变量分为: 局部变量 模块级变量 全局变量模块级变量全局变量局部变量模块过程321. 局部变量 声明 不声明 Dim A As Integer A每次执行过程时被初始化 Static C As Single C在应用程序执行期间保持不变 作用范围 仅在声明的过程中起作用 其他过程中即使有同名变量,也不是指同一变量。33例: Sub S() X = 1 Y = 2 Z = X + Y Print X, Y, Z End Sub Private Sub C1_Click() X = 2 Y = 3 Z = X + Y Call S Print X, Y, Z

20、End Sub单击C1后运行结果: 1 2 3 2 3 534例: Sub S() Static Z As Integer Z = Z + 2 Print ZEnd SubPrivate Sub Command1_Click() Dim Z As Integer Z = Z + 2 Call S Print ZEnd Sub第一次单击C1结果: 2 2第二次单击C1结果: 4 2第三次单击C1结果:62352. 模块级变量 声明 在模块的通用声明段中用以下方法声明的变量。 Private 在模块运行时被初始化 Dim 在模块运行时被初始化 作用范围 在该模块的所有过程中都起作用 其他模块不能访

21、问这些变量3. 全局变量 声明 在模块的通用声明段中用以下方法声明的变量 Public 应用程序运行时被初始化 作用范围: 应用程序的所有过程36例: Dim Z As IntegerSub S() Z = Z + 2 Print ZEnd SubPrivate Sub C1_Click() Z = Z + 2 Call S Print ZEnd Sub第一次单击C1结果: 4 4第二次单击C1结果: 8 8第三次单击C1结果: 121237例: Dim Z As IntegerSub S() Dim Z Z = Z + 2 Print zEnd SubPrivate Sub C1_Click

22、() Z = Z + 2 Call S Print ZEnd Sub第一次单击C1结果: 2 2第二次单击C1结果: 2 4第三次单击C1结果: 2638【例6-14】P160例9-21标准模块: M1存放N的立方值,M2存放N的阶乘值Public M1 As Integer, M2 As Integer定义求阶乘函数F(N)Public Function F(N) As Integer F1 = 1 For I = 1 To N F1 = F1 * I Next I F=F1End FunctionI: 局部变量F1: 局部变量N: 形式参数F: 公共函数M1、M2: 全局变量39Form1模块: Dim N As IntegerPrivate Sub C1_Click() N = Val(Text1.Text) M1 = N * N * N Text2.Text = M1End SubPrivate Sub C2_Click() M2 = F(N) Text3.Text = M2End SubPrivate Sub C3_Click() Form2.ShowEnd SubN: 模块级变量 实际参数F: 公共函数M1、M2: 全局变量40Private Sub C1_Click() Text1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论