已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-,VB语言-过程,-,maincontents,子过程的定义与调用,函数过程的定义与调用,参数传递,重点,过程的递归调用,难点,变量的作用范围,-,验证哥德巴赫猜想:任一大于2的偶数都可写成两个质数之和。,-,过程(Procedure)是一组能够完成特定功能的代码,以一个名字来标识,用这个名字来调用。过程的两个重要作用:以大化小使程序具有清晰的模块化结构,便于多个程序员的协同工作。编写具有通用性的独立过程,便于重复调用,从而简化程序。过程分为:自定义子过程、函数过程、事件过程,-,自定义子过程:由程序员自己编写,用来求解特定重复任务的子过程。子过程的调用及返回:,5.1子过程的定义与调用,-,子过程的程序定义:Sub(形式参数表)ExitSub需要时提前退出子过程EndSub子过程的调用:使用Call关键字调用-Call过程名(实际参数表)例:callt(1,2)直接调用-过程名实际参数表例:t1,2,-,PrivateSubHello()定义名为Hello的无参数子过程MsgBox您好!五一节快乐!EndSubPrivateSubForm_Click()CallHello调用名为Hello的无参数子过程EndSub,例5.1无参数的“节日问候”通用子过程,-,PrivateSubCommand1_Click()CallHello(Text1,Text2,Text3)CallHelloText1,Text2,Text3EndSubPrivateSubHello(name1AsString,job1AsString,festivalAsString)DimaAsString,bAsStringa=您好!值此b=来临之际,向您和您的全家致以亲切的问候。MsgBoxname1cEndSubFunctionMaxValue(x!,y!)AsSingleMaxValue=IIf(xy,x,y)EndFunction,例5.3根据键盘输入的两个数值,调用MaxValue函数求得其中较大的一个,调用函数过程时应注意:函数过程的调用方式与标准函数相同,作为表达式中的一个部分被引用。引用时参数表必须放在括号内所使用的参数的个数、位置和类型必须与函数中的声明一致。,-,形式参数定义子过程和函数过程时,通常都会包括须从外部获取的参数,这些参数也称为形式参数。在过程被调用前,形式参数既不占有实际的存储空间,也没有值。实际参数在调用子过程或函数过程时,必须把要处理的数据提供给被调用的过程。这些数据称为实际参数,将实际参数传递给形式参数,由被调用的过程来处理。CallPost(6,8)实际参数SubPost(xAsSingle,yAsSingle)形式参数,5.3参数传递,-,参数的传递方式,按地址传递(ByRef)这是默认的参数传递方式。在被调用过程中对形式参数所做的任何修改,也就是对实际参数的修改。按值传递(ByVal)如果在过程定义时,形式参数前面用关键字ByVal界定,就是按值传递方式。被调用过程运行期间形式参数的任何变化,对实际参数不会产生任何影响。,-,PrivateSubForm_Click()DimaAsSingle,bAsSingle,cAsSinglea=InputBox(第一个直角边的值:)b=InputBox(第二个直角边的值:)CallHypotenuse(a,b)Print两直角边分别为:;a;bEndSubPrivateSubHypotenuse(x!,y!)DimcAsSinglex=x2:y=y2c=Sqr(x+y)Print直角三角形斜边的值=;cEndSub,例5.4计算直角三角形的斜边,按地址传递(ByRef),-,PrivateSubForm_Click()DimaAsSingle,bAsSingle,cAsSinglea=InputBox(第一个直角边的值:)b=InputBox(第二个直角边的值:)CallHypotenuse(a,b)Print两直角边分别为:;a;bEndSubPrivateSubHypotenuse(ByValx!,ByValy!)DimcAsSinglex=x2:y=y2c=Sqr(x+y)Print直角三角形斜边的值=;cEndSub,例5.4计算直角三角形的斜边,按值传递(ByVal),-,数组参数只能按地址传递,而不能按值传递。在过程定义时,若以数组作为过程的参数,则形式参数表中的数组名后要有一对空的圆括号表示。例:PrivateSubsum(x()AsInteger)而在过程调用时,实际参数表中的数组可以只用数组名表示,圆括号可以省略。,数组作为参数传递,-,PrivateSubForm_Click()Dima%(9),s%Print数组各元素的值为:Fori=0To9a(i)=Int(Rnd*10)Printa(i);NextiPrintPrint“总和为:;sum(a)EndSub,例5.5利用sum子过程求数组各元素的和,Functionsum%(x%()Fori=LBound(x)ToUBound(x)sum=sum+x(i)NextiEndFunction,-,验证哥德巴赫猜想:任一大于2的偶数都可写成两个质数之和。,实例练习,-,分析:(1)取出从起始数至终止数的每个数i(2)对每一个i,取2至i/2的每一个数j,分别判断j和i-j是否同时为素数(3)如果同为素数,则输出,-,主过程:PrivateSubCommand1_Click()Dimi%,j%a=Val(Text1):b=Val(Text2)IfaMod20Thena=a+1Fori=aTobStep2NextiEndSub,-,函数过程:PublicFunctionPrimeMagic(a%)AsBooleanDimtAsBooleant=True定义并竖起标旗Fori=2ToSqr(a)IfaModi=0Then如果有一个i能整除at=False则倒下标旗,表示a不是一个素数ExitForEndIfNextiIft=TrueThen根据标旗,返回True或FalsePrimeMagic=TrueElsePrimeMagic=FalseEndIfEndFunction,-,5.4过程的递归调用,1)递归的概念在过程自身结构内部来调用自身,称为递归调用,2)递归的分类直接递归:一个过程在执行时直接调用过程本身间接递归:过程A在执行时调用过程B,而过程B又调用过程A,-,例:有如下子过程Sub1,SubSub1()EndSub,-,SubSub1()Y=Sub1(n)EndSub,进行如下形式的调用,SubForm_Click()CallSub1EndSub,SubSub1()Y=Sub1(n)EndSub,过程的嵌套调用,-,例5.6用递归的方法计算Fac(n)=n!分析:根据阶乘的定义改写成递归的形式:n!=n*(n-1)!(n-1)!=(n-1)*(n-2)!1!=1由此得到递归公式如下:注意:递归的结束条件为n=0或1时,n!=1,-,主调过程OptionExplicitPrivateSubForm_Click()DimF%,x%x=InputBox()F=Fac(x)Printx;!=;FEndSub,函数过程FunctionFac%(nAsInteger)Ifn=0Orn=1ThenFac=1ElseFac=n*Fac(n-1)EndIfEndFunction,-,Fac(4)=4*Fac(3),Fac(3)=3*Fac(2),Fac(2)=2*Fac(1),Fac(1)=1,Fac(2)=1*2,Fac(3)=1*2*3,Fac(4)=1*2*3*4,递推,回归,-,函数过程FunctionFac%(n%)Ifn=0Orn=1ThenFac=1ElseFac=n*Fac(n-1)EndIfEndFunction,思考:若缺少该语句,程序运行结果将如何?,-,使用递归算法必须要注意以下两点:设定递归结束条件及结束时的值能用递归形式表示,并且递归向结束条件发展,-,运行下面的程序,当单击窗体之后,窗体上显示内容是什么?,PrivateSubForm_Click()Test2EndSubPrivateSubTest(x%)x=x*2+1Ifx6ThenCallTest(x)EndIfx=x*2+1Me.PrintxEndSub,第一次调用,2,x,x=2*2+1=56,x=11*2+1=23,Printx,23,x=23*2+1=47,Printx,47,-,斐波那契数列问题,“如果1对兔子每月能繁殖1对小兔子,而每对小兔在它出生后的第3个月里,又能繁殖1对小兔子,假定在不发生死亡的情况下,由1对初生的兔子开始,1年后能繁殖成多少对兔子?”,函数表达式:,-,斐波那契数列问题求解,PrivateSubForm_Click()Printfibonacci(12)EndSubFunctionfibonacci(xasinteger)Ifx=1orx=2thenfib=1Elsefibonacci=fibonacci(x-1)+fibonacci(x-2)EndIfEndFunction,-,Dim语句自动变量作用范围取决于其声明的位置Static语句静态变量作用范围只在于它定义的过程中,但过程结束后,变量值保存Private语句模块级变量只能在窗体/模块的通用声明段声明(过程外),作用范围是窗体/模块中的所有过程Public语句全局变量只能在窗体/模块的通用声明段声明(过程外),变量有效范围从声明点算起,生存期是整个应用程序,5.5变量的作用范围,-,VisualBasic应用程序的模块化结构,应用程序工程文件(.vbp),窗体模块(.frm)文件,类模块(.cls)文件,标准模块(.bas)文件,事件过程(sub),子过程(sub),函数过程(Function),子过程(sub),函数过程(Function),-,-,DimxAsInteger,yAsIntegerPrivateSubCommand1_Click()DimResultAsSinglex=10:Result=x-yPrintResultEndSubPrivateSubCommand2_Click()DimResultAsSingley=20:Result=x+yPrintResultEndSub,思考:先单击Command1,再单击Command2,输出?分析:先单击Command1X=10Result=10-0=10再单击Command2,Y=20Result=10+20=30,思考:先单击Command2,再单击Command1,输出?,-,通过文本框输入若干个值,每输入一个按Enter键,直到输入的值为100,输入结束,求输入数的平均值。,PrivateSubText1_Ke
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园防火安全教育课件
- 运动与安全班队会课件
- 意大利留学安全课件
- 佛山市南海区公立幼儿园、中小学教师招聘考试试题
- 《人力资源》模拟试题及答案
- 二建历届真题试卷及答案
- 先进制造技术应用基础知识考试试题及答案
- 塔吊附墙安全讲师课件
- MTSC2025 第十四届中国互联网测试开发大会(上海站):抖音鸿蒙客户端性能防劣化建设
- 创业策划方案文具
- 2024年金华义乌市水处理有限责任公司招聘笔试参考题库附带答案详解
- 蜀南竹海BambooSeaofYibin课件
- 电力安全事故应急处置和调查处理条例及南网调查规程
- 部编版八年级历史上册《第18课从九一八事变到西安事变》教学设计
- 2023年06月上海市浦东新区临港新片区文员招考聘用笔试题库含答案解析
- 企业合规管理全流程法律实务-1
- 雷氏夹校验方法
- GB 20055-2006开放式炼胶机炼塑机安全要求
- 高电压技术课件讲解
- 幼儿园家长助教课件
- 九年级生命生态安全教案(完整版)
评论
0/150
提交评论