《Visual Basic程序设计教程(第二版)》-郭清溥-电子教案 6

上传人:E**** 文档编号:89401485 上传时间:2019-05-24 格式:PPT 页数:71 大小:634KB
返回 下载 相关 举报
《Visual Basic程序设计教程(第二版)》-郭清溥-电子教案 6_第1页
第1页 / 共71页
《Visual Basic程序设计教程(第二版)》-郭清溥-电子教案 6_第2页
第2页 / 共71页
《Visual Basic程序设计教程(第二版)》-郭清溥-电子教案 6_第3页
第3页 / 共71页
《Visual Basic程序设计教程(第二版)》-郭清溥-电子教案 6_第4页
第4页 / 共71页
《Visual Basic程序设计教程(第二版)》-郭清溥-电子教案 6_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《《Visual Basic程序设计教程(第二版)》-郭清溥-电子教案 6》由会员分享,可在线阅读,更多相关《《Visual Basic程序设计教程(第二版)》-郭清溥-电子教案 6(71页珍藏版)》请在金锄头文库上搜索。

1、第 6 章 过 程,第1章 过程,【本章导读】 在Visual Basic中有一类过程属于自定义过程,它由用户建立,供事件过程或其他自定义过程调用。每个自定义过程都具有独立的功能,自定义过程的使用符合结构化程序设计的原则,它的好处是使程序简练、便于调试和维护。这一章我们主要介绍自定义过程的设计和使用。 在Visual Basic中,根据是否有返回值,把自定义过程分为两类:子过程和函数过程。,第1章 Visual Basic程序设计概述,【本章要点】,面子过程的建立和使用 函数过程的建立和使用 过程中参数的传递 变量和过程的作用域 过程的递归和嵌套,Sub(子程序)过程可以描述两种过程:事件过程

2、和通用过程。,表示窗体事件或控件事件的格式: Private Sub Form|控件名_事件名(参数列表) 语句组 End Sub,6.1.1 事件过程和通用过程,1. 事件过程,建立方法: 1. 手工键入。 2. 使用模板 。,2. 通用过程,通用过程是独立于事件过程之外,不与任何特定的事件相联系,它可以存储在窗体模块或标准模块中。,6.1 子过程,一般格式 : StaticPrivate|Public Sub 过程名(参数表列) 语句块 Exit Sub 语句块 End Sub,6.1.2 建立Sub过程,1. 定义Sub过程,说明 : (1) Sub过程以Sub开头,以End Sub结束

3、,在它们之间是描述过程操作的语句块,称为“过程体”或“子程序体”。格式中各参量的含义如下:,Static:指定过程中的局部变量在内存中的存储方式。如果使用了 Static,则过程中的局部变量就是“静态”变量。 Private| Public :表示Sub过程是私有过程或公有过程。 过程名:是一个长度不超过40个字符的变量名,命名规则与变量名规 则相同。 参数表列:含有在调用时传送给过程的简单变量名或数组名,各名字 之间用逗号隔开。“参数表列”指明了调用时传送给过程的参数的类型 和个数,每个参数的格式为: ByValByref 变量名() As 数据类型 如果加上“ByVal”,则表明该参数是“

4、传值”参数,没有加“ByVal”(或者 加ByRef)的参数称为“传址”参数。数据类型为前面介绍的。,说明 :,(2) End Sub标志着Sub过程的结束。当程序执行到End Sub时,将退出该过程,并立即返回到调用语句下面的语句。此外,在过程体内可以用一个或多个Exit Sub语句从过程中退出。 (3) Sub过程不能嵌套定义。,说明 :,例:编一个交换两个整型变量值的子过程。 Private Sub Swap( X As Integer, Y As Integer) Dim temp As Integer Temp=X : X=Y : Y=Temp End Sub,(1)利用工具中“添加

5、过程”对话框定义。,2.创建Sub过程,(2)直接在代码窗口定义 打开模块代码窗口,然后直接键入 过程的名字即可。 例:键入“Sub TestProc”,按回 车键后就会自动显示: Sub TestProc() End Sub,1. 用Call语句调用Sub过程 格式:Call 过程名 ( 实际参数 ) 例如:Call TestProc(a,b) 2. 把过程名作为一个语句来使用 格式:过程名 实际参数 例如: TestProc a,b,6.1.3 调用Sub过程,第二种方式与第一种方式相比,它有两点不同: (1)去掉关键字call。 (2)去掉“实际参数”的括号。,Sub过程示例,【例6.1

6、】编写交换两个数的子过程,并调用该过程交换a和b,c和d两组变量的值。,分析: 首先要编写一个交换两个数的过程。我们把两个数分别放入两个变量中,交换两个数时要引入第三个变量t,先把第一个数放在t中,然后把第二个变量的值赋给第一个变量,再把t的值赋给第二个变量,从而实现两个数的交换。子过程编成后,交换a和b的值时,调用该过程一次,交换c和d的值时再调用该过程一次。,设计步骤如下: 1. 编写两个数交换的子过程代码。,例: 编一个交换两个整型变量值的子过程。 Private Sub Swap( X As Integer, Y As Integer) Dim temp As Integer Temp

7、=X : X=Y : Y=Temp End Sub,2. 编写事件过程来调用通用过程。,Private Sub Cmdchange1_Click() Dim a As Integer, b As Integer a = 4: b = 5 Print “交换前a,b的值为:“ Print “a=“; a, “b=“; b Call swap(a, b) Print “交换后a,b的值为:“ Print “a=“; a, “b=“; b End Sub,Private Sub Cmdchange2_Click() Dim c As Integer, d As Integer c = 2: d =

