程序与函数(简)_第1页
程序与函数(简)_第2页
程序与函数(简)_第3页
程序与函数(简)_第4页
程序与函数(简)_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章程序与函数

第7章程序与函数7-1模块化程序设计7-2程序与函数7-3程序与函数的变量范围7-4常用的内建函数7-5递归函数7-1模块化程序设计7-1-1模块的基础7-1-2程序与函数是一个黑盒子7-1-1模块的基础模块化是把大型功能切割成无数子功能,至于如何切割成一个个子功能的模块,属于结构化分析的范畴,最常使用的是由上而下设计方法。模组化程序设计是将大程序切割成一个个小程序。以VisualBasic来说,模块化的基本单位是程序与函数,因为模块可大可小,可能只拥有单一程序或函数,也可能是整个子功能的函式库。每一个程序和函数都解决一个小问题,等到所以小问题都解决了,使用程序与函数堆积成的软件系统或应用程序也就开发完成。7-1-2程序与函数是一个黑盒子-说明程序与函数是一个程序区块,执行程序与函数称为函数呼叫(FunctionsCall),一定有传回值的程序称为「函数」(Functions)。在呼叫时,我们并不需要了解程序与函数内部实际的程序代码,事实上,也不需要知道其细节。程序与函数如同一个「黑盒子」(BlackBox),只要知道如何使用黑盒子的「使用接口」(Interface)即可。7-1-2程序与函数是一个黑盒子-图例程序代码只知道呼叫程序时,需要传入的参数和取得传回值。它是程序函数和外部沟通的使用接口,一个对外的边界,实际程序代码内容是隐藏在使用接口后,我们将程序与函数实际内容的程序代码撰写称为「实作」(Implementation)。7-1-2程序与函数是一个黑盒子-撰写规则程序与函数的使用接口需要直接、良好定义和容易了解。在呼叫程序与函数时,并不需要知道任何有关内部实作的问题,唯一需要知道的是如何使用它的使用接口。在实作程序与函数时,并不用考虑或知道到底是谁需要使用它,只需满足使用接口定义的输入参数和传回值即可。7-1-2程序与函数是一个黑盒子-语法与语意程序与函数的「语法」(Syntax)是说明程序与函数需要传入何种数据型别的「参数」(Parameters)和传回值。「语意」(Semantic)是指出程序与函数可以作什么事?换句话说,在撰写程序与函数时,需要了解其语法规则,而在使用程序与函数时需要了解其语意规则,如此才能正确呼叫程序与函数。7-2程序与函数7-2-1建立Sub程序7-2-2建立Function函数7-2-3拥有参数的程序与函数7-2-4传值或传址呼叫程序与函数7-2-5强迫跳出程序与函数7-2程序(Sub)与函数(Function)程序与函数可以将程序中,一些常用的共同程序代码独立成区块,也就是建立结构化程序设计的模块。VisualBasic程序可以分为两种,如下:事件处理程序:事件处理程序是处理指定事件的程序(一定是Sub,因为不会有传回值)。一般程序:将程序区块使用一个程序或函数名称来代替,以便呼叫程序与函数来执行特定功能。VisualBasic一般程序分为Sub程序和Function函数两种。7-2-1建立Sub程序-建立程序(说明)VisualBasic语言的程序是使用Sub和EndSub包围的程序区块,在Sub关键词后是程序名称,程序并没有传回值。在VisualBasic程序建立程序的语法,如下所示:[Public|Private]Sub名称程序区块EndSub上述Sub指令前的Public或Private是存取修饰子。Sub指令前的Public或Private是存取修饰子:[Public|Private]Sub名称程序区块EndSubPublic是指定为公用程序,在专案中所有模组档案皆可呼叫,Private是指定为私有程序,只允许在同一模组档案呼叫。如果没有指定,预设是Public。7-2-1建立Sub程序-建立程序(范例)程序名称的命名和变量名称相同,在同一模块不能使用相同的程序名称。例如:显示课程名称的程序,如下所示:SubPrintCourseTitle()DimtitleAsStringtitle="VisualBasic程序设计"lblOutput.Text=title&vbNewLineEndSub7-2-1建立Sub程序-呼叫程序在程序代码呼叫程序是使用Call指令,我们只需在其后加上程序名称即可,如下所示:CallPrintCourseTitle()上述过程调用因为程序没有参数,也可以省略括号,或不使用Call关键词也可以,如下所示:PrintCourseTitle7-2-1建立Sub程序-

VisualBasic专案VisualBasic专案:Ch7-2-1在Windows应用程序建立PrintName()和PrintCourseTitle()程序后,在事件处理过程调用这2个程序,如下图所示:

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickPrintCourseTitle()CallPrintName()

