1 / 28

第七章 过程

第七章 过程. VB 应用程序是由模块组成的,模块由 过程 组成,使用过程是实现结构化程序设计思想的重要方法。 几类常用的过程 过程参数的传递和过程的嵌套。 变量的作用域和生成期. 7.1 过程的类型. 一、不返回值的过程 事件过程( Event 过程) 子程序过程( Sub 过程) 二、返回值的过程 函数过程( Function 过程) 属性过程( Property 过程). 7.2 Sub 过程. 子过程的定义 通用 Sub 过程的结构与事件过程的结构类似。其格式为:

Download Presentation

第七章 过程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第七章 过程 VB应用程序是由模块组成的,模块由过程组成,使用过程是实现结构化程序设计思想的重要方法。 • 几类常用的过程 • 过程参数的传递和过程的嵌套。 • 变量的作用域和生成期

  2. 7.1 过程的类型 一、不返回值的过程 • 事件过程(Event过程) • 子程序过程(Sub过程) 二、返回值的过程 • 函数过程(Function过程) • 属性过程(Property过程)

  3. 7.2 Sub 过程 • 子过程的定义 • 通用Sub过程的结构与事件过程的结构类似。其格式为: [Static] [Private] [Public] Sub<过程名> [(参数表)] <语句序列> [Exit Sub] <语句序列> End Sub Private sub sub1 print "******" End sub

  4. 7.2 Sub 过程 • 创建过程的方法 • 窗体模块【通用】中创建 • 标准模块.BAS文件中创建 • 过程调用 • Call调用,必须加(),参数以逗号分隔 • 不用Call, 不能加(),参数以逗号分

  5. 7.2 Sub 过程 • 【例】计算矩形面积(用子过程实现) Sub jxArea(jlen, jwid) Dim Area Area = jlen * jwid MsgBox "矩形面积为:" & Area End Sub Private Sub Form_Load() Dim jlen, jwid l = Val(InputBox("请输入矩形长:")) d = Val(InputBox("请输入矩形宽:")) jxArea l, d '-----Call jxArea(l, d ) End Sub

  6. Static:静态的过程,表示过程中的局部变量在整个程序中只分配一次空间;Static:静态的过程,表示过程中的局部变量在整个程序中只分配一次空间; • 没有Static的局部变量,每次调用过程,所有变量重新分配空间,试比较---- Sub sub1() i = i + 1 Print i End Sub Private Sub Form_click() sub1 sub1 sub1 End Sub Static Sub sub1() i = i + 1 Print i End Sub Private Sub Form_click() sub1 sub1 sub1 End Sub

  7. 7.2 Sub 过程 • 使用说明 • Sub和End Sub必须配套 • Exit Sub中途退出过程 • 默认的过程是Public,在应用程序中随处可以调用 • 不能嵌套定义过程,但是可以嵌套调用

  8. 7.4 Function 过程 VB允许用户按一定规则自行设计一个专用的函数,这就是函数过程(Function过程)。 • Function过程与Sub过程主要区别仅在于Function过程必须返回一个值(通常出现在表达式中),而Sub过程却无此限制。

  9. 7.4 Function 过程 • FUNCTION函数定义 [Static] [Private] [Public] Function <过程名> [(参数表)] [AS 类型] <语句序列> [Exit Function] <语句序列> [<函数名>]=<表达式>] End Sub 注释: [<函数名>]=<表达式>],表示函数返回的结果

  10. 7.4 Function 过程 • FUNCTION函数调用 • 直接调用 <函数名> (实际参数表) • 用Call调用 Call <函数名> (实际参数表)

  11. 7.4 Function 过程 • Function prime(n As Integer) • For i = 2 To n - 1 • If n Mod i = 0 Then Exit Function • Next • If i = n Then prime = 1 Else prime = 0 • End Function • Private Sub Form_Click() • Dim a As Integer • a = Val(InputBox("n=", "input")) • b = prime(a) • If b = 1 Then Print "素数" Else Print "合数" • End Sub

  12. 7.4 Function 过程 【例】辗转相除求最大公约数 • 思想:求X和Y的最大公约数,用X除以Y,若余数为0,则Y是最大公约数,否则,除数作为被除数,余数作为除数,直到余数为0,除数即是两数的最大公约数 • 方法: (1)以大数X作为被除数,小数Y作为除数,相除后的余数位num; (2)如果num<>0,则X=Y,Y=NUM,继续相除得到余数num.如仍然有num<>0,则重复此过程,直到num=0. (3)最后num就是最大公约数。

  13. 7.4 Function 过程 【例】辗转相除求最大公约数 Function zdgys(ByVal x As Integer, ByVal y As Integer) As Integer Do While y <> 0 num = x Mod y x = y y = num Loop zdgys = x End Function Private Sub Form_Click() Dim a As Integer, b As Integer a = 156 b = 21 H = zdgys(a, b) Print Print a & "和" & b & "的最大公约数是:" & H End Sub

  14. 7.5 过程参数的传递 当变量传递到过程时,称变量为参数 • 形式参数和实际参数 形式:定义过程的参数 实际:调用过程的参数 • 传值方式和传地址方式 传值:形式参数和实际参数是不同的内存空间 传地址:形式参数和实际参数是相同的内存空间 默认:传地址 Sub jxArea(jlen, jwid) jxArea l, d

  15. Sub fRef(x As Integer, y As Integer) x = x + 2 y = y + 2 Print "x="; x, "y="; y End Sub Private Sub Form_Click() Dim a As Integer, b As Integer a = 10 b = 12 fRef a, b Print "a="; a, "b="; b End Sub Sub fVal(ByVal x As Integer, ByVal y As Integer) x = x + 2 y = y + 2 Print "x="; x, "y="; y End Sub Private Sub Form_Click() Dim a As Integer, b As Integer a = 10 b = 12 fVal a, b Print "a="; a, "b="; b End Sub 试比较?

  16. 7.7过程嵌套调用 • 过程调用另一个过程的现象 【例】求组合数 【思想】计算 是一个函数COMB 计算N!是一个函数FACT 函数COMB需要调用函数FACT

  17. 7.7 过程嵌套调用 Public Function fact(x As Integer) As Double Dim p As Double, i As Integer p = 1 For i = 1 To x p = p * i Next fact = p End Function Public Function comb(n As Integer, m As Integer) As Long comb = fact(n) / (fact(m) * fact(n - m)) End Function

  18. 7.7 过程嵌套调用 Private Sub Command1_Click() Dim m As Integer, n As Integer m = Val(Text1.Text) n = Val(Text2.Text) If m > n Then MsgBox "请保证参数的正确输入!" Exit Sub End If Text3.Text = comb(n, m) End Sub

  19. 7.6 变量与过程的作用域 • 模块的划分 • VB应用程序设计采用模块化的设计原则,通常由三类模块组成: • 窗体模块------.frm • 标准模块-----.bas(“工程”-“添加模块”) • 类模块-----.cls (“工程”-“添加类模块”)

  20. 7.6 变量的作用域 • 变量的作用范围(作用域)指变量的有效范围。 • 根据声明变量的位置不同,可将变量分为: 1、过程级变量(Procedure level) 2、模块级变量(Module level) 3、全局变量

  21. 7.6 变量的作用域 • 过程级变量(用DIM或STATIC定义或没有定义) 声明位置:在过程内部声明 • 属于局部变量;作用范围仅仅是本过程 • STATIC变量的作用周期是整个程序的运行期间 DIM定义的变量作用周期是整个过程的运行期间

  22. 7.6 变量的作用域 Public Sub jbblsub() Dim a1 As Integer, m1 As String Static a2, m2 a1 = a1 + i a2 = a2 + 1 m1 = m1 & "$" m2 = m2 & "$" Print "a1="; a1; "a2="; a2, "m1="; m1; " m2 ="; m2 End Sub • 【过程级变量举例】 Private Sub Form_Click() Dim i As Integer For i = 1 To 5 jbblsub Next i End Sub i是Form_Click()的局部变量 i是jbblsub()的局部变量 A1和m1是jbblsub()的局部变量 A2和m2jbblsub()的静态局部变量

  23. 【例】局部变量,参数传递 Private Sub Form_Click() Dim X As Integer, A As Integer Dim B As Integer, C As Integer X = 4:A = 4:B = 4:C = 4 Print X, A, B, C For K = 1 To 4 Call subpro(A, B) Print X, A, B, C Next K End Sub Sub subpro(A As Integer, B As Integer) X = X + A A = A + B B = B + A End Sub 结果如何?

  24. 7.6变量的作用域 • 模块级变量(窗体变量和标准模块变量) • 声明位置:在“通用”的“声明”过程中声明 • 声明方式:用DIM和Private定义 • 模块级变量:只能用于该模块的所有过程

  25. 7.6变量的作用域 • 全局变量变量 • 声明位置:在“通用”的“声明”过程中声明 • 声明方式:用Public定义 • 作用范围:能用于所有模块的所有过程

  26. 【例】模块级变量,参数传递 Dim X As Integer Private Sub Form_Click() dim A As Integer Dim B As Integer, C As Integer X = 4:A = 4:B = 4:C = 4 Print X, A, B, C For K = 1 To 4 Call subpro(A, B) Print X, A, B, C Next K End Sub Sub subpro(A As Integer, B As Integer) X = X + A A = A + B B = B + A End Sub 结果如何?

  27. 7.6 过程的作用域 1.模块级过程 模块级过程是指在定义过程时,在Sub或Function前加关键字Private,该过程只能被在本模块中定义的过程调用。 2.全局级过程 全局级过程是在定义过程时,在Sub或Function前加关键字Public(可以默认)。全局级过程可被整个应用程序所有模块中定义的过程调用。

  28. 7.6 调用其他模块中的过程 1.调用窗体中的通用过程 所有窗体模块的外部调用必须指向包含此过程的窗体模块。如果在窗体模块Forml中包含Somesub过程,则可使用下面的语句调用Forml中的过程: Call Form1.Somesub(参数表) 2.调用标准模块中的通用过程 如果过程名是惟一的,则不必在调用时加模块名。无论是在模块内,还是在模块外调用,结果总会引用这个过程。如果有两个以上的模块都包含同名的通用过程,则有必要用模块名来限定。

More Related