8、3 Print “交换前c,d的值为:“ Print “c=“; c, “d=“; d Swap c, d Print “交换后c,d的值为:“ Print “c=“; c, “d=“; d End Sub,程序运行结果如下图所示:,一般格式 : StaticPublic|Private Function 函数名(参数表列) As 类型 语句块 函数名表达式 Exit Function 语句块 End Function,6.2.1 建立Function过程,函数是过程的另一种形式,当过程的执行返回一个值时,使用函数就比较简单。与子程序过程不同的是函数过程将返回一个值 。,6.2 Functio

9、n过程,说明 : 1. 过程名即Function过程的名字。As 类型指定Function过程返回值的 类型,可以是Integer、Long、Single、Double、String、Currency 或boolean。如果没有As子句,默认的数据类型为Variant。 2. Sub过程不能嵌套定义。 3. 表达式的值是函数返回的结果。在语法中通过赋值语句将值赋给函数 名,该值就是Function过程返回的值。如果在Function过程中省略 “函数名表达式”,则该过程返回一个默认值,如数值函数返回0。 4. 语句块是程序段,语句块中可以用一个或多个Exit Function语句从函 数中退出

10、。 5. 在VB集成环境建立的方法与Sub过程完全一样。,【例6.2】 编写计算任意整数n的阶乘的函数过程fact。,Function过程示例,Function fact ( n As Integer) As Long Dim p As Long, I As integer p=1 For I=1 to n p=p*I Next I Fact=p End function,函数返回值的类型。,把求出的结果赋给函数名。,【例6.3】 编写一个求两个数最大公约数的函数过程。,Function gcd (m As integer,n As Integer) As Integer Dim r as A

11、s Integer r = m mod n Do While r 0 m=n n=r r = m mod n Loop Gcd=n End Function,函数返回值的类型。,把求出的结果赋给函数名。,分析:我们采用辗转相除法求最大公约数。,调用格式: 函数名(实参列表) 说明: 在调用时实参和形参的数据类型、顺序、个数必须匹配。函数调用只能出现在表达式中,其功能是求得函数的返回值。,6.2.2 调用Function过程,【例6.4】利用阶乘函数过程fact求解表达式2!4!+6!8!+10! 的值。,分析:要计算2!4!+6!+8!+10!,首先要计算出2!、4!、6!、8!、10!。可以

12、用函数过程fact来计算n!,每次调用求阶乘函数前给n分别赋值为2、4、6、8、10,调用5次,把每次调用的结果累加起来就能求得表达式的值。,Private Sub cmdjs_Click() Dim sum As Long Dim t As Long Dim i As Integer sum = 0 For i = 2 To 10 Step 2 Sum=Sum+fact(i) 调用函数过程fact Next i Lbloutput.Caption = sum End Sub,编写Command1事件代码。,调用fact函数语句。,【例6.5】定义一个在复数范围内求平方根的函数。输入一个数,输

13、出该数的平方根。,分析:用内部函数Sqr可以得到一个数的平方根,但该数必须大于或等于0,如果是负数该函数会出现错误信息。我们定制一个自定义函数过程MySqr来解决自变量为负数的情况。,Private Function mysqr(x As Double) As Double Select Case Sgn(x) Case 1 mysqr = Sqr(x) Case 0 mysqr = 0 Case -1 mysqr = Sqr(Abs(x) End Select End Function,1. 函数过程MYSQR。,Private Sub Cmdjs_Click() Dim x As Doub

14、le, msg As String x = Val(Txtx.Text) msg = x & “的平方根是:“ If x = 0 Then msg = msg & mysqr(x) Else msg = msg & mysqr(x) & “i“ End If MsgBox msg End Sub,2.编写事件过程来调用通用过程。,6.3 过程中参数的传递,形式参数是指在定义通用过程时,出现在Sub或Function语句中的变量名,是接收数据的变量。形参的两种形式: (1)后面跟有左右圆括号的数组名。 (2)除定长字符串之外的合法变量名。,6.3.1 形参和实参,Visual Basic中不同模

15、块(过程)之间数据的传递有两种方式: 通过过程调用实参与形参的结合实现; 使用全局变量来实现各过程中共享数据。,1. 形式参数,实际参数是指在调用Sub或Function过程时,传送给Sub或Function过程的常量、变量、表达式或数组名。其作用是将它们的数据(数值或地址)传送给Sub或Function过程与其对应的形参变量。,2. 实际参数,实参表和行参表中对应的变量名不必相同,但变量的个数必须相等,而且各实际参数的书写顺序必须与相应形式参数的类型相同。,例如:,传值参数的两种形式: (1)定义过程时选用ByVal关键字,就是按值传递。 (2)实际参数是常量或表达式。 (3)定义过程时选用

16、ByRef关键字,调用时变量用小括号括起来 。 传值参数的特点: 形参得到的是实参的值,形参值的改变不会影响实参的值。,6.3.2 传值参数和传址参数,1. 传值参数,【例6.6】运行一个程序,理解按值传递参数的含义。,Private Sub Form_Click() Dim a As Integer, b As Integer, c As Integer a = 5: b = 3: c = 9 Cls Print Print “主程序调用前的变量值a,b,c:“; a; b; c Call proc(a,b,c) 实参量不变 Print Print “主程序调用后的变量值a,b,c:“; a; b; c End Sub,Sub proc(ByVal a As Integer, ByVal b As Integer, _ ByVal c

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号