EndSub7-2-1建立Sub程序-程序的执行过程VisualBasic语言是如何执行程序与函数?以本节程序范例为例,程序是在第2列呼叫PrintCourseTitle()程序,其执行顺序就跳到此程序的第1列,在执行完第5列后返回呼叫点,如下图所示:7-2-2建立Function函数-

建立函数(说明)Function函数类似Sub程序只是改为使用Function和EndFunction包围,其主要差异是函数有传回值。在VisualBasic程序的函数语法,如下所示:[Public|Private]Function名称[As资料型别]

程序区块

Return值|名称=值EndFunctionAs之后是传回值的数据型别。函数传回值是使用Return关键词来传回值,或将函数名称指定成需要传回的值。7-2-2建立Function函数-

建立函数(范例)例如:计算体脂肪BMI值的BMI()函数,如下所示:FunctionBMI()Dimresult,h,wAsDoubleh=CDbl(txtHeight.Text)w=CDbl(txtWeight.Text)result=w/(h*h)ReturnresultEndFunction上述函数使用Return传回最后结果。传回值也可以将函数名称指定成传回值,如下所示:BMI=result7-2-2建立Function函数-呼叫函数函数因为拥有传回值,通常都是在指定叙述来执行函数呼叫,并且位在指定叙述的右边,如下所示:

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClicklblOutput.Text="BMI值:"&BMI()EndSub将上述lblOutput卷标控件的Text属性指定成函数的传回值。7-2-2建立Function函数-VisualBasic专案VisualBasic专案:Ch7-2-2在Windows应用程序输入身高和体重后,可以计算体脂肪的BMI值,如下图所示:7-2-3拥有参数的程序与函数-说明程序与函数不只是将重复程序区块抽出成独立区块,还可以新增程序与函数的参数。在呼叫时传入参数值后,相同的程序与函数就可以得到不同的执行结果。7-2-3拥有参数的程序与函数-

建立(说明)在VisualBasic程序建立拥有参数的程序与函数,其语法如下所示:[Public|Private][Sub|Function]名称(参数1,参数2,…)

程序区块

[Return值|名称=值]End[Sub|Function]上述括号的参数称为「正式参数」(FormalParameters)或「假的参数」(DummyParameters)。7-2-3拥有参数的程序与函数-

建立(程序范例)例如:显示提示文字和讯息的程序,如下所示:SubPrintMessage(ByvalmsgAsString,ByvalpromptAsString)lblOutput.Text&=prompt&":"&msg&vbNewLineEndSub上述程序拥有2个参数,因为参数不只一个,所以使用","逗号分隔。7-2-3拥有参数的程序与函数-

建立(函数范例)例如:温度转换函数,如下所示:FunctionConvertTemperature(_ByvalCAsInteger)DimFAsSingleF=(9.0*C)/5.0+32.0ReturnFEndFunction7-2-3拥有参数的程序与函数-呼叫程序与函数如果有参数,在呼叫时可以指定不同的参数值,拥有参数的过程调用,如下所示:PrintMessage(txtMsg.Text,txtPrompt.Text)每一个正式参数都需一对一的对应同型别的实际参数(ActualParameters)。同样的,拥有参数的函数呼叫,如下所示:output="华氏温度:"&ConvertTemperature(C)7-2-3拥有参数的程序与函数-VisualBasic专案VisualBasic专案:Ch7-2-3在Windows应用程序输入字符串和摄氏温度后,可以显示拥有提示文字的消息正文和转换的华氏温度,如下图所示:7-2-4传值或传址呼叫程序与函数-说明程序与函数不只能够传递参数,不同的参数传递方式将影响传入参数的变量值。VisualBasic语言提供两种参数传递方式,如下表所示:7-2-4传值或传址呼叫程序与函数-范例VisualBasic程序函数默认使用传值呼叫,如果没有指明,参数前自动会加上ByVal,如下所示:SubSub1

(ByValCAsInteger)

…..EndSub事实上,只有传址呼叫的参数才需要特别指名ByRef,如下所示:SubSub2

(ByRefCAsInteger)

….EndSub字串与数组是参考资料型态,如果要改变字串或数组个别元素的内容,需使用ByRef参数传递。7-2-4传值或传址呼叫程序与函数-VisualBasic专案VisualBasic专案:Ch7-2-4(参考范例)在Windows应用程序建立SubByVal()传值程序和SubByRef()传址程序,然后分别将参数值加1,可以测试呼叫SubByVal()和SubByRef()后参数值的变化,如下图所示:7-2-5强迫跳出程序与函数-跳出程序在执行程序时如果需要中断程序的执行,可以使用ExitSub跳出程序,如下所示:SubCounter(ByValtimesAsInteger)

……ExitSub

……EndSub7-2-5强迫跳出程序与函数-跳出函数如果执行函数时需要中断函数的执行,请使用ExitFunction跳出函数,如下所示:FunctionSumOne2N(ByValnAsInteger)

……ExitFunction

