VB程序设计 第八章 过程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

VisualBasic程序设计教程ptc.imust.cn内蒙古科技大学实践训练中心第八章过程8.1过程的定义与调用VB的过程:⑴系统提供的内部函数过程,其中,事件是构成VB应用程序的主体,应用设计基本上是对事件过程进行设计;⑵用户根据应用的需要而设计的过程;VB的过程分类:⑴以”Sub”保留字开始的子过程;⑵以“Function”保留字开始的函数过程;⑶以“Property”保留字开始的属性过程;⑷以“Event”保留字开始的事件过程;8.1过程的定义与调用8.1.1Sub过程的定义与调用用户自定义子过程通常来完成一个特定的功能,其名字可由用户根据自己的习惯而定义。VB的事件过程只在用户触发该事件后启动,而用户自定义的子过程只有在被其他过程调用时才启动。1、用户自定义子过程的一般格式[Static][Private|Public]Sub子过程名[(参数列表)]语句块[ExitSub]语句块EndSub说明:⑴格式中“Sub子过程名”和”EndSub“不可缺;子过程名的命名规则与变量命名规则相同;8.1过程的定义与调用8.1.1Sub过程的定义与调用⑵Static:在过程名之前使用Static,表示过程中的局部变量都是静态变量。当程序退出该程序时,局部变量的值仍然保留作为下次调用的初值。Static对数组变量也有效,但对动态变量则无法转换为静态变量;⑶Private:表示该过程为私有过程,只有本模块中的其他过程访问,不能被其他模块中的模块访问;⑷Public:表示该过程为公有过程,即可以被程序中所有模块调用。本窗体和其他模块均可调用,但过程名必须是唯一的,否则在过程名前加上该过程所在的窗体名或模块名。⑸参数列表:其他过程与本过程进行参数传递和交换的形式参数,当参数个数大于等于2时,参数之间用”,”隔开;⑹ExitSub:在过程任意位置终止过程的运行而退出过程而使用的语句;⑺EndSub:过程结束标识,用来正常终止过程;8.1过程的定义与调用8.1.1Sub过程的定义与调用⑻过程参数的传递默认方式为引用(地址)传递(ByRef),若只传参数(实参)的值则必须将形式参数说明为Byval,格式如下:Byval变量名或数组名()[As数据类型]⑼过程内部不能再定义其他过程,可以调用其他合法的过程,事件过程中也不允许定义子过程。subcommand_click()calltest()endsubstaticsubtest()dima(2)asintegera(0)=a)(0)+1a(1)=a(1)+1printa(0);a(1)endsub8.1过程的定义与调用8.1.1Sub过程的定义与调用定义过程的方式:⑴手工方式:在过程、事件代码窗口中,编写事件程序:sub过程名([参数列表])…EndSub⑵系统方式①进入模块代码窗口:系统菜单”工程“-”添加”-“新建”,则新建一个模块,在标准模块中填写子过程代码;②系统菜单”工具“-”添加过程“,确定子过程的名称以及类型后,即回到模块的代码窗口;8.1过程的定义与调用8.1.1Sub过程的定义与调用2、子过程调用⑴Call过程名[(实参列表)];如:calltext(12,”abc”)⑵过程名[实参列表];如:test12,”abc”例[8-1]求n!解题思路:在标准模块中定义一个子过程n,用于实现求任意正整数的阶乘。PublicSubn(aAsInteger)DimiAsIntegerDimfAsDoublef=1Fori=1Toaf=f*iNextForm1.Label1.Caption=Str(a)&!的阶乘的值为:&Str(f)EndSubCalln(Val(Text1.Text))8.1过程的定义与调用8.1.1Sub过程的定义与调用2、子过程调用⑴Call过程名[(实参列表)];如:calltext(12,”abc”)⑵过程名[实参列表];如:test12,”abc”例[8-2]给出矩形的长和宽,求矩形的面积。解题思路:定义一个过程area,计算矩形的面积。PrivateSubarea(aAsSingle,bAsSingle)DimsumAsDoublesum=a*bForm1.Label3.Caption=矩形面积为:&Str(sum)EndSubCallarea(Val(Text1.Text),Val(Text2.Text))8.1过程的定义与调用8.1.2Function过程的定义与调用函数过程(Function)与子过程一样,可将一组完成特定功能的程序代码组织起来,作为一个相对独立的过程使用;但子过程没有值的返回,函数过程有值的返回。1、函数过程的定义[Static][Public][Private]Function函数过程名[(参数列表)][As类型]语句块…[ExitFunction]…语句块[给函数名赋返回值]EndFuntion8.1过程的定义与调用8.1.2Function过程的定义与调用说明:⑴格式中的Static、Public、Private的含义与作用以及参数列表的格式和使用方法,Byval传值的作用等均与子过程的定义相同;⑵ExitFunction的作用与ExitSub相同;⑶As类型,指定该函数的返回值的类型;⑷语句块为符合VB语法的一条语句或多条语句;⑸给函数名赋值:一般情况下,定义一个函数过程,就是能返回一个值给调用程序,故函数过程应有一条语句给函数名赋值即调用后的返回值;若不赋值,则默认返回值为0(数值型函数),或空值(可变类型函数)。⑹与Sub定义一样,函数过程定义的函数体内不允许定义其他的函数过程和子过程。8.1过程的定义与调用8.1.2Function过程的定义与调用2、函数过程的定义方法⑴在代码窗口中手工输入函数过程的框架;如:StaticPrivateFunctionAreturn(aasinteger,basinteger)asInteger…EndFunction⑵系统菜单“工具”-“添加过程”,选择相应的类型和范围属性;3、函数过程的调用函数过程的调用如同调用VB的系统内部函数一样;程序中。函数过程的调用一般放在表达式中赋值号”=“的右边,将它看成某种类型的值而参加表达式的组成。8.1过程的定义与调用8.1.2Function过程的定义与调用3、函数过程的调用例[8-3]函数过程的定义与调用:判断某个成绩(百分制)的等级.解题思路:定义一个函数过程,用于判断分数的等级,判断后的结果返回为字符串:优、良、中、及格或不及格。PrivateFunctionafirm(cjAsInteger)AsStringSelectCasecjCaseIs60afirm=不及格Case60To69afirm=及格Case70To79afirm=中Case80To89afirm=良CaseIs90afirm=优EndSelectEndfunctionText2.Text=afirm(Val(Text1.Text))8.1过程的定义与调用8.1.2Function过程的定义与调用例[8-4]编写求任意给定两个自然数的最大公约数的程序。解题思路:⑴对于已知两个数m、n,使得mn;⑵m除以n得余数r;⑶若r=0,则n为所求的最大公约数,算法结束,否则执行(1);⑷n-m,r-n,再重复步骤(2);步骤mnr=(mmodn)说明第一次36148第二次1486第三次862第四次620最大公约数为28.2函数和过程的参数传递参数传递:在调用过程时,过程参数使用的是实际参数,它要与定义过程时的形式参数一一对应,并以适当的形式将实参传给行参,供过程使用。参数传递的方式:⑴传值;⑵传址;8.2.1传值形参:指在定义过程时出现在参数列表中的变量名,这些变量名的使用只能在过程内部。实参:是在调用该过程时调用过程中已组织好的准备传给形参的常量、变量、表达式或数组控件对象等,它是在调用过程(主程序或父过程)中组织好的数据,实参若是常量,则传递就相当于将该常量的值赋给形参。实参若为一个简单变量的表达式,也是与常量一样将该表达式的值赋给对应的形式参数。传递参数时,形参和实参的个数一定相同,传递时要一一对应;参数之间要用“,”隔开;每个实参的类型必须与相对应的行参类型相同;8.2函数和过程的参数传递8.2.1传值SubtempSub(aasinteger,bassingle,casstring)…EndSub可采用调用方式:calltempsub(a%,b!,”comm”)过程调用Calltempsub(a%,b!,“comm”)过程定义Subtempsub(aasinteger,bassingle,casstring)过程定义中默认的参数传递是地址传递,但在定义过程中,若某个参数用Byval来说明。则该参数便是传值。传值的一个特点是将实参的值复制一份给形式参数所代表的临时内存单元,此后实参与形参之间再无任何联系,形式参数的任何变化均不会对实参产生任何影响。8.2函数和过程的参数传递8.2.1传值例【8-5】传值调用Privatesubcommand1_click()dimxasinteger,yasintegerx=10:y=20print“x=“;x;”y=“;y;calltemp(x,y)print“x=“;x;”y=“;y;EndSubSubtemp(Byvalxasinteger,Byvalyasinteger)x=x+100:y=x*60print“x=“;x,”y=“,y;EndSub运行结果:x=10y=20‘调用前的实参x=110y=6600‘temp中的行参x=10y=20‘调用后的实参8.2函数和过程的参数传递8.2.1传值例[8-6]求幂级数解题思路:定义temp函数用于计算x的幂,需要用到2个参数,x和y,x用于传递某个数,y用于传递幂的次方数。y是传值参数,因此,函数中y值的改变不会影响它相应的实际参数。DimiAsInteger,rAsSingleFori=1To5r=temp(5,i)PrintrNextFunctiontemp(xAsInteger,ByValyAsInteger)AsSingleDimpAsSinglep=1DoWhiley0p=p*xy=y-1Looptemp=pEndFunction8.2函数和过程的参数传递8.2.2传址在过程调用过程中,参数传递的默认方式是按地址传递,故不加任何关键字就是传址调用。传址的特点是形参与对应实参用相同的内存地址,形参的改变将影响实参的改变,实际上,形参也是实参的别名。通常情况下,形式参数为传值形式,则形式参数可认为是一个局部变量;但若为传址方式,则由形参与实参连系起来,使形参为非局部变量,因为形参的改变结果直接传给了实参。例【8-7】对于例[8-5]中的过程temp将其定义为:subtemp(xasinteger,yasinteger)…EndSub则Calltemp(x,y)变为了传址调用,故形参的改变会引起实参x、y的值改变。8.2函数和过程的参数传递8.2.2传址例[8-8]传值与传址两种方式下,形参与实参的改变。8.2函数和过程的参数传递8.2.3数组及对象作为过程的参数1、数组作为参数⑴用数组名作为形参或实参;⑵用数组元素作为实参进行传递;注意:第⑴中方法相当于传址方式,即将数组的起始地址传给形参,但在使用时应注意以下几点:●用数组名进行地址传递时,在参数列表中说明数组,不需要说明其维数的定义,但圆括号不可省略;●在过程定义体内如需要知道参数的上、下界,可用UBound和LBound确定参数组的上、下界;●形参数组和实参数组的类型必须一致;例[8-9]求一个n×n方阵所有元素之和;8.2函数和过程的参数传递8.2.3数组及对象作为过程的参数1、数组作为参数例[8-9]求一个n×n方阵所有元素之和;解题思路:利用随机函数产生一个6阶方阵a,并保存在二维数组中,将此数组作为参数传给函数suma,在函数suma中计算方阵的元素之和;在函数过程内部使用Ubo

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功