Visual Basic课件:第9章-过程v0.3_第1页
Visual Basic课件:第9章-过程v0.3_第2页
Visual Basic课件:第9章-过程v0.3_第3页
Visual Basic课件:第9章-过程v0.3_第4页
Visual Basic课件:第9章-过程v0.3_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、第九章 过程,9.1 概述 9.2 Sub过程 9.3 Function函数过程 9.4 参数传递 9.5 对象参数 9.6 过程嵌套调用和递归调用 9.7 变量的作用域 9.8 静态变量 9.9 程序示例,1,9.1 概述,9.1.1 工程,一个VB应用程序是一个工程,工程由模块组成,模块又由多个过程构成。VB应用程序的组成如图所示,包含多个窗体的公共代码(无界面,用于建立新对象(不要求,2,9.1.2 过程,过程可以分成两大类:事件过程和通用过程,1.事件过程 事件过程是面向对象而编写的过程,事件过程一般放在窗体模块中,不同的对象都有各自的事件。 其格式为: Public|Private

2、Sub _ (,2.通用过程 通用过程也叫自定义过程,它是具有一定功能的独立程序段。包括Sub子过程(也称子程序)和Function子过程(也称函数)。可可以带参数,其过程名和参数表由用户定义。通用过程可以根据需要放在窗体模块或者标准模块中,3,启动,启动窗体事件过程 Sub Main:窗体前的初始化,4,事件过程 通用过程,9.2 Sub过程,1. 定义Sub过程,Private | PublicStatic Sub 过程名(形参列表) 局部变量和常量声明 语句块 Exit Sub 语句块 End Sub,1. Sub过程以Sub语句开头,以End sub语句结束。在sub和End sub之

3、间是描述过程操作的语句块,称为子程序体或过程体,说明,Public表示过程可被任一过程调用,默认为poublic。Private表示过程只能被同一模块的过程调用,立即退出过程执行,无须等待过程正常执行完毕,5,ByVal:表明其后的形参是按值传递参数或称为“传值”(Passed by Value)参数,若缺省或用“ByRef”替代,则表明参数是按地址传递(传址)参数或称为“引用”(Passed by Reference)参数,2.形参列表 形式参数格式为,ByValByRef 变量名 ( ) As数据类型,变量名( ):变量名为合法的VB变量名或数组名。若变量名后无括号,则表示该形参是变量,否

4、则是数组,Private Sub Exam1(ByVal X as Integer, Y as Integer) Y=Y+8 X=X+Y Print X,Y End Sub,6,2. 建立Sub过程,建立Sub过程的方法有两种: (1)在代码窗口输入代码直接创建。(2)通过“工具”菜单创建,3. 调用Sub过程,Sub过程的调用有两种格式。 (1)使用Call语句调用。格式为:Call 过程名 (实参) (2)直接使用过程名调用。格式为:过程名 实参,7,注意: Sub过程不能嵌套,内部不能再定义Sub过程,例】计算1!+2!+3!+10!的和,Private Sub Form_Click()

5、 Dim i As Integer Dim sum As Double, t As Double For i = 1 To 10 Call Fact_Sub(i, t) sum = sum + t If i 10 Then Print i; ! +; Else Print i; ! =; sum End If Next i End Sub,Private Sub Fact_Sub(n as Integer, Fact as Double) Dim i As Integer Fact=1 For i=1 to n Fact=Fact*I Next i End Sub,8,9.3 Function

6、 函数过程,Sub过程不直接返回值。Function函数过程可返回一个值。因此, Function函数过程通常出现在表达式中,Private | Public Static Function 函数名(参数列表)As数据类型 局部变量和常数声明 语句块 Exit Function 语句块 函数名表达式 End Function,指定函数返回值的类型,在函数体内通过“函数名表达式”语句给函数名赋值,1. 定义Function过程的语法如下,9,2. 调用Function过程,Function过程的调用方法如下: (1)与内部函数的调用一样,即:变量名=函数名(参数)。 这种调用函数运行完毕后,通过

7、函数名返回一个具体的值赋给变量。 (2)与Sub过程的调用方法一样使用。 这种调用函数名取得值后,无法进行值的传递(函数返回值被丢弃)。 很少这样使用,10,例】利用Function过程计算1!+2!+3!+10,Private Sub Form_Load() Dim i As Integer Dim sum As Long Show For i = 1 To 10 sum = sum + Fact_FUN(i) If i 10 Then Print i; ! +; Else Print i; ! =; sum End If Next i End Sub,Private Function Fa

8、ct_FUN (Byval n as Integer)As Long Dim K As Integer Fact_FUN=1 If N=0 Or N=1 Then Exit Function Else For K= 1 To N Fact_FUN=Fact_FUN*K Next K End If End Function,11,9.4 参数传递,在VB中参数值传递的两种方式,按值传递(Passed by Value) 简称传值,按地址传递(Passed by Reference)也称传引用,简称传址,12,Public Function max(a as Integer, b as Integ

9、er,Dim a as integer, b as integer A=12; b=24,C= max(a , b,形参,实参,1. 按值传递参数(Passed by Value,过程调用时,VB给按值传递参数分配一个临时存储单元,将实参变量的值拷贝到这个临时单元中去。即按值传递参数时,传递的只是实参变量的副本,Private Sub Form_Click() Dim M As Integer, N As Integer M = 15: N = 20 Call value(M, N) Print M=; M, N=; N End Sub Private Sub value( ByVal X A

10、s Integer, ByVal Y As Integer) X = X + 20 Y = X + Y Print X=; X, Y=; Y End Sub,35,55,13,按地址传递参数时,形参和实参共用内存的同一“地址”,即共享同一个存储单元。 被调过程中的形式参数值一旦被改变,相应的实参值也跟着被改变,2.按地址传递参数(passed by Reference,Private Sub Form_Click() Dim M As Integer, N As Integer M = 15: N = 20 Call value(M, N) Print M=; M, N=; N End Sub

11、 Private Sub value(X As Integer, ByVal Y As Integer) X = X + 20 Y = X + Y Print X=; X, Y=; Y End Sub,X,35,55,14,定义过程时,VB允许把数组作为形参出现在形参表中,数组做参数,形参数组只能是按地址传递的参数。对应实参也必须是数组,且数据类型必须和形参数组的数据类型相一致。调用过程时把要传递的数组名放在实参表中即可,数组作为形参时,只要在数组名后跟一对空括号,不需要在过程中重新定义数组。否则会出现重复定义错误,15,例9-10 数组作参数,Private Sub Form_Load()

12、Dim i As Integer Show Dim a(3) As Integer For i = 1 To 3 a(i) = i * 2 Print a(i) Next i Print total=; exer(a) End Sub Function exer(m() As Integer) Dim i As Integer Dim sum As Integer For i = 1 To 3 sum = sum + m(i) Next exer = sum End Function,16,总结,按值传递时,实参可以为常数、表达式,带括号变量,ByVal关键字 地址传递:实参必须是变量,或By

13、Ref 数组做参数只能按地址传递 形式参数为ByRef,但是实参是常量或者表达式,无法按地址传递,但可正常运行,17,例9-9 按值传递和按址传递,Private Sub Form_Load() Dim n As Integer Show Call exer(2) 实参为常数,按值传递 Print 主程序中n=; n n = 2 Call exer(n + 1) 实参为表达式,按值传递 Print 主程序中n=; n Call exer(n) 实参为带括号的变量,按值传递 Print 主程序中n=; n Call exer(n) Print 主程序中n=; n 实参为不带括号的变量,按址传递

14、End Sub Private Sub exer(n As Integer) Print 过程中n=; n, n = 10 End Sub,18,总结:传值与传址 不能光看形参,9.6 过程的嵌套和递归,过程的嵌套:过程的定义是一段独立的代码,不能将过程的定义嵌套在另一个事件过程或通用过程中。但过程的调用可以嵌套,它是指用一个过程去调用另一个过程,Private Sub a() End Sub Private Sub b() Call a End Sub Private Sub Form_Click() Call b End Sub,Private Sub b() Private Sub a(

15、) End Sub End Sub Private Sub Form_Click() Call b End Sub,正确,错误,19,例9-13 数列排序,Private Sub Form_Load() Dim i As Integer n = InputBox(需要多少个数排序“, 输入数据, 10) ReDim a(n) Show Randomize 产生随机数种子 For i = 1 To n a(i) = Int(Rnd * 90) + 10 Print a(i); Next i Print End Sub Private Sub Command1_Click() Call sort(

16、a(), True )从小到大排序 End Sub Private Sub Command2_Click() Call sort(a(), False)从大到小排序 End Sub,Private Sub sort(x, flag As Boolean) Dim i As Integer, j As Integer For i = 1 To n - 1 For j = i + 1 To n If flag Then If x(i) x(j) Then _ Call swap(x(i), x(j) 嵌套调用 Else If x(i) x(j) Then _ Call swap(x(i), x(j

17、) 嵌套调用 End If Next j Next i For i = 1 To n Print a(i); Next i Print End Sub Private Sub swap(x, y) Dim t t = x: x = y: y = t End Sub,20,过程的递归:当嵌套调用过程时,是一个过程调用另一个过程。 如果另一个过程就是它本身,即自己调用自己,就叫做过程的递归调用,例9-14用递归法求数的阶乘,n*Fact(n-1) (当n1时,1 (当n=0 或 n=1,21,Private Sub Form_Load() Dim n As Integer Show n = Val

18、(InputBox(输入一个1170之间的正整数, 求阶乘) Print n; !=; fact(n) End Sub Function fact(n) If n = 1 Then fact = 1 Else fact = n * fact(n - 1) End If End Function,22,调用过程,Private Function Fact(N As Integer) As Long If N = 1 Then Fact = 1 Else Fact = N * Fact(N - 1) End If End Function,N=3,9.7 变量的作用域,私有,公有,注意:窗体模块中

19、定义的公有变量,在其它窗体中使用时,必须写清定义该变量的窗体名,否则会被认定为一个新的局部变量。而定义在标准模块中的公有变量可直接使用,24,同名变量,如果不同模块中的全局变量使用同一名字,则通过同时引用模块名和变量名就可以在代码中区分它们,例如,如果有一个在 Form1 和 Module1 中都声明了的公用 Integer 变量 intX,则把它们作为 MX 和 FX 来引用便得到正确值,在不同的范围内也可有同名的变量,例如,有名为 Temp 的全局变量,然后在过程中声明名为 Temp 的局部变量。在过程内通过引用名字 Temp 来访问局部变量;而在过程外则通过引用名字 Temp 来访问全局变量,25,例9-16】建立两个窗体Form1和Form2,一个标准模块。比较模块级公有变量和私有变量的作用域,26,标准模块的代码 Public a As Integer, b As Integer a,b

温馨提示

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

评论

0/150

提交评论