版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章过程将程序分割成较小的逻辑部件就可以简化程序设计任务,称这些部件为过程。VB中有两类过程,一类是内部过程,另一类是外部过程,每一类过程又可分为函数过程和事件过程。内部过程是由系统提供的、不需要用户编写、可直接用过程名调用的程序段。外部过程是由用户根据自己的需要定义和编写的、可供事件过程多次调用的程序段。过程的使用,一方面将大的程序分成离散的逻辑单元,方便程序的调试;另一方面,方便了其他的程序或过程的调用。.在VB中,的Sub子过程分为:事件过程和通用过程
5.1.1事件过程
(1)窗体事件的语法PrivateSubForm_事件名(参数列表) <语句组>EndSub(2)控件事件的语法PrivateSub控件名_事件名(参数列表) <语句组>EndSub5.1Sub过程.子过程的定义形式如下:[Public|Private][Static]Sub子过程名([形参表])<局部变量或常数定义><语句组>[ExitSub]<语句组>EndSub
5.1.2通用过程(Sub过程)的定义说明:(1)子过程名:命名规则与变量名规则相同。子过程名不返回值,而是通过形参与实参的传递得到结果,调用时可返回多个值。.例:编一个交换两个整型变量值的子过程。PrivateSubSwap(XAsInteger,YAsInteger)DimtempAsIntegerTemp=X:X=Y:Y=TempEndSub(2)形式参数列表:形式参数通常简称“形参”,仅表示形参的类型、个数、位置,定义时是无值的,只有在过程被调用时,虚实参结合后才获得相应的值。(3)过程可以无形式参数,但括号不能省。(4)参数的定义形式:[ByVal|ByRef]变量名[()][As类型][,…],ByVal表示当该过程被调用时,参数是按值传递的;缺省或ByRef表示当该过程被调用时,参数是按地址传递的。.5.1.3子过程的建立通过“工具”菜单中的“添加过程”命令,出现“添加过程”对话框(见图),选择过程类型(子过程、函数、属性、事件)及作用范围(公有的Public、私有的Private),单击确定后得到一个过程或函数定义的结构框架(模板),如:PublicSubSort()……EndSub.5.1.4过程的调用
1子过程的调用子过程名[参数列表]或Call子过程名(参数列表)说明:(1)参数列表称为实参或实元,它必须与形参保持个数相同,位置与类型一一对应。(2)调用时把实参值传递给对应的形参。其中值传递(形参前有ByVal说明)时实参的值不随形参的值变化而改变。而地址传递时实参的值随形参值的改变而改变。.
例:调用上面定义的Sawp子过程的形式:Swapa,bCallSwap(a,b)(3)当参数是数组时,形参与实参在参数声明时应省略其维数,但括号不能省。(4)调用子过程的形式有两种,用Call关键字时,实参必须加圆括号括起,反之则实参之间用“,”分隔。.PrivateSubCmdOK()……CallSwap(a,b)……Swapa,bEndSubPrivateSubSwap(x%,y%)Dimtemp%Temp=XX=YY=TempEndSub过程调用的执行过程:.例:我们创建这样一个应用程序,它包含一个按钮,当用户在窗体上单击时,计算机的喇叭会发出3声“嘟”的声音;如果用户在按钮上单击,喇叭响五下.我们定义一个控制计算机操作的过程,命名为BeepSound,喇叭的次数作为参数有调入者传入,参数命名为n.过程BeepSound如下:SubBeepSound(nAsInterger)DimiAsInteger,jAsLongFori=1tonBeepForj=0to1000000NextNextEndSub
.我们可以用CallBeepSound(5)或BeepSound5调用BeepSound,所以我们可以在窗体Form1和按钮Command1的Click事件过程中调用BeepSound过程(如下:)PrivateSubCommand1_click()CallBeepSound(5)EndSubPrivateSubForm_Click()BeepSound3EndSub
.我们可以通过此图来了解这一操作:事件过程Command1_Click事件过程Form_Click通用过程BeepSound调用返回调用返回由上可知,子过程分为两种:通用过程和事件过程.5.2Function过程VisualBasic函数分为内部函数和外部函数,外部函数是用户根据需要用Function关键字定义的函数过程,与子过程不同的是函数过程将返回一个值。5.2.1函数过程(Function过程)的定义[Public|Private][Static]Function函数名([<参数列表>])[As<类型>]<局部变量或常数定义><语句块>[函数名=返回值][ExitFunction]<语句块>[函数名=返回值]EndFunction函数体.说明:(1)函数名:命名规则与变量名规则相同。但不能与系统的内部函数或其它通用子过程同名,也不能与已定义的全局变量和本模块中模块级变量同名。(2)在函数体内,函数名可以当变量使用,函数的返回值就是通过对函数名的赋值语句来实现的,在函数过程中至少要对函数名赋值一次。(3)AS类型:是指函数返回值的类型,若省略,则函数返回变体类型值(Variant)。
(4)ExitFunction:表示退出函数过程,常常是与选择结构(If或SelectCase语句)联用,即当满足一定条件时,退出函数过程。(5)形参数列表:形参的定义与子过程完全相同。.5.2.2函数的调用调用形式如下:变量=函数名(实参列表)说明:在调用时实参和形参的数据类型、顺序、个数必须匹配。函数调用只能出现在表达式中,其功能是求得函数的返回值。.5.3过程之间参数的传递VisualBasic中不同模块(过程)之间数据的传递有两种方式:
通过过程调用实参与形参的结合实现;使用全局变量来实现各过程中共享数据。5.3.1形式参数与实际参数1、形式参数是指在定义通用过程时,出现在Sub或Function语句中的变量名后面园括号内的数,是用来接收传送给子过程的数据,形参表中的各个变量之间用逗号分隔。.2、实际参数实际参数是指在调用Sub或Function过程时,写入子过程名或函数名后括号内的参数,其作用是将它们的数据(数值或地址)传送给Sub或Function过程与其对应的形参变量。实参可由常量、表达式、有效的变量名、数组名(后加左、右括号,如A())组成,实参表中各参数用逗号分隔。5.3.2参数传递(虚实结合)参数传递指主调过程的实参(调用时已有确定值和内存地址的参数)传递给被调过程的形参,参数的传递有两种方式:按值传递、按地址传递。形参前加“ByVal”关键字的是按值传递,缺省或加“ByRef”关键字的为按地址传递。.传址与传值传址:形参得到的是实参的地址,当形参值的改变同时也改变实参的值。传值:形参得到的是实参的值,形参值的改变不会影响实参的值。SubSwap2(x%,y%)DimTemp%Temp=x:x=y:y=TempEndSubSubSwap1(ByValx%,ByValy%)DimTemp%Temp=x:x=y:y=TempEndSub例.PrivateSubCmdOK_Click()a%=10:b%=20:Swap1a,b‘传值Print"A1=";a,"B1=";ba=10:b=20:Swap2a,b'传地址Print"A2=";a,"B2=";bEndSub程序调用执行过程:.值传递的执行过程如下图:通过地址传递数据的执行过程.数据传递的几点说明:1.参数的数据类型2.按值传递参数 形参是实参的一个副本3.按地址传递参数 形参实参公用内存单元4.子过程执行一系列操作,函数过程返回一个值注意:如果实参是常量(系统常量、符号常量)或者表达式,则无论定义时使用值传递还是地址传递,都是按值传递将常量或者表达式的计算值传递给形参。.5.3.4数组作过程的参数VisualBasic允许把数组作为实参传送到过程中。数组作参数是通过传地址方式传送。在传送数组时,除遵守参数传送的一般规则外,还应注意以下几点:1.把一个数组的全部元素传送给一个过程,应将数组名分别写入形参列表中,并略去数组的上下界,但括号不能省略。 PrivateSubSort(a()Assingle) …… EndSub其中形参“a()”即为数组。.2.被调过程可通过Lbound和Ubound函数确定实参数组的上、下界。3.当用数组作形参时,对应的实参必须也是数组,且类型一致。4.实参和形参结合是按地址传递,即形参数组和实参数组共用一段内存单元。例:定义了实参数组b(1to8),给它们赋了值,调用Sort()函数过程的形式如下:Sortb()或CallSort(b())实参数组后面的括号可以省略,但为便于阅读,建议一般不要省略为好。.调用时形参数组a和实参数组b虚实结合,共用一段内存单元,如下所示。因此在Sort()过程中改变数组a的各元素值,也就相当于改变了实参数组b中对应的元素的值,当调用结束时,形参数组a成为无定义。
b(1)b(2)b(3)b(4)b(5)b(6)b(7)b(8)a(1) a(2)a(3)a(4)a(5)a(6)a(7)a(8)参数为数组时虚实结合示意图.例:编写判断一个整数是不是素数写函数过程。如果给定的整数是素数,则返回逻辑值True,否则返回False
PrivateFunctionPrime(nAsInteger)AsBooleanDimk%,YesAsBooleanYes=TrueFork=2ton\2IFnmodk=0thenYes=False:ExitForNextkPrime=Yes‘给函数名赋值,作为函的返回值EndFunction如何调用该函数呢?使用该函数,编一验证哥德巴赫猜想。.PrivateSubForm_Click()Dimn%,n1%,n2%n=Val(InputBox(“输入大于6的偶数"))Forn1=3ton\2step2'让n1从3开始分解n2=n-n1'求得n2
‘如果n1和n2都是素数,则打印输出Ifprime(n1)Andprime(n2)thenPrintn&"="&n1&"+"&n2ExitFor'结束循环EndifNextn1EndSub.Fori=1Ton-1p=iForj=i+1TonIfa(p)>a(j)Thenp=jNextjtemp=a(i)a(i)=a(p)a(p)=tempNexti选择法排序(升序)的VB程序:如何写一个排序的VB过程?例:排序子过程.PrivateSubSort(a()Assingle)Dimi%,j%,p%,n%,temp!n=Ubound(a)Fori=1Ton-1p=iForj=i+1TonIfa(p)>a(j)Thenp=jNextjtemp=a(i)a(i)=a(p)a(p)=tempNextIEndSub.5.4过程的嵌套和递归调用5.4.1过程的嵌套
在程序中调用一子过程,而
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河北省保定市望都县保安员招聘考试真题附答案解析
- 口腔医学口腔黏膜病真题及答案
- 2025年防震减灾常识解读知识普及试题及答案解析
- 2025四川内江建工集团有限责任公司招聘工作人员3人笔试历年参考题库附带答案详解
- 2025四川九洲建筑工程有限责任公司招聘生产经理等岗位测试笔试历年参考题库附带答案详解
- 2025四川九华光子通信技术有限公司招聘工艺工程师1人笔试历年参考题库附带答案详解
- 2025吉林白城洮南市国有林总场招录后勤和护林员岗位32人笔试历年参考题库附带答案详解
- 2026年重庆建筑科技职业学院单招职业技能笔试备考题库及答案详解
- 电工(高级)资格证考试从业资格考试真题(重点)附答案详解
- 2025云南西双版纳勐海黎明人力资源管理服务有限责任公司招聘工作人员1人笔试历年参考题库附带答案详解
- (2025年版)慢性肾脏病高磷血症临床管理中国专家共识解读
- 配电箱安全培训课件
- 2025年榆林市住房公积金管理中心招聘(19人)笔试考试参考题库及答案解析
- 关于态度的培训课件
- 福州古厝课件
- 眩晕护理的研究方向与趋势
- 机房样板优化提升方案汇报
- 2025天津大学管理岗位集中招聘15人笔试考试参考题库及答案解析
- 【政】认识国家安全 课件-2025-2026学年统编版道德与法治八年级上册
- 2025年计量专业案例分析(一级)真题试卷及答案
- (2025年)三基三严理论试题+参考答案
评论
0/150
提交评论