过程是VB的基本组成单位.ppt_第1页
过程是VB的基本组成单位.ppt_第2页
过程是VB的基本组成单位.ppt_第3页
过程是VB的基本组成单位.ppt_第4页
过程是VB的基本组成单位.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章过程,过程是VB的基本组成单位,一些复杂的任务可以分解成为基本的过程来负责完成!,过程的作用,当需解决的问题规模较大、复杂时,可以按功能细分成一个一个小的功能模块,这样的小程序段,在VB中被称为过程;过程是VB程序的基本组成单位。,过程的分类,VB过程分为子过程(Sub)、函数过程(Function)、属性过程(Property)三种。本书我们主要学习子过程和函数过程。考试时,要严格区分子过程和函数过程的用法。,引例,6.1定义Sub子过程,我们早就使用过子过程,因为在VB中每一个事件过程都是子过程;VB程序是从某个事件过程首先驱动开始的。本章主要学习用户自定义子过程的定义方法。,6.1.1事件过程,PrivateSub对象名_事件名(参数列表)局部变量和常量的声明语句块ExitSub语句块EndSub事件过程原型用户不能改变;事件过程是私有的,6.1.2通用子过程(用户自定义过程),Private|PublicStaticSub过程名(形参列表)局部变量和常量的声明语句块ExitSub语句块EndSub通用子过程的作用在于将重复出现的程序段或功能较复杂的程序段独立或细分出来的小的程序段,即为通过子过程。,6.1.2通用子过程(用户自定义),子过程定义说明:1)子过程以Sub开始,EndSub结束,中间可以利用ExitSub中途退出过程;2)以Private定义的子过程是私有的,只允许本模块内的过程调用;用Public定义的子过程是公有的,允许被整个工程中的任意过程调用;系统缺省为Public;3)Static表示静态“局部”变量,变量一经定义,在整个程序运行期间不会被重新初始化,不能使用在“通用”-“声明”字段中;,6.1.2通用子过程(用户自定义),4)过程名的命名规则与变量名一样,即第一个字符必须是字母或汉字,后面由字母、汉字、数字或下划线组成,不能使用VB中的关键字;过程名不要重名;5)形参列表:这个列表的功能再于接收必要的数据信息,建立与主调程序之间的关系;参数的个数可以为零个、1个甚至多个;参数间用逗号分隔;括号不可省略;6)形参列表的形式:(ByValaAsInteger,ByRefbAsInteger),6.1.2通用子过程(用户自定义),7)EndSub标志Sub过程执行结束,程序将返回调用该Sub过程的语句处继续执行;8)过程不能嵌套定义。PrivateSubCommand1_Click()CallP()EndSub,PrivateSub()Print“输出结果为:”EndSub,6.1.2通用子过程(用户自定义),Sub子过程的建立方法1)利用命令建立(不常用)进行“代码窗口”;执行“工具”菜单中的“添加过程”命令;在出现的对话框中进行设置。,6.1.2通用子过程(用户自定义),Sub子过程的建立方法2)直接在代码窗口中生成进行“代码窗口”;选择“通用”-“声明”,光标停留在所有过程外面的空白行处;按Sub子过程的定义规则输入PrivateSub过程名(参数)按回车键,即可创建一个空的Sub子过程。,6.1.2通用子过程(用户自定义),Sub子过程的过程体代码:子过程的功能主要是在过程体内完成的,过程名主要是为找到这个过程而提供路线的;子过程的代码和事件过程的代码类似;如:PrivateSubChange(x1AsInteger,x2AsInteger)DimTempAsIntegerTemp=x1x1=x2x2=TempEndSub,6.2定义Function过程,Function过程又称函数过程;在第三章中,我们学习了大量的VB系统函数,这些函数用户只可以使用,不可以修改;VB提供的Function过程,就是让用户可以自己创建特殊功能的函数,用户自定义函数。,6.2定义Function过程,定义Function过程的形式如下:Private|PublicStaticFunction函数名(参数列表)As数据类型局部变量和常数声明语句块函数名=表达式ExitFunction语句块函数名=表达式EndFunction,6.2定义Function过程,定义Function过程说明:1)Function过程以Function语句开头,以EndFunction结束;中间代码部分为函数体;2)函数名有返回值,其值类型由As数据类型指定;3)函数名不同于子过程名,在VB中,为函数名赋予了存储值的功能,而过程名不可以,所以函数体内一般都会至少为函数名赋值一次;如果不赋值,函数返回值默认为0或空;4)函数中途可以利用ExitFunction退出。,6.2定义Function过程,例如,求n!PrivateFunctionfac%(ByValnAsInteger)DimiAsIntegerIfn0Thenfac=-1:ExitFunctionElsefac=1Fori=1Tonfac=fac*iNextiEndIfEndFunction,6.2定义Function过程,例如,求gcd(m,n)最大公约数PrivateFunctiongcd%(ByValm%,ByValn%)Dimr%,t%Ifm0m=nn=rr=mModnLoopgcd=nEndFunction,PrivateSubChange(x1%,x2%)DimTempAsIntegerTemp=x1x1=x2x2=TempEndSub,6.3过程调用,除了事件过程是由使用者发出动作触发外,多数过程都是要间接的由事件过程或其他过程调用才能够使用。,6.3.2Sub过程调用,Sub子过程调用方法:1)用Call语句调用Sub过程Call过程名(实参表)说明:过程名为被调用过程的名字;实参与形参是对应的,个数、类型一一对应;在过程定义的列表中为形参,在调用时,为实参;实参可以是具体的值、或有值的变量、属性,而形参则是负责接收实参值的。2)直接将过程写成语句形式:过程名实参表说明:这种调用形式,不用加Call;同时要将实参表的括号去掉并与过程名之间加一个空格。,6.3.2Sub过程调用,编写一个子过程,打印杨辉三角形。,PrivateSubYH(nAsInteger)Dima()AsInteger,i%,j%Redima(1Ton,1Ton)Fori=1TonForj=1ToiIfj=1Ori=jThena(i,j)=1Elsea(i,j)=a(i-1,j)+a(i-1,j-1)EndIfPrintTab(6*j-Len(Cstr(a(i,j)+1);a(i,j);NextjPrintNextiEndSub,6.3.3调用Function过程,调用Function过程的方法比较简单,与VB内部函数的调用方法一样,即在表达式中写出它的名称和相应的参数;v=函数名(实参列表)Print函数名(实参列表)当然也可以用Call语句形式,此时将放弃函数名返回值的功能,功能与子过程一致,6.3.4调用其他模块中的过程,当一个过程可以被其他模块调用时,首先要求这个过程为Public公有的。1)调用窗体模块中的公有过程Call窗体名.子过程名(实参表)2)调用标准模块中的公有过程,在没有重名的前提下,可直接调用:Call子过程名(实参表)否则,CallModule1.子过程名(实参表),例题,编写一个求任意三角形面积的函数,PrivateFunctionArea!(a!,b!,c!)Dimt!t=(a+b+c)/2Area=Sqr(t*(t-a)*(t-b)*(t-c)EndFunction,例题,编写一个求任意三角形面积的子过程,PrivateSubArea(a!,b!,c!,s!)Dimz!z=(a+b+c)/2s=Sqr(z*(z-a)*(z-b)*(z-c)EndSub,6.4.1形参与实参,形参:置于过程定义时,参数列表中的变量或数组;在过程被调用前,系统不对其分配空间;实参:当程序中想调用某过程时,所提供的实际值;当实参和形参结合的时候,形参才被分配空间,接收由实参传递过来的值;形参、实参个数、类型、位置要一致。,6.4.1形参与实参,常见的错误PrivateSubF1(a%,b%).EndSubPrivateSubCommand1_Click()Dimx!,y!x=3.14:y=123CallF1(x,y)CallF1(x)EndSub,6.4.23参数传递方式,传值(ByVal)传址(ByRef或省略默认)区别1:形参定义前面放的关键字不一样;区别2:形参接收到的值不一样;区别3:形参对实参的影响不一样,6.4.23参数传递方式,例如:(两个数的交换)PrivateSubExchange(ByVala%,ByValb%)Dimt%t=aa=bb=tPrinta,bEndSub,PrivateSubCommand1_Click()Dimx%,y%x=12y=21CallExchange(x,y)Print“主过程中:“;x,yEndSub,6.4.23参数传递方式,说明:形参前加ByVal时表示传值不加或加ByRef时表示传址传值是单方向的传址是“双方向的”,6.4.23参数传递方式,Privatesubadd(xasinteger,yasinteger,zasinteger)z=x+yx=x+1y=y+1print“子过程中”&x&y&zEndsubPrivatesubForm_Click()dimaasinteger,basinteger,casintegera=3:b=2:c=1adda,b,c或者写成Calladd(a,b,c)print“外部过程中”&a&b&cEndsub,6.4.23参数传递方式,Privatesubadd(ByValxasinteger,ByValyasinteger,ByValzasinteger)z=x+yx=x+1y=y+1print“子过程中”&x&y&zEndsubPrivatesubForm_Click()dimaasinteger,basinteger,casintegera=3:b=2:c=1adda,b,cprint“外部过程中”&a&b&cEndsub,6.4.23参数传递方式,下列程序运行后,单击Command1结果为:PrivateSubCommand1_Click()a=10:b=20Callxy1(a,b)Printa,bxy2a,bPrinta,bEndSub,PublicSubxy1(x,ByValy)x=x+yy=x-yx=x-yEndSubPublicSubxy2(ByValx,y)x=x+yy=x-yx=x-yEndsub,6.4.4数组(元素)参数,在某些问题中,会将数组中的某个值或者全部元素传递给形参编写一个子过程:求任意一维数组中存放数据的乘积,程序,6.4.4数组(元素)参数,编写一个函数求任意数组中的最大值,PrivateFunctionMax%(a%()Dimi%,m%m=a(LBound(a)Fori=LBound(a)+1ToUBound(a)Ifma(i)Thenm=a(i)NextiMAX=mEndFunction,6.4.4数组(元素)参数,编写一个子过程求任意数组中的最大值,PrivateSubMax(a%(),ByRefm%)Dimi%m=a(LBound(a)Fori=LBound(a)+1ToUBound(a)Ifm10Thens=Chr(65+r-10)&s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论