




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1教学目的要求: 掌握过程的概念和调用 掌握子过程和函数的应用 掌握虚实结合和变量的作用域教学重点: 子过程和函数 第4.5章 过 程2 VB应用程序是由过程组成的,除了定义一些公共的常量、变量或数组外,编写代码都是在过程中进行的。 事件过程由VB预先定义,编程人员所要做的工作就是在已经存在的过程中编写代码。 实际应用中,为了使程序结构清楚,或减少代码的重复性,可将重复性较大的代码段独立出来形成一个过程,在需要使用该过程的位置可根据不同的参数调用该过程,实现该过程所规定的功能。这种独立定义的过程叫做“通用过程”。 通用过程由编程人员建立,供事件过程或其他通用过程使用(调用),通用过程也称为“子
2、过程”或“子程序”,可以被多次调用。而调用该子过程的过程称为“调用过程”。VB中,通用过程分为两类:Function过程和Sub过程3调用过程调用Sprg1调用Sprg1调用Sprg2子过程:Sprg1子过程:Sprg2过程调用4 VB提供了丰富的内部函数供用户使用,如Sin函数、Sqr函数,使用这些函数时只需写出函数名称,并指定相应的参数就能得到函数值。 当在程序中要重复使用某一公式或处理某一函数关系,而又没有现成的内部函数可以使用时,可以自己定义函数,并采用与调用内部函数相同的方法来调用自定义函数。 自定义函数通过Function过程实现。Function过程也称为函数过程函数过程。 一、
3、 Function过程5(一) Function过程的定义 1Function过程的格式 Public | Private | Static Function () As = Exit FunctionEnd Function62说明 Public:可选项,缺省值。使用Public时表示所有模块的所有其他过程都可以调用该Function过程。 Private:可选项。使用Private时表示只有本模块中的其他过程才可以调用该Function过程。 Static:可选项。如果使用该选项,则VB只给过程中的所有局部变量分配一次存储空间,即在应用程序执行期间,每次调用该Function过程时将保留该
4、过程中的局部变量值。若没有使用该选项,则每次调用该Function过程时,其中的局部变量都要被重新初始化。 :Function过程的名称,遵循变量的命名规则。7 :可选项。表示在调用时要传递给Function过程的参数变量列表。多个变量之间用逗号隔开。的格式为: ByVal | ByRef ( ) As 其中: ByVal为可选项,表示该参数按值传递; ByRef为可选项,缺省值,表示该参数按地址传递。 遵循变量命名规则的任何变量名或数组名。 ( )当参数为数组时使用。 As为可选项,用于声明参数的数据类型。8 As :可选项。Function过程的返回值的数据类型,可以是Byte、Boole
5、an、Integer、Long、Currency、Single、Double、Date、String(固定长度除外)、Object、Variant或用户自定义类型。 :可选项。语句组中可以有一条或多条Exit Function语句。 Exit Function语句:从Function过程中退出。 :可选项。Function过程通过赋值语句 “ = ”将函数的返回值赋给。如果省略该语句,则数值函数过程返回0,字符串函数过程返回空串。9Function过程的建立可以在窗体模块中进行,也可以在标准模块中进行。建立的方法有以下两种: Function过程的定义不能嵌套,即不能在Function过程中再
6、定义Function过程或Sub过程。例如,Function Fact(N As Integer),回车后,此时代码窗口中即可在Function语句和End Function语句之间输入程序代码。1)直接在代码窗口中输入在代码窗口中的所有过程之外,输入过程的第一条语句。102)使用“添加过程命令。 打开代码窗口,执行“工具”菜单中的“添加过程”命令,弹出添加过程对话框,输入过程名选择类型选择范围11(二)Function过程的调用 定义函数过程的目的是为了在其他过程中调用,通过调用将一些参数值传递给函数过程,在函数过程中利用参数值计算并返回函数值。 Function过程的调用与内部函数的调用类
7、似,即可以直接在表达式中调用。 格式: () 其中,为要调用的Function过程的名称;为要传送给Function过程的常量、变量或表达式,各参数之间用逗号分隔,如果是数组,在数组名之后必须跟一对空括号空括号。12Function过程定义及调用举例过程定义Label2Label3Text113例例4-19 输入输入n,计算计算1!+2!+3!+n!(用函数过程实现用函数过程实现)Function fact(x) t = 1 For i = 1 To x t = t * i Next i fact = tEnd FunctionPrivate Sub Command1_Click() n=in
8、putbox(“输入输入n值值”) sum = 0 For i = 1 To n sum = sum + fact(i) Next i Text1.Text = sumEnd Sub14 当需要定义的过程返回一个值时,使用前面介绍的Function过程很容易实现,但在实际应用中,可能希望过程不需要返回值,例如,使用过程打印一个图形,或需要返回多个值; 如,利用过程对一批数据进行排序,或者要进行较复杂的操作,等等。在这些情况下就要利用Sub过程来实现。二、 Sub过程15(一) Sub过程的定义 1Sub过程的格式 Private | PublicStatic Sub () Exit Sub E
9、nd Sub16 2说明 格式中各项含义同Function过程。Exit Sub用于退出Sub过程。 Sub过程的与Function过程的的含义与作用不同,只在调用Sub过程时使用,不具有值的意义,在Sub过程中不能给赋值,也不能给定义类型。 过程可以返回0到多个值,且由中的参数返回这些值。因此,使用函数过程可以实现的功能,也可以用Sub过程实现。 Sub过程的建立方法与Function过程的建立方法相同,可以在代码窗口中直接输入,也可通过执行“工具”菜单中的“添加过程”命令生成过程模板。17(二) Sub过程的调用 定义一个Sub过程之后,必须使用Call语句调用该过程。 调用格式一:Cal
10、l () 调用格式二: :要调用的Sub过程名。 :要传送给Sub过程的常量、变量或表达式,各参数之间用逗号分隔。如果是数组参数,则要在数组名之后跟一对空括号。 用Call语句调用一个Sub过程时,如果过程本身没有参数,则省略和括号。 格式二省略了Call关键字,同时两边也不能带括号。18例:在窗体上输出n行*号Sub ab(n)for I=1 to nprint “*”next IEnd subPrivate sub command1-click()x=val(text1.text)call ab(x)End sub例4-18(89页)19(一) 形参和实参 形参是在Sub过程、Functi
11、on过程的定义中出现的变量名,实参则是在调用Sub过程或Function过程时传送给Sub过程或Function过程的常量、变量、表达式或数组。 在调用一个过程时,必须把实参传送给过程,完成形参与实参的结合,然后用实参执行调用的过程。这种参数的传递也称为参数的结合。 三、 参数的传递20例如,定义如下一个过程:Sub SubTest(n As Integer, Sum As Single) End Sub 如果有以下调用语句:Call SubTest(a, s) 则其形参与实参的结合关系如下: 过程调用: Call SubTest(a, s) 过程定义: Sub SubTest(n As In
12、teger, Sum As Single) 在传递参数时,形参表与实参表中对应参数的名字不必相同,但要求形参表与实参表中参数的个数、类型、位置顺序必须一一对应。 形参表中的参数可以是:除固定长度字符串之外的合法变量名,后面带一对圆括号的数组名。 实参表中的参数可以是:常量、变量、表达式、后面带一对圆括号的数组名。 VB中, 形参与实参的结合有两种方式:按值传递和按地址传递。21(二) 按值传递和按地址传递 1按值传递 按值传递是指实参把其值传递给形参而不传递实参的地址。在这种情况下,系统把需要传递的参数复制到一个临时存储单元中,然后把临时存储单元与形参结合,在子程序执行过程中,形参值的改变不会
13、影响主程序中实参的值,因此,数据的传递是单向的。例:sub power2(byval y as integer)y=y2print “y=“;y end sub private sub form_click()dim x as integerx=10call power2(x)print “x=“;x end sub222按地址传递 按地址传递即指将实参的地址传给形参,使形参和实参具有相同的地址,即形参与实参共享同一存储单元。当实参为变量或数组时,形参使用关键字ByRef定义(或省略),表示要按地址传递。 当参数是数组时,数组名之后必须使用一对空的圆括号。 按地址传递可以实现调用过程与子过程之
14、间数据的双向传递。 sub power(byref y as integer)233传递数组在VB中可以把数组或数组元素作为实参传送给形参,若传递整个数组,需在实参和形参上都要写上数组名和一对括号,若要传递数组的元素,则在实参上写上该数组元素。 例4-20 随机生成有10个元素的一维数组,并求其平方和。24在一个过程执行期间又调用另一个过程,称为过程的嵌套.程序S1 S2四、 过程的嵌套调用调用25 程序的递归过程(过程调用自身)26VB的程序模块由一些过程组成,在过程中会使用到变量,包括在形参表中出现的变量以及不在形参数表中出现的变量。本节要讨论的是不在形参表中出现的变量。变量的定义位置不同
15、,定义方式不同,允许被访问的范围和作用时间也不相同。变量的作用域即指变量的有效范围。变量的生存期即指变量的作用时间。4.6 变量的作用域与生存期274.6.1 变量的作用域 变量的作用域决定了应用程序中哪些过程可以访问该变量。按变量的作用域不同,可以将变量分为:局部变量、窗体/模块级变量和全局变量。 1局部变量 局部变量指在过程内用Dim语句声明的变量、未声明而直接使用的变量、用Static声明的变量。这种变量只能在本过程中使用,不能被其他过程访问。在其他过程中如果有同名的变量,也与本过程的变量无关,即不同的过程中可以使用同名的变量。除了用Static声明的变量外,局部变量在其所在的过程每次运
16、行时都被初始化。282模块级变量 模块级变量指在窗体模块或标准模块的通用声明段中用Dim语句或Private语句声明的变量。模块级变量的作用范围为其定义位置所在的模块,可以被本模块中的所有过程访问。模块级变量在其所在的模块运行时被初始化。例如:例如:在在“通用声明通用声明”段声明如下变量段声明如下变量Private s As StringDim a As Integer,b As Single3全局变量 全局变量指在模块的通用声明段中用Public语句声明的变量,其作用范围为应用程序的所有过程。全局变量在应用程序运行时被初始化。29例如:例如:在标准模块文件中进行不同级的变量声明在标准模块文件
17、中进行不同级的变量声明Public pa As integer 全局变量全局变量Private Mb as string * 10窗体窗体/模块级变量模块级变量Sub F1()Dim Fa As integer局部变量局部变量 End SubSub F2()Dim Fb As Single局部变量局部变量End Sub30同时还要说,若在不同级声明相同变量名,如: Public Temp As integer全局变量Sub Form_Click()Dim Temp As Integer局部变量Temp=10访问局部变量Form1.Temp=20访问全局变量必须加窗体名Print Form1.T
18、emp,Temp显示20和10End Sub 31作用域 局部变量模块级变量 全局变量 窗体模块 标准模块声明方式 Dim、StaticDim、PrivatePublic声明位置在过程中窗体模块、标准模块的通用声明段窗体模块、标准模块的通用声明段能否被本模块中其他过程调用 否能能能否被本应用程序中其他模块调用 否否能,但要在变量名前加窗体名能变量的作用域及声明、使用规则324.6.2 变量的生存期 当一个过程被调用时,系统将给该过程中的变量分配存储单元,当该过程执行结束时,是释放还是保留变量的存储单元,这就是变量的生存期问题。 根据变量的生存期,可以将变量分为动态变量和静态变量。331动态变量
19、 在应用程序中的变量如果不使用Static语句进行声明,则属于动态变量。 对于过程级的动态变量,在程序运行到变量所在的过程时,系统为变量分配存储空间,并进行变量的初始化工作;当该过程结束时,释放变量所占用的存储空间,其值不再存在。 模块级动态变量在运行模块时被初始化,在退出模块时释放其所占用的存储空间。 全局级动态变量在应用程序执行时分配存储空间,在退出应用程序时释放存储空间。 342静态变量 如果一个变量用Static语句声明,则该变量只被初始化一次,在应用程序运行期间保留其值,即在每次调用该变量所在的过程时,该变量不会被重新初始化,而在退出变量所在的过程时,不释放该变量所占的存储空间。声明
20、静态变量: Static As Static Function () As Static Sub 在Function过程、Sub过程的定义语句中使用Static修饰词,表明该过程内所有的局部变量均为静态变量。35例:Static Sub SS1( ) For I = 1 To 10 S = S + I Next I Print SEnd SubPrivate Sub Command1_Click( ) Call SS1End Sub55110165555555取消Static36VB应用程序由三种模块组成,即窗体模块(Form)、标准模块(Module)和类模块(Class)。这些模块通常保存
21、在具有特定类型名的文件中,窗体模块保存在以.frm为类型名的文件中;标准模块保存在以.bas为类型名的文件中;类模块保存在以.cls为类型名的文件中。5.5 代码模块37VB应用程序的组成类模块(.cls)文件标准模块(.bas)文件事件过程窗口模块(.frm)文件应用程序工程文件Function过程Sub过程Function过程Sub过程385.5.1 窗体模块 窗体模块是大多数VB应用程序的基础。 窗体模块可以包含处理事件的过程、通用过程以及变量、常量、类型和外部过程的窗体级声明。若要在文本编辑器中观察窗体模块,则还会看到窗体及其控件的描述,包括它们的属性设置值。窗体模块还可以引用该应用程
22、序内的其他窗体或对象。395.5.2 标准模块 当一个应用程序含有多个窗体,且这些窗体都需要调用某一个通用过程时,就需要建立一个标准模块,在该标准模块中建立通用过程。标准模块可以包含变量、常量、外部过程和全局过程的全局(在整个应用程序范围内有效的)声明或模块级声明。缺省情况下,标准模块中的代码是公有的,任何窗体或模块中的事件过程或通用过程都可以访问它。标准模块不与任何窗体相关联。在标准模块中可以包含通用过程,但不能包含事件过程。 添加标准模块的步骤: 1)从“工程”菜单中执行“添加模块”命令,打开“添加模块”对话框。 2)在“新建”选项卡中,双击“模块”图标即可建立一个标准模块Modulel,
23、打开标准模块代码窗口。405.5.3 类模块 在VB中类模块是面向对象编程的基础。 可在类模块中编写代码建立新对象,这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件,可显示窗体窗口。例题:例题:建立四个模块,包括两个窗体模块(各创建两个按钮)和两个标准模块,在每个模块中建立通用过程Proce。并在不同模块中互相调用这个过程。415.5.4 过程的作用域 在窗体模块中可以建立事件过程、通用过程,在标准模块中只能建立通用过程。过程的建立位置不同,允许被访问的范围也不同。VB中,可以将过程的作用域分为模块级和全局级。 在Sub过程或Function过程前如果加P
24、rivate关键字,则这种过程只能被其所在的窗体模块或标准模块中的其他过程所调用,称为模块级过程。 在Sub过程或Function过程前如果加Public关键字,或者省略Public与Private关键字,这种过程可以被该应用程序的所有窗体模块或所有标准模块中的过程所调用,称为全局过程。 全局过程所处的位置不同,其调用方式也有所区别。在窗体模块内定义的全局过程,其他模块中的过程要调用时,必须在被调用过程名前加上其所在的窗体名;在标准模块内定义的全局过程,其他模块中的过程可直接调用,但被调用过程名必须惟一,否则要加上其所在的标准模块名。 42作用域 模块级 全局级 窗体模块 标准模块 窗体模块
25、标准模块定义方式 过程名前加Private,例如: Private Sub Subl () 过程名前加Public,例如: Public Sub Sub2 (形参表) 能否被本模块中其他过程调用 能能能能能否被本应用程序中其他模块调用 否否能,但必须在过程名前加窗体名,例如:Call Forml.Sub2 () 能,但过程名必须唯一,否则必须在过程名前加标准模块名,例如:Call Modulel.Sub2() 过程的作用域及过程定义、调用规则43【例】编写Function过程求最大公约数,并通过命令按钮的单击事件过程调用该函数过程。44Function hcf(m As Integer, n
26、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 = nEnd FunctionPrivate 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 Sub45【例】利用Function过程计算阶乘,求组合数。设计界面如下图。T
27、ext2OLE1控件控件Text1Text3Command1BackStyle: 0 - TransparentBorderStyle: 0 NoneSizeMode: 2 - AutoSize46 定义求阶乘的函数FactFunction 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 = FEnd FunctionPrivate Sub Command1_Click() =按钮的事件过程按钮的事件过程 Dim m As Integer,
28、 n As Integer, c As Double m = Val(Text1.Text) n = Val(Text2.Text) c = Fact(m) / (Fact(n) * (Fact(m - n) 调用调用Fact Text3.Text = Trim(Str(c)End Sub47【例】将求组合数一题改成用Sub过程实现Sub Fact(N As Integer, F As Long) Dim I As Integer F = 1 For I = 1 To N F = F * I Next IEnd Sub48Private Sub Command1_Click() Dim M A
29、s Integer, N As Integer Dim f1 As Long, f2 As Long, f3 As Long M = Val(Text1.Text) : N = Val(Text2.Text) Call Fact(M, f1):Call Fact(N, f2):Call Fact(M - N, f3) Text3.Text = Trim(Str(f1 / (f2 * f3)End Sub49【例】编写一个Sub过程,计算K个数的和,即1+2+K,并通过命令按钮的单击事件调用该过程计算S=1+(1+2)+(1+2+3)+ +(1+2+N)。 分析: 编写一个Sub过程计算1+2+
30、K, 设参数K、S,参数S用于返回该和值。 Sub A1(K As Integer, S As Integer) S = 0 For J = 1 To K S = S + J Next J End Sub50Private Sub Command1_Click() Dim N As Integer, S1 As Integer, I As Integer N = Val(Text1.Text) For I = 1 To N 调用过程A1求1+2+I,和值返回到S1中 Call A1(I, S1) Sum = Sum + S1 Next I Text2.Text = SumEnd Sub51【例
31、】编写一个计算乘幂的Function过程,用来计算x的y次幂,其中y0。单击窗体时调用该过程打印51、52、53、54、55的值。 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 52 Power = result End FunctionPrivate Sub Form_Click() Dim i As Integer For i = 1 To 5 Print Power(5, i) N
32、ext iEnd Sub思考: 如果取消过程Power中参数y前的关键字ByVal,则会出现什么情况?53例例:将输入的十进制整数转化为二进制数后输出。数将输入的十进制整数转化为二进制数后输出。数制的转换通过子过程制的转换通过子过程DectoBin实现。实现。对象属性属性值Form1Caption十进制转换为二进制Label1Caption十进制数:Label2二进制数:Text1Text2Text空白Command1Caption转换Command2Caption退出54Sub DectoBin(d As Integer, b As String) Dim r b = Do While d 0 r = d Mod 2 If r = 0 Then b = 0 & b Else b = 1 & b End If d = d 2 LoopEnd SubPri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年行政管理语文能力测试试题及答案
- 经济法概论考试复习经验试题及答案
- 新型医疗器械使用试题及答案
- 行政法学职业道路试题与答案指导
- 行政管理实战案例分析及答案
- 行政管理专科语文测试策略及试题答案
- 健康护理服务模式试题及答案分析
- 2025年卫生资格考试科目分析与答案
- 执业药师考试中的科研能力培养及试题答案
- 2025年经济法概论厚度试题及答案
- 增大柱截面加固施工方案
- 舰载小口径转管炮未来应用及关键技术研究
- 商业地产运营管理作业指导书
- 个人信息安全保密协议
- 六年级数学竞赛试题及答案(六套)
- DBJ50T-476-2024 市政管网监测技术标准
- 2024-2030年中国智能音箱行业消费态势及投资潜力预测报告
- 反比例函数函数K的几何意义市公开课一等奖省赛课获奖课件
- 2024-2030年中国回收聚对苯二甲酸乙二酯(PET)行业市场发展趋势与前景展望战略分析报告
- 会议保障实施方案
- JGJ196-2010建筑施工塔式起重机安装、使用、拆卸安全技术规程
评论
0/150
提交评论