您好,欢迎访问三七文档
2019/12/192内容☞7.1过程的概念☞7.2函数过程☞7.3子程序过程☞7.4参数传递☞7.5递归☞7.6变量、过程的作用域☞7.7常用算法(三)第7章-过程2019/12/19机械工业出版社37.1过程的概念7.1.1引例【例7-1】编写求组合数值的程序,运行界面如图7-1所示。图7-1【例7-1】运行界面第7章-过程2019/12/19机械工业出版社47.1.1引例分析:根据求组合数的公式,这里需要3次使用计算阶乘的运算来计算组合数,而每一次运算使用For-Next循环。编写程序代码如下:PrivateSubCommand1_Click()DimnAsInteger,mAsInteger,iAsIntegerDimfnAsLong,fmAsLong,fn_mAsLong,cAsLongn=Val(Text1.Text)'输入nm=Val(Text2.Text)'输入m第7章-过程2019/12/19机械工业出版社57.1.1引例fn=1Fori=1Ton'求n的阶乘fn=fn*iNextifm=1Fori=1Tom'求m的阶乘fm=fm*iNexti第7章-过程2019/12/19机械工业出版社67.1.1引例fn_m=1Fori=1Ton–m'求n-m的阶乘fn_m=fn_m*iNextic=fn/fm/fn_m'计算组合数C(n,m)Text3.Text=cEndSub第7章-过程2019/12/19机械工业出版社77.1.1引例从以上程序代码可以看出:(1)程序中计算阶乘的代码重复了3次。(2)这3段代码具有相同的功能和结构,只是所用变量、循环的执行次数不同。可以采用以下方法解决:(1)把重复使用的、具有相同功能和结构形式的程序段编写成类似于系统标准过程一样的用户自定义过程。(2)在需要时可以像使用标准过程一样调用它。第7章-过程2019/12/19机械工业出版社87.1.1引例根据题意,将计算阶乘的代码段定义为一个函数过程Fact,然后在命令按钮的单击事件过程中3次调用Fact完成计算组合数的任务。'定义求k的阶乘的函数PublicFunctionFact(ByValkAsInteger)AsLongDimiAsInteger,fAsLongf=1Fori=1Tok'求k的阶乘f=f*iNextIFact=fEndFunction第7章-过程2019/12/19机械工业出版社97.1.1引例PrivateSubCommand1_Click()DimnAsInteger,mAsInteger,cAsLongn=Val(Text1.Text)'输入n,mm=Val(Text2.Text)c=Fact(n)/Fact(m)/Fact(n-m)'调用函数Fact计算组合数C(n,m)Text3.Text=cEndSub第7章-过程2019/12/19机械工业出版社107.1.1引例从以上程序代码中可以看出,使用自定义过程进行程序设计的优点在于:(1)简化程序设计将重复执行的操作写成过程后,程序变得更简洁,用户如同使用VisualBasic内部函数一样,在需要执行此操作的地方调用此过程。过程定义一次,可以多次复用。第7章-过程2019/12/19机械工业出版社117.1.1引例(2)便于调试和维护将一个庞大的程序划分为若干个独立的逻辑单元,调试每个单元的工作量将远远小于调试整个程序的工作量。当需要更新程序功能时,只需要改动相关过程即可。第7章-过程2019/12/19机械工业出版社127.1.2过程在结构化程序设计中,通常把一个大的程序按照功能划分为若干小的程序,每个小的程序完成一个确定的相对独立的功能,称这些小的程序为下层模块。如果把VisualBasic的应用程序的整个工程称为“程序”,则在很多情况下要把程序分成若干较小的具有相对独立功能下层模块,VisualBasic称这些模块为过程。第7章-过程2019/12/19机械工业出版社137.1.2过程在VisualBasic中,过程一般分为事件过程和通用过程两种。通用过程又可分为4种:分别是以Sub关键字开始的Sub(子程序)过程、以Function关键字开始的Function(函数)过程、以Property关键字开始的Property(属性)过程和以Event关键字开始的Event(事件)过程。本章主要介绍通用过程中的Sub过程和Function过程。第7章-过程2019/12/19机械工业出版社147.2函数过程VisualBasic提供了丰富的内部函数供用户使用,如转换函数Val(string)、数学函数Log(数值型表达式),使用这些函数时,只需要写出函数名称,并指定相应的参数就能得到函数值。而当在程序中重复处理某一函数关系,又没有现成的内部函数可以使用时,程序员可以自己定义函数,并采用与调用内部函数相同的方法来调用自定义函数。第7章-过程2019/12/19机械工业出版社157.2.1函数过程的定义1.直接在代码窗口中定义打开代码窗口直接输入函数过程,其语法格式如下:[Public|Private][Static]Function函数过程名([形参表])[As函数类型]语句组[函数过程名=表达式][ExitFunction]EndFunction第7章-过程2019/12/19机械工业出版社167.2.1函数过程的定义2.使用【添加过程】命令(1)打开代码窗口,执行【工具】菜单中的【添加过程】命令,打开如图7-4所示的【添加过程】对话框。图7-4【添加过程】对话框第7章-过程2019/12/19机械工业出版社177.2.1函数过程的定义(2)在【名称】文本框中输入过程名(例如Afirm),对应于直接在代码窗口中定义的函数过程名。(3)在【类型】选项内选择要建立的过程的类型,选择【函数】,对应于直接在代码窗口中定义的Function关键字。(4)在【范围】栏内选择过程的使用范围,对应于直接在代码窗口中定义的[Public|Private]。第7章-过程2019/12/19机械工业出版社187.2.1函数过程的定义(5)可选项:如果选择【所有本地变量为静态变量】复选框,对应于直接在代码窗口中定义的[Static]。(6)按【确定】按钮后,代码窗口中生成的函数过程的定义如图7-5所示,此时加入参数,输入程序代码即可。图7-5函数过程定义第7章-过程2019/12/19机械工业出版社197.2.1函数过程的定义【例7-2】定义函数过程以判定某年是否为闰年。分析:判断某年是否为闰年的方法是:如果年份能被4整除且不能被100整除或年份能被400整除,则此年为闰年。函数过程可以使用【添加过程】命令定义,也可以直接在代码窗口中定义。假定函数过程的名称为Lyear,范围为私有的。根据题意,需要添加一个整型参数year以输入年份。另外,函数过程需返回字符串型的判定结果数据,因此,函数的类型应为String。第7章-过程2019/12/19机械工业出版社207.2.1函数过程的定义函数过程Lyear的定义如下:PrivateFunctionLyear(yearAsInteger)AsStringDimyAsStringIfyearMod4=0AndyearMod1000OryearMod400=0Theny=year&年是闰年!Elsey=year&年不是闰年!EndIfLyear=yEndFunction第7章-过程2019/12/19机械工业出版社217.2.2函数过程的调用定义好函数过程后,就可以在应用程序的其他地方调用这个函数过程,调用时需将一些参数传递给函数过程,函数过程利用这些参数进行计算,然后通过函数过程名将结果返回。函数过程的调用与内部函数的调用相同。格式如下:函数过程名([实参表])第7章-过程2019/12/19机械工业出版社227.2.2函数过程的调用【例7-3】设计运行界面如图7-6所示应用程序。要求用户单击命令按钮时,调用【例7-2】中定义的函数过程,将Text1中输入的年份的判定结果输出到Text2中。图7-6【例7-2-2】运行界面第7章-过程2019/12/19机械工业出版社237.2.2函数过程的调用分析:在命令按钮Command1的单击事件中添加调用Lyear函数的代码,并将函数返回值赋值给Text2.Text,Lyear函数的定义见【例7-2】。编写程序代码如下:PrivateSubCommand1_Click()Text2.Text=Lyear(Val(Text1.Text))'调用函数LyearEndSub第7章-过程2019/12/19机械工业出版社247.2.2函数过程的调用【例7-4】设计应用程序,求任意两个整数的最大公约数,程序的运行界面如图7-7所示。图7-7【例7-4】运行界面第7章-过程2019/12/19机械工业出版社257.2.2函数过程的调用分析:利用辗转相除法求两个整数的最大公约数。将求任意两个整数的最大公约数定义为一个函数过程,在此函数过程中定义两个整型参数以输入要求最大公约数的两个整数,另外,函数过程需返回整型的最大公约数,定义函数的类型为整型。在“求最大公约数”按钮的单击事件中,调用此函数过程。第7章-过程2019/12/19机械工业出版社267.2.2函数过程的调用编写程序代码如下:'求最大公约数的函数过程PrivateFunctiongcb(xAsInteger,yAsInteger)AsIntegerDimrAsInteger'r为余数DoWhiley0r=xModyx=yy=rLoopgcb=xEndFunction第7章-过程2019/12/19机械工业出版社277.2.2函数过程的调用PrivateSubCommand1_Click()DimaAsInteger,bAsIntegera=Val(Text1.Text)b=Val(Text2.Text)Text3.Text=Str(gcb(a,b))'调用函数过程gcd求最大公约数EndSub第7章-过程2019/12/19机械工业出版社287.3子程序过程在VisualBasic中,当需要自定义过程返回一个值时,使用Function过程很容易实现,但在实际应用中,可能仅需要过程完成某种功能或需要返回多个值,在这种情况下就需要使用子程序过程(简称为子过程),即Sub过程。第7章-过程2019/12/19机械工业出版社297.3.1子程序过程的定义1.直接在代码窗口中定义打开代码窗口直接输入子程序过程,其格式如下:[Public|Private][Static]Sub过程名([形参表])语句组[ExitSub]EndSub第7章-过程2019/12/19机械工业出版社307.3.1子程序过程的定义2.使用【添加过程】命令(1)打开代码窗口,执行【工具】菜单中的【添加过程】对话框。(2)在【名称】文本框中输入过程名(例如Area),对应于直接在代码窗口中定义的过程名。(3)在【类型】选项内选择要建立的过程的类型,选择“子程序”,对应于直接在代码窗口中定义的Sub。(4)在【范围】栏内选择过程的使用范围,对应于直接在代码窗口中定义的[Public|Private]。第7章-过程2019/12/19机械工业出版社317.3.1子程序过程的定义(5)可选项【所有本地变量为静态变量】复选框的作用和函数过程中的作用相同,对应于直接在代码窗口中定义的[Static]。(6)按【确定】按钮后,代码窗口中生成的子程序过程的定义如图7-8所示,此时加入参数,输入程序代码即可。图7-8子程序过程定义第7章-过程2019/12/19机械工业出版社327.3.1子程序过程的定义【例7-5】定义能在窗体上打印如下n行数字金字塔的子程序过程。1121123211234321分析:假定子程序过程的名称为PPrint,而范围选为私有的。根据题意,需要添加一个整型参数n以输入打印的行
本文标题:第7章过程.
链接地址:https://www.777doc.com/doc-2112194 .html