……EndFunction7-3程序与函数的变量范围7-3-1变量范围7-3-2全局变量的应用7-3-1变量范围-说明「变量范围」(Scope)是当程序执行时,变量可以让程序或函数内或其他程序区块存取的范围。变数依宣告位置拥有三种范围,如下所示:区块范围(BlockScope):在程序If/EndIf、Do/Loop区块内使用Dim宣告的变量,变量只能在区块内使用,在区块外的程序代码并无法存取这些变量。7-3-1变量范围-说明区域范围(LocalScope):在程序和函数内使用Dim宣告的变量,变量只能在程序或函数内使用,程序或函数外程序代码并无法存取此变量。全局范围(GlobalScope):变量如果是在模块Module/EndModule,或在类别Class/EndClass中,以Dim或Private宣告在程序和函数外,则该模块/类别档案的程序和函数都可以存取此变量。如果在程序和函数外使用Public宣告为全域变量,则在整个应用程式的所有模块/类别档案皆可存取此变量7-3-1变量范围-VisualBasic专案VisualBasic专案:Ch7-3-1

(参考范例)在Windows应用程序宣告全局和局部变量A、B,SubA()和SubB()程序都将变量A设为3,变数B设为4,可以测试程序与函数的变量范围,如下图所示:7-3-2全局变量的应用-说明VisualBasic全局变量的主要目的是储存跨不同程序与函数间的共享数据,或是在重复执行程序时需要保留的一些数据。7-3-2全局变量的应用-

VisualBasic专案VisualBasic专案:Ch7-3-2在Windows应用程序建立热门手机品牌的票选系统,只需选取单选按钮后,按下按钮即可参与票选,程序会记录总投票人数和各手机厂牌的票数,如右图所示:7-4常用的内建函数7-4-1日期/时间函数7-4-2数据型别检查函数7-4-3数据转换函数7-4-4数学函数7-4-1日期/时间函数-常用日期/时间函数可以处理日期/时间格式数据和进行分析。常用日期/时间函数,如下表所示:7-4-1日期/时间函数-DateDiff()函数DateDiff()函数可以计算时间差,其语法如下所示:DateDiff(单位字符串,DateTime1,DateTime2)上述DateDiff()函数能够计算后2个参数的时间差,第1个参数字符串设定后2个日期/时间差是使用秒、分或小时等来比较。7-4-1日期/时间函数-DateAdd()函数DateAdd()函数可以加减日期/时间,其语法如下所示:DateAdd(单位字符串,Number,DateTime)上述DateAdd()函数使用与DateDiff()函数相同的单位字符串,能够将第3个参数的日期/时间加减参数Number的值。7-4-2数据型别检查函数数据型别检查函数能够检查VisualBasic变量的数据型别,如下表所示:函数名称函数说明IsDate(stmt)如果表达式是Date型别或能够转换成Date型别的字符串传回True;否则传回FalseIsNumeric(stmt)如果整个stmt都是数字传回True;否则传回FalseIsArray(var)如果参数的变量是指向数组的话传回True;否则传回FalseIsNothing(stmt)如果表达式的Object变量没有指派对象传回True;否则传回False7-4-3数据转换函数函式名称传回型别范例结果CBool(stmt)BooleanCBool(5=5)TrueCByte(stmt)ByteCByte(125.89)126CChar(stmt)CharCChar("BCED")BChrW(exp)CharChrW(65)ACDate(stmt)DateCDate("2010/12/31")CDate("4:35:47PM")2010/12/31下午04:35:47CDbl(stmt)DoubleCDbl(234.56789D)234.56789CDec(stmt)DecimalCDec(1234567.0587)1234567.0587CInt(stmt)IntegerCInt(2345.678)2346CLng(stmt)LongClng(15427.45)Clng(15427.55)1542715428CShort(stmt)ShortCShort(100)100CSng(stmt)SingleCSng(85.3421105)CSng(85.3421567)85.3421185.34216CStr(stmt)StringCStr(537.324)CStr(#2010/12/31#)CStr(#12/31/201012:00:01AM#)537.3242010/12/312010/12/31上午12:00:017-4-4数学函数-随机数与四舍五入函数VisualBasic随机数与四舍五入函数,其参数stmt为数值或表达式,如下表所示:7-4-4数学函数-Math类别的数学常数System.Math类别提供数学常数和函数的类别方法,因为是类别方法,所以程序是直接使用类别名称Math来呼叫方法,如下所示:Math.Sqrt(x)上述Sqrt()方法可以计算平方根。在System.Math类别拥有2个数学常数,其说明如下表所示:7-4-4数学函数-Math类别的数学函数7-5递归函数7-5-1递归函数的基础7-5-2递归的阶层函数7-5-1递归函数的基础递归是由上而下分析方法的一种特殊的情况,使用递归观念建立的函数称为递归函数,其基本定义如下所示:一个问题的内涵是由本身所定义的话,称之为递归。因为递归问题

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论