版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualBasic程序设计
主讲教师:杜云
---西南大学计算机与信息科学学院
E-mail:Dyun_j
第6章过程第6章过程第6章过程过程概述将程序分割成较小的逻辑部件就可以简化程序设计任务。称这些部件为过程。过程可用于压缩重复任务,例如,压缩频繁的计算。例如:求1!+2!+…+n!第6章过程求1!+2!+3!+…+N!DimiAsIntegerDimjAsIntegersum=0n=InputBox(请输入一个数N)Fori=1Tonk=1Forj=1Toik=k*jNextjsum=sum+kNextiPrint"1!+2!+3!+..."&n&"!"&"="&sum一般的方法第6章过程PublickAsLongPublicSubfact(ByRefnAsInteger)k=1Forj=1Tonk=k*iNextEndSub求阶乘的过程n=InputBox("请输入一个数n")sum=0Fori=1TonCallfact(i)sum=sum+kNextPrint"1!+2!+3!+..."&n&"!"&"="&sum调用过程求1!+2!+…n!DimnAsIntegerDimsumAsLongDimiAsInteger第6章过程1/1!+2/2!+…N/N!PrivateSubCommand2_Click()n=Val(InputBox("请输入一个数n"))sum=0Fori=1TonCallfact(i)sum=sum+i/kNext
Print"1/1!+2/2!+..."&n&"/"&n&"!"&"="&sumEndSub第6章过程用过程编程有两大好处:
1:过程可使程序划分成离散的逻辑单元,每个单元都比无过程的整个程序容易调试。
2:一个程序中的过程,往往不必修改或只需稍作改动,便可以成为另一个程序的构件。
VB中有两类过程,一类是事件过程,另—类是通用过程。事件过程是由系统提供的、不需要用户创建。通用过程是由用户根据自己的需要定义和编写的、可供事件过程多次调用的程序段。通用过程又可分为:
Sub子过程
Function过程(函数过程)第6章过程6.2SUB子过程的定义与调用Sub子过程格式:[Private|Public][Static]Sub过程名[(参数表)]
语句组
[ExitSub]
语句组EndSub其创建方法有两种:一是在代码窗口中直接按规定的格式编写;二是利用VB的过程添加工具生成过程框架,然后编写过程体。
可以将子过程放入标准模块、类模块和窗体模块中。按照缺省规定,所有模块中的子过程为Public(公用的),这意味着在应用程序中可随处调用它们。第6章过程2:使用《添加过程》对话框创建过程:打开代码窗口工具菜单添加过程第6章过程事例:编写求N的累加和的SUB过程PrivateSubCommand2_Click()Text1.Text=""Text2.Text=""Text1.SetFocusEndSubPublicsAsIntegerPublicSubsumzr(nAsInteger)DimiAsIntegers=0Fori=1Tons=s+iNextEndSubPrivateSubCommand1_Click()Callsumzr(Val(Text1.Text))Text2.Text=sEndSub第6章过程PublicSubsumzr(nAsInteger,sAsInteger)DimiAsIntegers=0Fori=1Tons=s+iNextEndSubPrivateSubCommand1_Click()DimnAsInteger,sAsIntegerCallsumzr(Val(Text1.Text),s)Text2.Text=sEndSub第6章过程3:过程的调用使用Call语句格式:CALL<过程名>(实际参数)直接使用过程名格式:<过程名>[实际参数]
第6章过程过程编写事例:
该过程的功能是让计算机发出”梆梆梆”的声音,发声次数由调用过程时传递的参数控制.该过程带有一个形式参数.Subbeepsound(nAsInteger)DimiAsIntegerDimjAsDoubleFori=1TonBeepForj=1To100000NextjNextiEndSub分析该过程的作用范围?注意过程创建的方法、创建的位置、参数的使用第6章过程调用beepsound过程PrivateSubCommand1_Click()Callbeepsound(Val(Text1.Text))EndSub注意调用格式PrivateSubCommand1_Click()beepsoundVal(Text1.Text)EndSub第6章过程
例6.4SubMyMove(ByValTag%)Label1.Left=Label1.Left+Tag*100Label1.Top=Label1.Top+Tag*100EndSub
'事件过程调用MyMove:PrivateSubCommand1_Click()Dimk%IfRnd>0.5Thenk=1Elsek=-1MyMove(k)EndSub第6章过程事例:编写求N!的SUB过程PublicSubfact(nAsInteger,sAsLong)DimiAsIntegers=1Fori=1Tons=s*iNextEndSub事例:编程计算1!+2!+…+n!PrivateSubCommand1_Click()DimiAsInteger,sAsLong,sumAsLongFori=1ToVal(Text1.Text)Callfact(i,s)sum=sum+sNextText2.Text=sumEndSub第6章过程VisualBasic包含内部的函数,如Sqr、Cos或Chr。此外,还可用Function语句编写自己的Function过程。1:函数过程的语法是[Public|Private][Static]Function函数名([形参表])[As数据类型]
语句组
[函数名=表达式][ExitFunction]
语句组
[函数名=表达式]EndFunction与Sub过程一样,Function过程也是一个独立的过程,可读取参数、执行一系列语句并改变其参数的值。与子过程不同,Function过程可返回一个值到调用的过程。6.1Function过程第6章过程事例:编写求N!的FUNCTION过程PublicKAsLongFunctionFACT(NAsInteger)AsLongK=1ForI=1ToNK=K*INextIFACT=KEndFunctionPrivateSubCommand1_Click()DimNAsIntegerDimSAsLongN=Val(Text1.Text)S=FACT(N)Text2.Text=SEndSub第6章过程2Function过程的调用格式:变量名=Function过程名([参数列表])PrivateSubCommand1_Click()DimPRAsBoolean,MAsLongM=Val(Text1.Text)PR=Prime(M)IfPR=TrueThenPicture1.PrintStr(M)+"是素数"IfPR=FalseThenPicture1.PrintStr(M)+"不是素数"EndSubOptionExplicitPrivateFunctionPrime(MAsLong)AsBooleanDimiAsIntegerPrime=True'向函数名赋值IfM>2ThenFori=2ToSqr(M)IfMModi=0ThenPrime=False:ExitForNextEndIfEndFunction注意调用格式,分析函数返回值的传递第6章过程例编写求1+2+3+…..+N的函数过程PublicmAsLongFunctionfuncsum(nAsInteger)AsLongm=0Fori=1Tonm=m+iNextfuncsum=mEndFunctionPrivateSubCommand2_Click()DimnAsIntegerDimsumAsLongn=Val(Text1.Text)sum=funcsum(n)Text2.Text=sumEndSub第6章过程分别用SUB过程和FUNCTION过程计算
S=1!+2!+…+N!PrivateSubForm_Load()ption="输入一个数N"ption="1!+2!+...+N!="Text1.Text=""Text2.Text=""ption="计算"EndSubOptionExplicitPublicSubFACT(nAsInteger,sAsLong)DimiAsIntegers=1Fori=1Tons=s*iNextEndSub该过程可以放在标准模块中PrivateSubCommand1_Click()DimnAsInteger,sAsLongDimiAsInteger,sumAsLongn=Val(Text1.Text)Fori=1TonCallFACT(i,s)sum=sum+sNextText2.Text=sumEndSub调用过程计算阶乘累加和第6章过程分别用SUB过程和FUNCTION过程计算
S=1!+2!+…+N!PublicFunctionfact1(nAsInteger)AsLongDimiAsInteger,sAsLongs=1Fori=1Tons=s*iNextfact1=sEndFunction注意函数过程如何才能实现返回值到调用过程PrivateSubCommand1_Click()DimnAsInteger,iAsIntegerDimxAsLongDimsumAsLongn=Val(Text1.Text)Fori=1Tonx=fact1(i)sum=sum+xNextText2.Text=sumEndSub第6章过程FunctionArea(x!,y!,z!)AsSingleDimc!c=(x+y+z)/2Area=Sqrt(c*(c-x)*(c-y)*(c-z))EndFunction例6.1'在事件过程中输入数据,分别调用计算三角形面积的函数过程,然后显示总面积SubForm_Click()Dima!,b!,c!,d!,e!,f!,g!,s1!,s2!,s3!a=InputBox("输入a"):b=InputBox("输入b"):c=InputBox("输入c")d=InputBox("输入d"):e=InputBox("输入e"):f=InputBox("输入f")g=InputBox("输入g")s1=Area(a,b,c)s2=Area(c,d,e)s3=Area(e,f,g)MsgBox("多边形面积="&s1+s2+s3)EndSub第6章过程
Functiongcd%(ByValm%,ByValn%)Ifm<nThent=m:m=n:n=tr=mModnDoWhile(r<>0)m=n:n=r:r=mModnLoopgcd=nEndFunction例6.2辗转相除法是利用以下性质来确定两个正整数a和b的最大公因子的:1.a÷b,令r为所得余数(0≤r<b)。若r=0,算法结束;b即为答案。2.互换:置a←b,b←r,并返回第一步。第6章过程传递参数的方式有两种:6.3参数的传递按地址传递参数按值传递参数第6章过程形式参数与实际参数sub过程和function函数过程中的参数称为形式参数(简称形参)在程序中调用sub过程和function函数过程时的参数称为实际参数(简称实参)
第6章过程1.按位置传送
按位置传送就是实参的次序与形参的次序应匹配,位置次序一一对应。
2.传值与传址ByVal:可选项。表示该参数按值传递。此时实参的值不随形参值的变化而变化。
ByRef:可选项。表示该参数按地址传递。此时实参的值随形参值的变化而变化,ByRef是VisualBasic的默认选项。
CallArea(50,20)SubArea(Length,Width)第6章过程按地址传递参数是把实参变量的内存地址传递给形参变量。在定义过程时,用ByRef说明的形参,或缺省传递方式说明,都是按地址传递。PublicFunctionf1(ByRefxAsInteger)AsIntegerx=x*xf1=xEndFunctionPrivateSubCommand1_Click()DimnAsIntegerDimsAsIntegern=Val(Text1.Text)s=f1(n)Print"s=";sPrint"n=";nEndSub由于参数按地址传递,过程中对形式参数的改变将改变实际参数的值,?程序的输出结果是????第6章过程例如,编写一个交换两变量值的函数过程Swap:PrivateFunctionSwap(xAsInteger,yAsInteger)DimtmpAsIntegertmp=x:x=y:y=tmpEndFunction‘
编写窗体的Click事件过程,调用该函数过程:PrivateSubForm_Click()DimaAsInteger,bAsIntegera=10:b=15Print"调用交换函数过程前:a=";a,"b=";bSwapa,bPrint"调用交换函数过程后:a=";a,"b=";bEndSub分析参数传递方式对实际参数的影响第6章过程按值传递参数按值传递参数是把实参变量的值传递给形参变量,实参变量的值在过程调用前后保持不变。定义过程时用ByVal关键字指出参数是按值来传递的。例如:SubFun(ByValxasInteger)
……
EndSubPublicFunctionf2(ByValx)x=x*xf2=xEndFunctionPrivateSubCommand1_Click()DimnAsIntegerDimsAsIntegern=Val(Text1.Text)s=f2(n)Print"s=";sPrint"n=";nEndSub由于参数按值传递,过程中对形式参数的改变不会改变实际参数的值,?程序的输出结果是????第6章过程例如,把上面调用交换变量值的函数过程Swap修改为按值传递参数:PrivateFunctionSxAsInteger,ByValyAsInteger)DimtmpAsIntegertmp=x:x=y:y=tmpEndFunctionPrivateSubForm_Click()DimaAsInteger,bAsIntegera=10:b=15Print"调用交换函数过程前:a=";a,"b=";bSwapa,b'按值传递参数
Print"调用交换函数过程后:a=";a,"b=";bEndSub分析参数传值方式对实际参数的影响???显示按值传递参数没有能实现两变量值的交换。第6章过程本章作业分析第6章过程1PublicSubmysub4(xAsInteger)x=3*x-1Ifx<5Thenx=x+9PrintxEndSubPrivateSubForm_Click()x=1mysub43+XPrintxEndSub注意调用过程是把3+X的值4传递给形式参数X,而非将实际参数X传递个形式参数X,请分析输出结果将调用过程改为:PrivateSubForm_Click()DimxAsIntegerx=1
mysub4xPrintxEndSub
分析结果???第6章过程PrivateSubForm_Click()DimbAsInteger,yAsIntegerCallMysub2(3,b)y=b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 低压三相异步电机检修电工理论考试参考题库-含答案
- 糖尿病酮症酸中毒(DKA)实验室检查诊断与抢救监测指标
- 有关毒物排泄的试题及答案梳理
- 常见导管相关试题与答案
- 水厂机房设备操作试题及答案
- 1.1我们身边的地理课件(共60张) 湘教版(2024)七年级地理上册
- 2026天津市北辰区中医医院第四批合同制人员招聘2人笔试备考题库及答案详解
- 2026年安徽省交通运输厅所属事业单位公开招聘工作人员11人考试参考题库及答案详解
- 2026年石棉县网格员招聘考试模拟试题及答案解析
- 2026年镇江句容市下蜀镇临时性公益性岗位招聘1人笔试参考题库及答案详解
- 2025年四川省机关事业单位工人技术等级考试(计算机系统操作工·中级)历年参考题库含答案详解(5卷)
- 2025成人高考专升本《日语》试题及答案
- 新初一年级第一次家长会校长发言:家校携手共启新程
- 电子焊接培训课件
- 《人工智能数据服务》高职全套教学课件
- TCAGHP025-2018场地地质灾害危险性评估技术要求(试行)
- 2024年版《煤矿安全生产标准化管理体系基本要求及评分方法》解读
- 糖尿病口服降糖药的分类
- 统计学:假设检验基础
- 肛肠科科普知识宣讲主题讲座培训课件
- 个人简历模板 求职简历模板(10套完整版)
评论
0/150
提交评论