收藏 分销(赏)

第6章过程清华版解析.pptx

上传人:快乐****生活 文档编号:4185762 上传时间:2024-08-12 格式:PPTX 页数:37 大小:313.50KB
下载 相关 举报
第6章过程清华版解析.pptx_第1页
第1页 / 共37页
第6章过程清华版解析.pptx_第2页
第2页 / 共37页
第6章过程清华版解析.pptx_第3页
第3页 / 共37页
第6章过程清华版解析.pptx_第4页
第4页 / 共37页
第6章过程清华版解析.pptx_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、第八章 过 程 8.1过程概述在VB5.0/6.0中,除了系统提供的内部函数过程和事件过程外,用户可自定义过程下列四种过程:“Sub”保留字开始的为子过程“Function”保留字开始的为函数过程“Property”保留字开始的为属性过程“Event”保留字开始的事件过程 在在VB中,的中,的Sub子过程分为:事件过程和通用过程子过程分为:事件过程和通用过程 8.2.1 事件过程事件过程 (1)窗体事件的语法)窗体事件的语法Private Sub Form_事件名事件名(参数列表参数列表)语句组语句组End Sub(2)控件事件的语法)控件事件的语法Private Sub 控件名控件名_事件名

2、事件名(参数列表参数列表)语句组语句组 End Sub8.2 Sub过程过程子过程的定义形式如下:子过程的定义形式如下:Public|PrivateStatic Sub 子过程名子过程名(形参表形参表)语句组语句组 Exit Sub 语句组语句组End Sub 8.2.2 通用过程(通用过程(Sub过程)的定义过程)的定义 说明:说明:(1)子子过过程程名名:命名规则与变量名规则相同。子过程名不返回值,而是通过形参与实参的传递得到结果,调用时可返回多个值。(2)形形式式参参数数列列表表:形式参数通常简称“形参”,仅表示形参的类型、个数、位置,定义时是无值的,只有在过程被调用时,虚实参结合后才获

3、得相应的值。(3)过程可以无形式参数,但括号不能省。过程可以无形式参数,但括号不能省。(4)参数的定义形式:参数的定义形式:ByValByRef变量名变量名()As 类型类型,,ByVal表示当该过程被调用时,参数是按值传递的;缺省或ByRef表示当该过程被调用时,参数是按地址传递的。例如例如 编一个交换两个整型变量值的子过程。Private Sub Swap(X As Integer,Y As Integer)Dim temp As Integer Temp=X:X=Y:Y=TempEnd Sub8.2.3 子过程的建立子过程的建立 通过“工具”菜单中的“添加过程”命令,出现“添加过程”对话

4、框(见图示),选择过程类型(子过程、函数、属性、事件)及作用范围(公有的Public、私有的Private),单击确定后得到一个过程或函数定义的结构框架(模板),如:Public Sub Sort()End Sub8.2.4 过程的调用过程的调用 1 子过程的调用子过程的调用 子过程名子过程名 参数列表参数列表 或或 Call 子过程名子过程名(参数列表参数列表)说明:说明:(1)参数列表参数列表称为实参或实元,它必须与形参保持个数相称为实参或实元,它必须与形参保持个数相同,位置与类型一一对应。同,位置与类型一一对应。(2)调用时把实参值传递给对应的形参。其中值传递(形调用时把实参值传递给对应

5、的形参。其中值传递(形参前有参前有ByVal说明)时实参的值不随形参的值变化而改变。而说明)时实参的值不随形参的值变化而改变。而地址传递时实参的值随形参值的改变而改变。地址传递时实参的值随形参值的改变而改变。(3)当参数是数组时,形参与实参在参数声明时应省略当参数是数组时,形参与实参在参数声明时应省略其维数,但括号不能省。其维数,但括号不能省。(4)调用子过程的形式有两种,用调用子过程的形式有两种,用Call关键字时,实参关键字时,实参必须加圆括号括起,反之则实参之间用必须加圆括号括起,反之则实参之间用“,”分隔。分隔。例:调用上面定义的例:调用上面定义的Swap子过程的形式:子过程的形式:S

