本章主要内容通用过程بإsu内容摘要:

Print 执行 test2后, x=。 x End Sub Sub test1(ByVal t As Integer) t = t + 5 End Sub Sub test2(s As Integer) s = s 5 End Sub 运行结果 执行 Test1前, x=5 执行 Test1后, Test2前, x=5 执行 Test2后, x=0 例 参数传递方式示例 过程的嵌套调用 在一个过程 (Sub过程和 Function过程 )中调用另外一个过程 例 输入两个数 n、 m,求组合数 Cnm 的值 Cnm = n! m!(nm)! 过程的嵌套与递归调用 Private Sub Form_Load() Show m = Val(InputBox(输入 m的值 )) n = Val(InputBox(输入 n的值 )) If m n Then MsgBox 输入数据错误 , 0, 检查错误 End End If Print 组合数是:。 Calb(n, m) End Sub Private Function Calb(n, m) Calb = Jc(n) / (Jc(m) * Jc(n m)) End Function Private Function Jc(x) t = 1 For i = 1 To x t = t * i Next i Jc = t End Function 程序中,采用了过程的嵌套调用方式。 在事件过程 Form_Load()中调用了Calb过程,而在 Calb过程中调用了三次 jc过程。 一个过程调用过程本身,就称为过程的递归调用 采用递归方法来解决问题时,必须符合以下两个 (1)可以把要解的问题转化为一个新的问题,而这个新的问题的解法仍与原来的解法相同; (2)有一个明确的结束递归的条件 (终止条件 ),否则过程将永远“递归”下去 过程的递归调用 可用下列的递归公式 1 n=1 n (n1)! n1 本递归中,终止条件是 n=1 n! = 例 采用递归方法求 n! (n0) Private Sub Form_Load() Dim n As Integer, m As Double Show n = Val(InputBox(输入 1~ 15之间的整数 )) If n 1 Or n 15 Then MsgBox 错误数据 , 0, 检查数据 End End If m= fac(n) Print n。 !=。 m End Sub Private Function fac(n) As Double If n 1 Then fac = n * fac(n 1) 39。 递归调用 Else fac = 1 39。 n=1时,结束递归 End If End Function 说明: 当 n1时,在 Fac过程中调用 Fac过程,然后 n减 1,再次调用 Fac过程,这种操作一直持续到 n=1为止。 例如,当 n=3时,求 Fac(3)变成求3 Fac(2),求 Fac(2)变成求 2 Fac(1),而 Fac(1)为 1,递归结束。 以后再逐层返回,递推出 Fac(2)及 Fac(3)的值 注意,在某次调用 Fac过程时并不是立即得到 Fac(n)的值,而是一次又一次地进行递归调用,到 Fac(1)时才有确定的值,然后通用过程逐层返回中依次算出 Fac(2)、 Fac(3)的值 Form_Load过程 m=Fac(3) Fac过程 调用 Fac(3)值 为 6 参数 n为 3 Fac=3*Fac(2) Fac过程 调用 Fac(2)值 为 2 参数 n为 2 Fac=2*Fac(1) Fac过程 调用 Fac(1)值 为 1 参数 n为 1 Fac=1 递归调用过程 (n=3) 求两个正整数 n和 m的最大公约数,解题方法见例 也可采用递归调用方法来求解, 递归终止条件是余数为 0 Private Sub Form_Load() Show m = Val(InputBox(输入 m的值 )) n = Val(InputBox(输入 n的值 )) Print m。 和。 n。 的最大公约数是:。 gys(n, m) End Sub Private Function gys(n, m) p = n Mod m If p = 0 Then 39。 终止条件 gys = m Else gys = gys(m, p) 39。 m→n,p→m, 再调用 End If End Function 例 用递归方法求两个正整数 n和 m的最大公约数 变量的作用域 (空间 )和生存期 (时间 ) 代码模块的概念 应用程序通常包括 窗体文件 (.frm)、模块文件 (.bas)和类模块 (.cls) 应用程序 工程文件 (.vbp) 窗体模块 文件 (.frm) Sub 过程 Function 过程 事件 过程 声明 部分 类模块 文件 (.cls) 标准模块 文件 (.bas) Sub 过程 Function 过程 声明 部分 Sub Main 过程 变量的作用范围 变量根据所处的位置或被定义不同,其作用范围也不同 局部变量、模块级变量和全局变量 1. 局部变量 在一个过程内部用 Dim或 Static声明的变量称为局部变量。 只能在本过程中有效。 在一个窗体中,不同过程中定义的局部变量 Private Sub Command1_Click() Dim Count As Integer Dim Sum As Integer . . . End Sub Private Sub Command2_Click() Dim Sum As Integer . . . End Sub 这两个同名变量 Sum没有任何联系 变量的作用域 模块级变量可以在一个窗体的不同过程中使用 在窗体模块的声明部分中声明该变量 如果用 Private或 Dim来声明,则该变量只能在本窗体。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。