




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元八过程在VB程序设计中,除进行界面设计和算法设计外,主要工作是编写程序代码,而编写代码时根据应用的复杂程度,往往要将应用按功能及其他目的划分为若干个模块,而对每个模块按照情况还可以继续细分为子模块,通过VB提供的自定义过程将模块定义为一个个过程,供事件过程多次调用。在前面的各章节中,我们已多次使用了事件过程,这样的过程构成了VB应用程序的主体。而用户自定义的过程(也称为通用过程),可以单独建立,供事件过程或其他过程调用。在VB中根据过程是否有返回值,可把通用过程分为两类,即子过程和函数过程。单元八过程事件过程1子过程2函数过程3过程间参数的传递4过程的嵌套与递归5常用算法实例68.1事件过程1.事件过程的运行机制事件过程由VB自行声明,用户不能增加或删除。当用户对某个对象发出一个动作时,Windows会通知VB产生了一个事件,VB会自动地调用与该事件相关的事件过程。即当对象对一个事件的发生做出认定时,VB便自动用相应于事件的名字调用该事件的过程。由于名字在对象和代码之间建立了联系,所以说事件过程是依附于窗体和控件上的。2.事件过程的语法格式
控件事件过程的语法格式为:PrivateSub〈控件名〉_〈事件名〉([形参表])[语句组]EndSub
窗体事件过程的语法为:PrivateSubForm_〈事件名〉([形参表])[语句组]EndSub返回目录8.2子过程当有几个不同的事件过程需要执行相同的操作时,为了简化程序,可以将公共语句放入分离开的子过程(通用过程)中,并由事件过程来调用它。这样不必重复编写代码,维护程序也较容易。子过程不与任何特定的事件相联系,只能由别的过程来调用,它可以存储在窗体或标准模块中。8.2.1子过程的程序设计实例分别计算阶乘5!,6!,8!,以及它们的和5!+6!+8!。
Subfact(mAsInteger,totalAsLong)DimiAsIntegertotal=1Fori=1Tomtotal=total*iNextiEndSubPrivateSubCommand1_Click(IndexAsInteger)DimaAsInteger,bAsInteger,cAsInteger,sAsLong,totAsLongn=IndexSelectCasenCase0a=5Callfact(a,tot)Label1.Caption=a&"!="&totCase1a=6Callfact(a,tot)Label1.Caption=a&"!="&totCase2a=8Callfact(a,tot)Label1.Caption=a&"!="&totCase3a=5:b=6:c=8Callfact(a,tot)s=totCallfact(b,tot)s=s+totCallfact(c,tot)s=s+totLabel1.Caption=a&"!+"&b&"!+"&c&"!="&sEndSelectEndSub8.2.2子过程程序设计的相关知识1.建立子过程的两种方法
(1)使用“添加过程”对话框。打开代码编辑窗口,单击“工具”菜单→“添加过程”命令,打开“添加过程”对话框。在“名称”文本框中输入过程名“fact”,从“类型”组中选中“子程序”项,从“范围”组中选中“公有的”项,单击“确定”按钮。
(2)在“代码”编辑窗口中输入。
[Private|Public][Static]Sub〈过程名〉([形参表])[语句组][ExitSub][语句组]EndSub2.调用子过程的两种方法
(1)使用Call语句Call〈过程名〉([实参表])(2)直接使用过程名〈过程名〉[〈实参表〉]例如,下面两个语句都调用fact子过程:Callfact(5)fact5返回目录8.3函数过程函数是过程的另一种形式,当过程的执行要返回一个值时,使用函数过程更方便。VB中包含了许多内部函数,如Int、Sqr等。用户在编写程序时,只需写出一个函数名并给定参数就能得出函数值。但是,如果在程序中需要多次用到某一公式或要处理某一函数关系,而又没有现成的内部函数可用时,可以自己编写Function(函数)过程。8.3.1函数过程的程序设计实例利用函数过程,求1!+2!+3!+4!+5!+6!Functionfact(xAsInteger)AsLongDimpAsLong,iAsIntegerp=1Fori=1Toxp=p*i
Nextifact=pEndFunctionPrivateSubCommand1_Click()DimsumAsLong,iAsInteger
Fori=1To6
sum=sum+fact(i)
NextiLabel2.Caption=sumEndSub8.3.2函数过程程序设计的相关知识1.定义函数过程的两种方法
(1)使用“添加过程”对话框。打开“添加过程”对话框,在“类型”中选择“函数”,单击“确定”按钮。
(2)在“代码”编辑窗口输入。[Private|Public][Static]Function〈函数名〉([形参表])[As类型][语句组][〈函数名〉=〈表达式〉][ExitFunction][语句组][〈函数名〉=〈表达式〉]EndFunction2.调用函数过程的两种方法
(1)直接调用在表达式中直接写上它的名字。例如,已编有计算圆面积的函数过程cir(),调用方法为:MsgBox"圆面积为:"&cir(10)(2)用Call语句调用利用下面的代码都调用同一个函数过程:Callcir(10)area103.调用无参函数的方法函数可以没有参数,在调用无参函数时不发生虚实结合。调用无参函数得到一个固定的值,如下述无参函数:Functionaa="ABCD"EndFunction
可如下调用: Printa返回目录8.4过程间参数的传递8.4.1参数的基本概念1.参数的分类在VB中根据参数所在的过程,将参数分为形式参数和实际参数。形式参数是在子过程和函数过程的定义中出现的变量名;实际参数则是在调用子过程和函数过程时,传送给子过程和函数过程的常数、变量、表达式或数组。在VB中,通常把形式参数叫做“形参”,把实际参数叫做“实参”。2.形参表形参表中的各个变量之间用逗号分隔,表中的变量可以是:
(1)后面跟有左、右圆括号的数组名。
(2)除定长字符串之外的合法变量名。3.实参表实参表中的各项用逗号隔开,实参可以是:
(1)常量;
(2)表达式;
(3)合法的变量名;
(4)后面跟有左、右括号的数组名。4.形参与实参的对应关系
实参调用过程:Callts(50,avrg(),"hello",a,b)↓↓↓↓↓定义过程:Subts(nAsInteger,a()AsSingle,bAsrectype,cAsString,dAsSingle)
形参
8.4.2传址与传值1.传址
(1)传址就是让过程根据变量的内存地址去访问实际变量的内容,即形参与实参使用相同的内存地址单元,这样通过子过程就可以改变变量本身的值。
(2)在传址调用时,实际参数必须是变量,常量或表达式无法传址。
(3)系统缺省按地址传递参数。Subtry(xAsInteger,yAsInteger)x=x+2
y=y+3
Print"x=";x,"y=";y EndSubPrivateSubForm_Click()DimaAsInteger,bAsIntegera=5
b=6
trya,b
Print"a=";a,"b=";bEndSub2.传值
(1)传值就是通过值传送实际参数,即传送实参的值而不是传送它的地址。
(2)当要求变量按值传送时,可以用下面的方法:①把变量变成一个表达式。把变量转换成表达式的最简单的方法就是把它放在括号内。例如把变量用括号括起来,把它变为一个表达式,如“(a)”。②定义过程时用ByVal关键字指出参数是按值来传递的,例如:SubPostAc(ByValxAsInteger)x=x+2EndSubSubtry(ByValxAsInteger,ByValyAsInteger)x=x+2
y=y+3
Print"x=";x,"y=";y EndSubPrivateSubForm_Click()DimaAsInteger,bAsIntegera=5
b=6
trya,b
Print"a=";a,"b=";b EndSub返回目录主程序调用a
EndSub
a调用b
EndSub
bEndSub8.5过程的嵌套与递归8.5.1过程的嵌套调用主程序可以调用子过程,在子过程中还可以调用另外的子过程,这种程序结构称为过程的嵌套。输入参数n,m,求组合数的值。PrivateFunctionfact(x)p=1Fori=1Toxp=p*iNextifact=p EndFunctionPrivateFunctioncomb(n,m)comb=fact(n)/(fact(m)*fact(n–m)) EndFunctionPrivateSubCommand1_Click()m=Val(Text1.Text)n=Val(Text2.Text)Ifm>nThenMsgBox"输入数据不正确!",0,"请检查!"
ExitSub
EndIfLabel2.Caption="组合数是:"&comb(n,m)EndSub
8.5.2过程的递归利用递归调用计算n!,。PrivateFunctionfact(n)AsDoubleIfn>0Then
fact=n*fact(n-1)Elsefact=1EndIfEndFunctionPrivateSubText1_KeyPress(KeyAsciiAsInteger)DimnAsInteger,mAsDoubleIfKeyAscii=13Thenn=Val(Text1.Text0)Ifn<0Orn>20ThenMsgBox("非法数据!"):ExitSubm=fact(n)Text2.Text=Format(m,"!@@@@@@@@@@")Text1.SetFocusEndIfEndSub返回目录8.6常用算法实例8.6.1将常用公式设计为子过程
编写一个计算矩形面积的Sub过程,然后调用该过程计算矩形面积。Subrecarea(rlen,rwid)Dimareaarea=rlen*rwid
MsgBox"矩形的面积是:"&areaEndSubPrivateSubForm_click()Dima,ba=InputBox("请输入矩形面积的长度:")b=InputBox("请输入矩形面积的宽度:")
recareaa,b
EndSub8.6.2利用过程函数输出特定的图形PrivateFunctionstri(nAsInteger,fAsString)p=""Fori=1Tonp=p&""&fNextstri=p EndFunctionPrivateSubForm_Click()DimfAsString*1f=InputBox("显示的字符:","请输入","$")
Iff=""Thenf="$"ClsPrintForn=1To7
PrintTab(2*n+2);
Printstri(15–2*n,f);
PrintSpc(8);
Printstri(2*n–1,f);
NextEndSub8.6.3递归问题
有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2个人大2岁。问第2个人,说比第1个人大2岁。最后问第1个人,他说是10岁。请问第5个人有多大岁数。PrivateFunctionage(nAsInteger)AsIntegerIfn=1Thenage=10
Elseage=age(n–1)+2EndIfEndFunctionPrivateSubForm_Load()Label2.Caption="答案:第五个人的岁数是"&age(5)EndSub8.6.4加密、解密问题
实现英语单词或短语的加密∕解密操作。加密∕解密的基本原则是:把英语单词或短语中每个字符的ASCII码加上2,使其变为另外一个字符。例如“ABCDE”,每个字符的ASCII码加2,变为“CEDFG”,从而对原来的单词或短语“加密”。Functionen(inpAsString)DimiAsIntegerDimsoutAsString,scurrentAsString,snewAsStringi=Len(inp)Forx=1Toiscurrent=Mid$(inp,x,1)snew=Chr$(Asc(scurrent)+2)sout=sout&snew
Nextxen=sout EndFunctionFunctionde(inpAsString)DimiAsIntegerDimsoutAsString,scurrentAsString,snewAsStringi=Len(inp)Forx=1Toiscurrent=Mid$(inp,x,1)
snew=Chr$(Asc(scurrent)–2)
sout=sout&snew
Nextxde=soutEndFunctionDimsphAsStringPrivateSubCommand1_Click()Text1.Text=""
Text1.SetFocusEndSubPrivateSubCommand2_Click()DimsenAsStringsen=en(Text1.Text)
Label1.Caption=sen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国紫草种植行业前景研究与投资战略报告
- 2021-2026年中国小型蒸汽轮机市场全面调研及行业投资潜力预测报告
- 2025-2030年中国酱腌小米辣项目投资可行性研究分析报告
- 中国胎儿监护仪行业发展概况及行业投资潜力预测报告
- 2024-2025学年高中历史第5单元中国近代社会生活的变迁第16课大众传媒的变迁学案新人教版必修2
- 2024-2025学年高中语文模块复习回眸基础练含解析新人教版必修5
- 2024-2025学年新教材高中数学第五章统计与概率5.4统计与概率的应用课后篇巩固提升新人教B版必修第二册
- 2025年中国水上休闲行业发展监测及投资战略规划研究报告
- 中国水果刀钥匙扣项目投资可行性研究报告
- 菱镁矿项目可行性分析报告(模板参考范文)
- 新能源汽车三电系统培训教材
- 慢性乙型肝炎防治指南(2022年版)解读
- DB43T 578-2016 锑冶炼砷碱渣无害化处理技术规范
- 建筑与市政工程地下水控制技术规范 JGJ111-2016 培训
- 2024年汽车装调工技能竞赛理论考试题库(含答案)
- (新版)区块链应用操作员职业技能竞赛理论考试题库-上(单选题)
- 生猪屠宰兽医卫生检验人员理论考试题库及答案
- 高中英语课程设计目的
- 2024-2025学年北京一零一中学初三期初测试数学试题含解析
- 2024年12月大学英语四级CET-4真题试卷
- 高中生物学选择性必修一测试卷及答案解析
评论
0/150
提交评论