6、wap a,b Call Swap(a,b)Private Sub CmdOK()Call Swap(a,b)Swap a,bEnd SubPrivate Sub Swap(x%,y%)Dim temp%Temp=X X=Y Y=TempEnd Sub 过程调用的执行过程:过程调用的执行过程:8.3Function过程VisualBasic函数分为内部函数和外部函数,外部函数是用户根据需要用Function关键字定义的函数过程,与子过程不同的是函数过程将返回一个值。8.3.1 函数过程(函数过程(Function过程)的定义过程)的定义 Public|PrivateStaticFunction

7、 函数名()As函数名=返回值Exit Function函数名=返回值End Function函数体说明:说明:(1)函数名:命名规则与变量名规则相同。但不能与系统的内部函数或其它通用子过程同名,也不能与已定义的全局变量和本模块中模块级变量同名。(2)在函数体内,函数名可以当变量使用,函数的返回值就是通过对函数名的赋值语句来实现的,在在函函数数过过程程中中至至少少要要对函数名赋值一次。对函数名赋值一次。(3)AS类型:是指函数返回值的类型,若省略,则函数返回变体类型值(Variant)。(4)Exit Function:表示退出函数过程,常常是与选择结构(If或SelectCase语句)联用,

8、即当满足一定条件时,退出函数过程。(5)形参数列表:形参的定义与子过程完全相同。8.3.2 函数的调用函数的调用调用形式如下:调用形式如下:函数名(实参列表)函数名(实参列表)说明:说明:在调用时实参和形参的数据类型、顺序、个数必须匹配。函数调用只能出现在表达式中,其功能是求得函数的返回值。8.4 过程之间参数的传递过程之间参数的传递VisualBasic中不同模块(过程)之间数据的传递有两种方式:通过过程调用实参与形参的结合实现;使用全局变量来实现各过程中共享数据。8.4.1 8.4.1 形式参数与实际参数形式参数与实际参数1、形式参数、形式参数是指在定义通用过程时,出现在Sub或Funct

9、ion语句中的变量名后面园括号内的数,是用来接收传送给子过程的数据,形参表中的各个变量之间用逗号分隔。2、实际参数实际参数是指在调用Sub或Function过程时,写入子过程名或函数名后括号内的参数,其作用是将将它它们们的的数数据据(数数值值或或地址)传送给地址)传送给Sub或或Function过程与其对应的形参变量。过程与其对应的形参变量。实参可由常量、表达式、有效的变量名、数组名(后加左、右括号,如A())组成,实参表中各参数用逗号分隔。8.4.2 参数传递(虚实结合)参数传递(虚实结合)参数传递指主调过程的实参(调用时已有确定值和内存已有确定值和内存地址的参数地址的参数)传递给被调过程的

10、形参,参数的传递有两种方式:按值传递、按地址传递。形参前加“ByVal”关键字的是按值传递,缺省或加“ByRef”关键字的为按地址传递。传址与传值传址与传值 传址:传址:形参得到的是实参的地址,当形参值的改变同形参得到的是实参的地址,当形参值的改变同时也改变实参的值。时也改变实参的值。传值:传值:形参得到的是实参的值,形参值的改变不会影形参得到的是实参的值,形参值的改变不会影响实参的值。响实参的值。Sub Swap2(x%,y%)Dim Temp%Temp=x:x=y:y=Temp End SubSub Swap1(ByVal x%,ByVal y%)Dim Temp%Temp=x:x=y:y

11、=TempEnd Sub例例8.4 Private Sub CmdOK_Click()Dim a%,b%a=10:b=20 Swap1 a,b 传传 值值 Print A1=;a,B1=;b a=10:b=20 Swap2 a,b 传地址传地址 Print A2=;a,B2=;bEnd SubSub Swap2(x%,y%)Dim Temp%Temp=x:x=y:y=Temp End SubSub Swap1(ByVal x%,ByVal y%)Dim Temp%Temp=x:x=y:y=TempEnd Sub值传递的执行过程如下图:值传递的执行过程如下图:通过地址传递数据的执行过程通过地址传

