![[理学]VB课件FIL.ppt_第1页](http://file.renrendoc.com/FileRoot1/2019-1/2/d7ea858c-f9c7-44e2-9b0e-8e3c7847795c/d7ea858c-f9c7-44e2-9b0e-8e3c7847795c1.gif)
![[理学]VB课件FIL.ppt_第2页](http://file.renrendoc.com/FileRoot1/2019-1/2/d7ea858c-f9c7-44e2-9b0e-8e3c7847795c/d7ea858c-f9c7-44e2-9b0e-8e3c7847795c2.gif)
![[理学]VB课件FIL.ppt_第3页](http://file.renrendoc.com/FileRoot1/2019-1/2/d7ea858c-f9c7-44e2-9b0e-8e3c7847795c/d7ea858c-f9c7-44e2-9b0e-8e3c7847795c3.gif)
![[理学]VB课件FIL.ppt_第4页](http://file.renrendoc.com/FileRoot1/2019-1/2/d7ea858c-f9c7-44e2-9b0e-8e3c7847795c/d7ea858c-f9c7-44e2-9b0e-8e3c7847795c4.gif)
![[理学]VB课件FIL.ppt_第5页](http://file.renrendoc.com/FileRoot1/2019-1/2/d7ea858c-f9c7-44e2-9b0e-8e3c7847795c/d7ea858c-f9c7-44e2-9b0e-8e3c7847795c5.gif)
已阅读5页,还剩56页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第9章,过 程,本章要点: Function过程 Sub过程 过程的嵌套 参数的传递 代码模块 变量的作用域与生存期,2,过程的引入: 使同类的操作不重复 (操作方法相同、参数不同) 过程: 完成一段独立功能,可供其他过程使用(调用)。 过程又称为子程序 调用过程: 调用其他过程的过程,3,过程分类:,Sub过程,Function过程,*内部过程(方法) 事件过程 自定义过程,内部函数 自定义函数,4,9.1 Function过程,9.1.1 Function过程的定义 1. Function过程的格式 Public|PrivateStatic Function () As = Exit Function = End Function,5,2. 说明 (1) Public: 缺省值。使用Public时表示所有模块的所 有其他过程都可以调用该Function过程。 (2) Private: 使用Private时表示只有本模块中的其他 过程才可以调用该Function过程。 (3) Static: 使用Static时表示将过程中的所有局部变 量说明为静态变量。 (4) : Function过程的名称,遵循变量 的命名规则。 (5) : 表示在调用时要传递给Function过程的参数变量列表。多个变量之间用逗号隔开。,6,格式: ByVal|ByRef( ) As ByVal: 表示该参数按值传递。 ByRef: 缺省值。表示该参数按地址传递。 : 遵循变量命名规则的任何变量名 或数组名。 ( ): 当参数为数组时使用。 (7) Exit Function语句: 从Function过程中退出。 (8) Function过程通过赋值语句 = 将函数的返回值赋给。 (9) Function过程的定义不能嵌套。,7,Function过程的建立: 直接在代码窗口中输入。 在代码窗口: 工具 添加过程。 【例9-1】编写一个计算n!的Function过程。 Function Fact(N As Integer) As Long Dim I As Integer, F As Long F = 1 F用于保存阶乘值 For I = 1 To N F = F * I Next I Fact = F 给函数过程名赋值 End Function,8,9.1.2 Function过程的调用 直接在表达式中调用。 格式: () : 常量、变量或表达式,各参数之间用逗号分隔。如果是数组,在数组名之后必须跟一对空括号。,9,【例9-3】从键盘上任意输入一个整数,然后调用例9-1编写的函数过程计算其阶乘数。,10, 自定义求阶乘的函数过程Fact Functin Fact(N As Integer) As Long Dim I As Integer, F As Long F = 1 For I = 1 To N F = F * I Next I Fact = F 给函数过程名赋值 End Function 在按钮的Click事件过程中调用函数过程 Private Sub Command1_Click() Dim X As Integer X = Val(Text1.Text) Label2.Caption = Trim(Str(X) & “的阶乘数为: “ Label3.Caption = Trim(Str(Fact(X) End Sub,11,9.1.3 Function过程举例 【例9-4】利用Function过程计算阶乘,求组合数。设计界面如下图所示。运行时,在文本框Text1和Text2中输入n和m值,或通过文本框旁的滚动条调整n和m的值,单击“=”按钮计算组合数,结果显示于文本框Text3中。,12,主要属性设置如下:,13, 定义求阶乘的函数Fact Function 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 = F End Function,14, 调整滚动条VScroll1的值(m)时,在文本框中显 示该值,并清除已有的计算结果 Private Sub VScroll1_Change() Text1.Text = VScroll1.Value Text3.Text = “ End Sub 调整滚动条VScroll2的值(n)时,在文本框中显示该值, 并清除已有的计算结果 Private Sub VScroll2_Change() Text2.Text = VScroll2.Value 限制n的最小值为m的值 VScroll1.Min = VScroll2.Value Text3.Text = “ End Sub,15, “=”按钮的Click事件过程 Private Sub Command1_Click() Dim m As Integer, n As Integer, c As Double m = Val(Text2.Text): n = Val(Text1.Text) 调用Fact函数求各阶乘值 c = Fact(m) / (Fact(n) * (Fact(m - n) Text3.Text = Trim(Str(c) End Sub,16, 定义求最大公约数的函数过程hcf Function hcf(m As Integer, n As Integer) As Integer Dim r As Integer r = m Mod n Do While r 0 m = n n = r r = m Mod n Loop hcf = n End Function,【例9-5】编写Function过程求最大公约数,并通过命令按钮的单击事件过程调用该函数过程。,17, 在Command1的单击事件过程中调用自定义函数 Private Sub Command1_Click() Dim m As Integer, n As Integer m = Val(Text1.Text): n = Val(Text2.Text) Label3.Caption = Str(hcf(m, n) End Sub 在Text1获得焦点时选中其中的文本 Private Sub Text1_GotFocus() Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End Sub,18, 在Text2获得焦点时选中其中的文本 Private Sub Text2_GotFocus() Text2.SelStart = 0 Text2.SelLength = Len(Text2.Text) End Sub,19,9.2 Sub过程,9.2.1 Sub过程的定义 1. Sub过程的格式 Private|PublicStatic Sub () Exit Sub End Sub 2. 说明 (1) Exit Sub用于退出Sub过程。 (2) 不具有值的意义,在Sub过程中不能给赋值,也不能给定义类型。,20,(3) Sub过程通过中的参数返回值。 (4) Sub过程的建立方法与Function过程的建立方法相同。 【例9-7】编写计算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 Sub,21,【例9-8】编写Sub过程,打印以下图形。 分析: 打印以上图形,不需要返回值,因此无需引入参数。,* * * * *,Sub a() For i = 1 To 6 Print Tab(7 - i); For j = 1 To 2 * i - 1 Print “*“; Next j Print Next i End Sub,22,【例9-9】编写Sub过程,求三个数中的最大数和最小数。 分析: 首先要设置三个参数,如x、y、z,用于接收三个原始数据,另外引入两个参数max和min,用于返回最大和最小数。 Sub s(x, y, z, max, min) max = x min = x If y max Then max = y If y max Then max = z If z min Then min = z End Sub,23,9.2.2 Sub过程的调用 格式一: Call () 格式二: 说明: (1) : 要调用的Sub过程名; (2) : 可以是常量、变量或表达式,各参数之间用逗号分隔。如果是数组参数,则要在数组名之后跟一对空括号。 (3) 用Call语句调用一个Sub过程时,如果过程本身没有参数,则省略和括号。 (4) 格式二省略了Call关键字,同时两边也不能带括号。,24,【例9-10】将例9-3改成用Sub过程实现求n!。 Option Explicit 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 Sub,25,Private Sub Command1_Click() Dim x As Integer, Ff As Long x = Val(Text1.Text) Label2.Caption = Trim(Str(x) & “的阶乘数为: “ 调用Fact过程求x阶乘,阶乘值存于实参Ff中 Call Fact(x, Ff) Label3.Caption = Trim(Str(Ff) End Sub,26,9.2.3 Sub过程举例 【例9-11】编写一个Sub过程,计算N个数的和,即1+2+N,并通过命令按钮的单击事件调用该过程计算S=1+(1+2)+(1+2+3)+ +(1+2+K)。 分析: 编写一个Sub过程计算1+2+N, 设参数N、S,参数S用于返回该和值。 Public Sub A1(N As Integer, S As Integer) S = 0 For J = 1 To N S = S + J Next J End Sub,27,Private Sub Command1_Click() Dim K As Integer, S1 As Integer, I As Integer K = Val(Text1.Text) For I = 1 To K 调用过程A1求1+2+I,和值返回到S1中 Call A1(I, S1) Sum = Sum + S1 Next I Text2.Text = Sum End Sub,28,【例9-12】编写一个Sub过程,实现将三个数由大到小排序。程序运行时单击“排序前”按钮产生0,99之间的三个随机整数,并将文本框Text2的内容清空,单击“排序后”按钮,调用该Sub过程完成排序。,分析: 在Sub过程中引入三个参数A、B、C用于接收数据,在过程中对它们进行排序,执行完过程后还通过A、B、C返回排序后的结果。,29,Dim X As Integer, Y As Integer, Z As Integer 定义排序过程Sort3 Public Sub Sort3(A As Integer, B As Integer, C As Integer) Dim T As Integer If A B Then T = A: A = B: B = T If A C Then T = A: A = C: C = T If B C Then T = B: B = C: C = T End Sub 单击Command1按钮产生并显示三个随机数 Private Sub Command1_Click() Randomize X= Int(100 * Rnd) Y = Int(100 * Rnd) Z = Int(100 * Rnd),30,Text1.Text = Str(X) & Str(Y) & Str(Z) Text2.Text = “ End Sub 单击Command2按钮调用Sort3过程进行排序, 并显示排序结果 Private Sub Command2_Click() Sort3 X, Y, Z Text2.Text = Str(X) & Str(Y) & Str(Z) End Sub,31,9.3 过程的嵌套,在一个过程执行期间又调用另一个过程,称为过程的嵌套调用。,调用过程 子过程S1 子过程S2, 调用S1 , 调用S2 ,32,【例9-13】用Function过程求1!+2!+3!+20! Private Sub Command1_Click() Dim n As Integer n = Val(InputBox(“n=“) Print Sigma(n) 调用Sigma过程 End Sub Function Sigma(n As Integer) As Double Dim i As Integer, sum As Double sum = 0 For i = 1 To n sum = sum + Fact(i) 调用Fact过程 Next i Sigma = sum End Function,33,Function Fact(n As Integer) As Double Dim i As Integer, f As Double f = 1 For i = 1 To n f = f * i Next i Fact = f End Function,34,9.4 参数的传递,调用过程与被调用过程之间的一种数据通讯方法。 数据的传递可以是单向的,也可以是双向的。 9.4.1 形参和实参 形参: 出现在Sub或Function语句中。 实参: 出现在调用程序中。 例如,定义如下一个过程: Sub SubTest(n As Integer,Sum As Single) End Sub 调用语句: Call SubTest( a , s),形参,实参,35,说明: 在传递参数时,形参表与实参表中对应参数个数、类型、位置顺序必须一一对应。 形参表中的参数可以是: 除固定长度字符串之外的合法变量名、数组名() 实参表中的参数可以是: 常量、变量、表达式、 数组名() 形参与实参的结合有两种方式: 按值传递和按地址传递。,36,9.4.2 按值传递和按地址传递 1. 按值传递 实参把其值传递给形参而不传递实参的地址。 数据的传递是单向的。 (1) 当实参为常量或表达式时,数据传递总是单向的。 例如: Call SubTest(10, 1+2) Sub SubTest( n As Integer,Sum As Single),37,(2) 实参是变量时,要实现按值传递需要在形参之前通过关键字ByVal来实现。 例如: Sub SS(ByVal X, ByVal Y, ByVal Z) 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 运行时,单击命令按钮在窗体上打印: 1 2 3,38,2. 按地址传递 指将实参的地址传给形参,使形参和实参具有相同的地址,即形参与实参共享同一存储单元。 (1) 当实参为变量或数组时,形参使用关键字ByRef定义(或省略)表示要按地址传递。 (2) 当参数是数组时,数组名之后必须使用一对空的圆括号。 按地址传递可以实现调用过程与子过程之间数据的双向传递。,39,例: Sub SS(ByRef X, ByRef Y, ByRef Z) 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,运行时,单击命令按钮在窗体上打印: 2 3 4,40,【例9-14】编写一个计算乘幂的Function过程,用来计算x的y次幂,其中y0。单击窗体时调用该过程打印51、52、53、54、55的值。 Option Explicit Function Power(x As Single, ByVal y As Integer) Dim result As Single result = 1 Do While y 0 result = result * x y = y - 1 Loop Power = result End Function,41,Private Sub Form_Click() Dim i As Integer For i = 1 To 5 Print Power(5, i) Next i End Sub 思考: 如果取消过程Power中参数y前的关键字ByVal,则会出现什么情况?,42,9.5 代码模块,VB应用程序由三种模块组成: 窗体模块(Form) (文件扩展名.frm) 标准模块(Module) (文件扩展名.bas) 类模块(Class) (文件扩展名.cls),43,9.5.1 窗体模块 包含: 事件过程 通用过程 通用声明 9.5.2 标准模块 不对应于某个窗体、完全是纯代码。 包含: 全局常量、变量、全局过程 标准模块级常量、变量、通用过程 注: 不能包含事件过程 添加: 工程添加模块选“新建”标签打开“添加模块”对话框 9.5.3 类模块 在类模块中编写代码建立新对象。,44,9.5.4 过程的作用域 过程的建立位置不同,允许被访问的范围也不同。 作用域: 模块级、全局级 1. 模块级过程: 在Sub过程或Function过程前如果加Private关键字,则这种过程只能被其所在的窗体模块或标准模块中的其他过程所调用。 2. 全局过程: 在Sub过程或Function过程前如果加Public关键字,或者省略Public与Private关键字,则这种过程可以被该应用程序的所有窗体模块或所有标准模块中的过程所调用。 3. 过程的作用域: 见P156,45,例:设窗体Form1中有按钮: Command1、 Command2 Public Sub aa() MsgBox (“这是窗体Form1中的过程“) End Sub Private Sub Command1_Click() Call aa End Sub Private Sub Command2_Click() Form2.Show End Sub,46,设窗体Form2中有按钮: Command1 、 Command2 Private Sub Command1_Click() Call Form1.aa End Sub Private Sub Command2_Click() Call Module1.bb End Sub 添加标准模块Module1 ,编写以下过程: Public Sub bb() MsgBox (“这是标准模块中的过程bb“) End Sub,47,9.6 变量的作用域与生存期,变量的作用域: 指变量的有效范围。 变量的生存期: 指变量的作用时间。 9.6.1 变量的作用域 将变量分为: 局部变量 模块级变量 全局变量,48,1. 局部变量 声明 不声明 Dim A As Integer A每次执行过程时被初始化 Static C As Single C在应用程序执行期间保持不变 作用范围 仅在声明的过程中起作用 其他过程中即使有同名变量,也不是指同一变量。,49,例: 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 End Sub,单击C1后运行结果: 1 2 3 2 3 5,50,例: Sub S() Static Z As Integer Z = Z + 2 Print Z End Sub Private Sub Command1_Click() Dim Z As Integer Z = Z + 2 Call S Print Z End Sub,第一次单击C1结果: 2 2 第二次单击C1结果: 4 2 第三次单击C1结果: 6 2,51,2. 模块级变量 声明 在模块的通用声明段中用以下方法声明的变量。 Private 在模块运行时被初始化 Dim 在模块运行时被初始化 作用范围 在该模块的所有过程中都起作用 其他模块不能访问这些变量 3. 全局变量 声明 在模块的通用声明段中用以下方法声明的变量 Public 应用程序运行时被初始化 作用范围: 应用程序的所有过程,52,例: Dim Z As Integer Sub S() Z = Z + 2 Print Z End Sub Private Sub C1_Click() Z = Z + 2 Call S Print Z End Sub,第一次单击C1结果: 4 4 第二次单击C1结果: 8 8 第三次单击C1结果: 12 12,53,例: Dim Z As Integer Sub S() Dim Z Z = Z + 2 Print z End Sub Private Sub C1_Click() Z = Z + 2 Call S Print Z End Sub,第一次单击C1结果: 2 2 第二次单击C1结果: 2 4 第三次单击C1结果: 2 6,54,【例9-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=F1 End Function,I: 局部变量 F1: 局部变量 N: 形式参数 F: 公共函数 M1、M2: 全局变量,55,Form1模块: Dim N As Integer Private Sub C1_Click() N = Val(Text1.Text) M1 = N * N * N Text2.Text = M1 End Sub Private Sub C2_Clic
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 天津西青期中考试题及答案
- 2025年公需科目考试(附答案)
- 体育学校学生心理健康风险预警与干预研究-洞察及研究
- 精装房选房管理办法
- 财务岗位分级管理办法
- 《外部董事管理办法》
- 不良债权投资管理办法
- 规划教材建设管理办法
- 2025年抗心律失常药项目合作计划书
- 业务投标风险管理办法
- 水行政处罚培训课件
- 沥青路面基础知识
- 测绘服务投标方案(技术标)
- 汽车行业2025年展望:销量预测、产能、经销商等-2024-12-市场解读
- 中国古典插花制作技术规范
- 冠状动脉造影术后护理课件
- 涉密项目管理培训
- 《课程理论-课程的基础、原理与问题》施良方
- 老年游戏活动服务-老年康体指导 中级 -1729733382079
- 2024-2025学年小学信息技术(信息科技)三年级全一册义务教育版(2024)教学设计合集
- 银行反洗钱知识竞赛题库及答案(单选题150道、多选题169道及判断题110道)
评论
0/150
提交评论