12、递数据的执行过程 8.4.3 有关过程之间数据传递的几点说明有关过程之间数据传递的几点说明 1参数的数据类型参数的数据类型2 按值传递参数按值传递参数3 3 按地址传递参数按地址传递参数 注注意意:在子过程和函数过程调用时,如果实参是常量(包括系统常量、用Const自定义的符号常量)或表达式,无论在定义时使用值传递还是地址传递,此时都是按值传递方式将常量或表达式计算的值传递给形参变量值传递给形参变量。如果形参定义是按传地址方式按传地址方式,但调用时想使实参变量按值方式传递,可以把实参变量加上括号,将其转换成表达式即可。参数的传递问题:4使用子过程还是使用函数过程使用子过程还是使用函数过程解决一

13、个问题既可以使用子过程,也可以使用函数过程,是使用子过程还是使用函数过程呢?如如果果是是需需要要求求得得一一个个值值,一一般般情情况况使使用用函函数数过过程程,如如不不是是为为了了求求一一个个值值,而而是是完完成成一一些操作,些操作,或需要返回多个值或需要返回多个值,则使用子过程比较方便,则使用子过程比较方便。例例8 8.6分别编写计算下面级数的子过程和函数过程,并在窗体的单击事件中调用。级数为,要求精度为:8.5 数组作过程的参数数组作过程的参数VisualBasic允许把数组作为实参传送到过程中。数组作参数是通过传地址方式传送。在传送数组时,除遵守参数传送的一般规则外,还应注意以下几点:还

14、应注意以下几点:1为了把一个数组的全部元素传送给一个过程,应将数组名分别写入形参表中,并略去数组的上下界,但括号不能省略。Private Sub Sort(a()As single)End Sub其中形参“a()”即为数组。2被调过程可通过Lbound和Ubound函数确定实参数组的上、下界。3当用数组作形参时,对应的实参必须也是数组,且类型一致。4实参和形参结合是按地址传递,即形参数组和实参数组共用一段内存单元。例如:定义了实参数组b(1to8),给它们赋了值,调用Sort()函数过程的形式如下:Sort b()或或 Call Sort(b()实参数组后面的括号可以省略,但为便于阅读,建议一

15、般不要省略为好。调用时形参数组a和实参数组b虚实结合,共用一段内存单元,如图6-7所示。因此在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)参数为数组时虚实结合示意图 例例8.7改写上章例5.3的排序程序,分别将排序用子过程Sort(),产生N个随机整数用子过程GetData(),输入N个数组元素用PrData()子过程来完成。8.6 过程的嵌套和递归调用过程的嵌套和递归调用8.6.1 过程的嵌

16、套过程的嵌套在程序中调用一子过程,而在子过程中又调用另外的子过程,这种程序结构称为过程的嵌套。过程的嵌套调用执行过程如下图:8.6.2 过程的递归调用过程的递归调用 用自身的结构来描述自身,称递归。例如,对阶乘的定义:VisualBasic允许在一个Sub子过程和Function过程的定义内部调用自己,即递归Sub子过程和递归Function函数。例例8.8编求阶乘fac(n)=n!的递归函数Private Function fac(n As Integer)As Integer If n=1 Then fac=1 Else fac=n*fac(n-1)End IfEnd FunctionPr

17、ivate Sub Form_Click()Print“fac(4)=”;fac(4)End Sub程序的递归过程:说明:说明:递归处理一般用栈来实现,分递推和回归两个过程,如上图所示。递推过程:每调用一次自身,把当前参数(形参、局部变量、返回地址等)压入栈,直到递归结束条件成立。回归过程:然后从栈中弹出当前参数,直到栈空。递归算法设计简单,解决同一问题,使用递归算法消耗的机时和占据的内存空间要比使用非递归算法大。使用递归算法必须要满足以下的递归条件:使用递归算法必须要满足以下的递归条件:(1)存在递归结束条件及结束时的值;(2)能用递归形式表示,且递归向终止条件发展。8.7 过程的可选参数与

18、不定数量参数过程的可选参数与不定数量参数8.7.1 可选参数可选参数(Optional)概念:概念:当然用户在自定义子过程或函数时也可以定义可选参数。要指定某个形参为可选参数,这就是在形参变量前加入Optional关键字即可。如果一个过程某个形参为可选参数,则在调用此过程时可以不提供对应于这个形参的实参,若一个过程有多个形参,当它的一个形参被设定为可选参数,则这个参数之后面的其它参数也必是可选的,并且要用Optional关键字来声明。例例8.9可选参数的使用Private Sub Nadres(x As String,Optional y As String)Text1.text=x Text

19、2.text=yEnd SubPrivate Sub Command1_Click()Dim strName As StringDim strAddress As StringstrName=张玉strAddress=杭州市学院路85号 提供了两个参数。Call Nadres(strName,strAddress)End Sub说明:说明:1、检测可选参数是否被省略使用VB的内部函数IsMissing(可选参数名)来测试过程被调用时,某个参数是否被省略。如果可选参数被省略了,则返回True,未省略,返回False。注意:若可选参数是其它类型,则IsMissing()总是返回False,不能起到

20、检测的作用。例:Private Sub Nadres(x As String,Optional y As Variant)Text1.Text=x If Not IsMissing(y)Then Text2.Text=y End IfEnd Sub2指定可选参数的缺省值指定可选参数的缺省值也可以给可选参数指定缺省值。在下例中,如果未将可选参数传递到函数过程,则返回一个缺省值。Sub Nadres(x As String,Optional y As String=杭州市学院路85号)Text1.text=x Text2.text=yEnd SubPrivate Sub Command1_Clic

21、k()Dim strName As String strName=张玉 未提供第二个参数。Call Nadres(strName)End Sub8.7.2 使用不定数量的参数使用不定数量的参数一般说来,过程调用中的参数个数应等于过程说明的参数个数。可用ParamArray关键字指明,过程将接受任意个数的参数。其定义形式如下:其定义形式如下:Sub 过程名过程名(ParamArray 数组名数组名()Function 函数名函数名(ParamArray 数组名数组名()As 数据类型数据类型8.8 应用举例应用举例8.8.1 查找问题查找问题例例8.11使用顺序查找法,在一组数中查找某给定的数x

22、算法设计:设一组数据存放在数组a(1)-a(n)中,待查找的数据放在x中,把x与a数组中的元素从头到尾一一进行比较查找。用变量p表示a数组元素下标,p初值为1,使x与a(p)比较,如果x不等于a(p),则使p=p+1,不断重复这个过程;一旦x等于a(p)则退出循环;另外,如果p大于数组长度,循环也应该停止,则可由以下语句来实现它。For P=1 to n IF a(p)=x then Exit ForNextP下下面面编编写写一一查查找找函函数数Find(),若若找找到到x则则返返回回下下标标值值,找找不到返回不到返回0Private Function Find(a()As Single,x

23、As Single)As Integer Dim n%,p%,m%m=Lbound(a)n=Ubound(a)For P=m to n IF a(p)=x then Exit ForNextP If pn then p=0 Find=pEnd Function 例例8.12使用折半查找法,在一批有序数列中查找给定的数x。分分析析:设n个有序数(从小到大)存放在数组a(1)-a(n)中,要查找的数为x。用变量bot、top、mid分别表示查找数据范围的底部(数组下界)、顶部(数组的上界)和中间,mid=(top+bot)/2,折半查找的算法如下:(1)x=a(mid),则已找到退出循环,否则进行下面的判断;(2)xa(mid),x必定落在mid+1和top的范围之内,即bot=mid+1;(4)在确定了新的查找范围后,重复进行以上比较,直到找到或者bota(p)and pa(p)Andp=n确定x应插入的位置p=p+1LoopFori=nTopStep-1a(i+1)=a(i)Nextia(p)=xEndSub

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服