第八章过程与函数.ppt_第1页
第八章过程与函数.ppt_第2页
第八章过程与函数.ppt_第3页
第八章过程与函数.ppt_第4页
第八章过程与函数.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

第8章 过程与函数 过程的定义 在设计一个规模较大 复杂程度较高的程序时 往往根据需要按功能将程序分解成若干个相对独立的部分 然后对每个部分分别编写一段程序 这些程序段称为过程 过程是构成程序逻辑部件的基本单位 将程序分割成较小的逻辑部件可以简化程序设计任务 结构化设计就是建立在这个思路之上 每个过程完成一个具有特定目的的任务 过程的分类 事件过程VB中有两类过程 Sub过程通用过程Function过程事件过程 是对发生的事件进行处理的代码通用过程 是由用户根据自己的需要定义和编写的 可供事件过程多次调用的程序段 二者的区别是 通用过程是由程序中的语句调用 事件过程往往是由用户事件触发 8 1Sub过程 子程序过程 Sub过程是指以规定语法结构组织的 可以被重复调用的 具有特定功能的 相对独立的语句块 1 声明Sub过程声明Sub过程就是在窗体或标准模块的代码窗口编写一个能实现预期功能的语句块 声明Sub过程的语法格式为 Private Public Static Sub过程名 ExitSub 过程体 EndSub注意 Sub过程名无值 无类型 上一页 下一页 返回首页 说明 1 每个通用过程都有一个过程名 由用户自己指定 规定同变量名 同一模块中过程名不得重复 2 过程前加上Public关键字或缺省 则该过程为全局级过程 可以被应用程序的所有窗体模块或标准模块中的过程调用 在窗体中定义 调用时应加窗体名 3 过程前加上Private关键字 则该过程为模块级过程 只有在声明它的模块中才可以调用此过程 4 在过程名前加上Static关键字 表明该过程的变量都是静态变量 5 形参列表是传递到过程中的变量名 多个时用 分隔 它指明了调用时传递给过程的参数的类型和个数 格式为 变量名 AS数据类型 过程级变量 上一页 下一页 返回首页 如 SubTryout xasinteger yasinteger x x 100y y 6Printx yEndSub6 注意 过程可以有参数 也可以不带任何参数 通用过程可以在标准模块中建立 也可以在窗体模块中建立 7 建立通用过程可以使用以下两种方法 工程 添加模块 添加一标准模块 工具 添加过程 在标准模块或窗体模块中 直接输入通用过程的代码 上一页 下一页 返回首页 2 调用Sub过程 在其他过程中执行已声明的Sub过程被称为对Sub过程的调用 1 使用Call语句调用Sub过程格式 Call过程名 实参列表 2 将过程名作为语句使用格式 过程名特点 Sub过程的调用是一句独立的语句 上一页 下一页 返回首页 说明 1 可以直接调用本模块中声明的过程或标准模块中声明的全局过程 2 当定义的过程重名时 调用过程时 过程名前应加模块名修饰 3 如果要调用窗体模块中声明的全局过程 调用时过程名前应加窗体名 4 调用Sub过程时 若省略Call 则外面的括号也必须省略 5 调用Sub过程时 每个实参可以加单独的括号 6 实参数表 是往被定义过程的形参列表传递的数据 因此 其数据类型需要和形参列表保持一致 实参可以是常量 变量 数组 或复杂表达式 但无论是什么都必须有确定的值 上一页 下一页 返回首页 例1 将求三角形的面积的代码存放在过程triarea a b c 中 边长从三个文本框中输入 如果符合构成三角形的条件 则调用该过程 否则调用suberr过程 Lt1 vbp程序如下 PrivateSubtriarea areaAsDouble xAsDouble yAsDouble zAsDouble DimsAsDoubles x y z 2area Sqr s x s y s z s EndSubPrivateSubsuberr intyrnAsInteger intyrn MsgBox 请检查您的数据 vbYesNo vbInformation 数据错误 EndSub 3 使用Sub过程 上一页 下一页 返回首页 PrivateSubCommand1 Click Dima b c s DimintYesorNoAsIntegera Val Text1 Text b Val Text2 Text c Val Text3 Text Ifa b cAndb c aAndc a bThenCalltriarea s a b c 使用Call关键字 实际参数用括号括起来Print 面积 sElsesuberrintYesorNo 不使用Call关键字 实际参数不用括号EndIfEndSubSub过程的调用是一句独立的语句 上一页 下一页 返回首页 Function过程与Sub过程的主要区别是 Function过程可返回一个值到调用的过程1 声明Function过程格式 Public Private Static Function函数过程名 As 返回值语句 ExitFunction EndFunction注意 Function过程名有值 有类型 在函数体内 函数名可以当变量名使用 函数的返回值就是通过对函数名的赋值语句来实现的 即函数值通过函数名返回 函数过程需要返回的值的类型由As设置 8 2Function过程 函数 上一页 下一页 返回首页 2 调用Function过程 Function过程的调用 与标准函数 内部函数 相同 通常用在表达式中格式 函数名 特点 不能独立存在 必须参加表达式的运算 如 下面是已知直角三角形两直角边的值 计算斜边的函数 functionmyfun Aasinteger Basinteger asstringmyfun sqr A A B B Endfunctionlabel1 caption myfun Cint text1 text cint text2 text strX myfun width height 上一页 下一页 返回首页 例2 将例1中两个Sub过程改为Function过程 PrivateFunctiontriarea xAsDouble yAsDouble zAsDouble DimsAsDoubles x y z 2triarea Sqr s x s y s z s EndFunctionPrivateSubCommand1 Click Dima b c s intYesorNo a Val Text1 Text b Val Text2 Text c Val Text3 Text Ifa b cAndb c aAndc a bThenPrint 面积 triarea a b c ElseintYesorNo suberr 无参数时 括号不能省略EndIfEndSub 上一页 下一页 返回首页 Sub过程和Function函数过程中的中的参数称为形式参数 形参 在程序中调用Sub过程和Function函数过程时中称为实际参数 实参 在调用过程时 就是把 实参 依次按位置传递给被调用过程的 形参 然后执行被调用过程中的语句 参数传递时相当于给变量赋初值 如 Printgreatcd x y PublicFunctiongreatcd mAsInteger nAsInteger 参数传递有两种模式 按值传递与按址传递 8 3过程中参数的传送 按值传递就是将实参的值传送给被调用过程中的形参 即 系统把实参复制一份传送给形参 这样 被调用的过程如果改变了形参的值 也不会改变实参的值 在VB中 传值方式的标志为 在形参前加上ByVal 这种传递方式是一种单向的数据传递 即调用时只能由实参的值传递给形参 调用结束不能由形参将操作结果返回给实参 实参可以是常数 变量或表达式 1 按值传递 上一页 下一页 返回首页 例 写出下列程序的运行结果 Subtryout ByValxasinteger ByValyasinteger x x 100y y 6print x x y yEndSubSubForm click Dima b a 10 b 20tryouta bPrint a a b bEndSub 传值 X 110y 120a 10b 20 传址 X 110y 120a 110b 120 上一页 下一页 返回首页 2 按址传递 变量的引用 传址方式是将实参在内存的地址传递给形参 也就是实参 形参公用内存的 地址 在VB中 按址传递数据是在形参前加上ByDef 默认方式 这种传递方式是一种双向的数据传递 即调用时实参将值传递给形参 调用结束由形参将操作结果返回给实参 当用传址方式时 实参只能是变量 数组名 不能是常数 表达式 修改前例题ByValByDef再写其运行结果 例5 下面的程序求解S1 nS2 n nSn n n n n个n累加 并输出S1到Sn n为自然数 从文本框值输入 函数过程 注意传值与传址的区别 ByDefPublicFunctionsum mAsInteger ByValnAsInteger sum mDoWhilen 1sum sum mn n 1LoopEndFunction 上一页 下一页 返回首页 事件过程 PrivateSubCommand1 Click Dimi s a k Clsa Val Text1 Text ReDims 1Toa Fori 1Toa按值传送s i sum a i k k 1Print i i k k s s i Ifk aThenExitForNextiEndSub 按址传送 上一页 下一页 返回首页 3 数组作过程的参数 VisualBasic允许把数组作为实参传送到过程中 数组作参数是通过传地址方式传送 在传送数组时 除遵守参数传送的一般规则外 还应注意以下几点 1 为了把一个数组的全部元素传送给一个过程 应将数组名分别写入形参表中 并略去数组的上下界 但括号不能省略 PrivateSubSort a Assingle EndSub其中形参 a 即为数组 2 被调过程可通过Lbound和Ubound函数确定实参数组的上 下界 3 当用数组作形参时 对应的实参必须也是数组 且类型一致 4 实参和形参结合是按地址传递 即形参数组和实参数组共用一段内存单元 例如 定义了实参数组b 1to8 给它们赋了值 调用Sort 函数过程的形式如下 Sortb 或CallSort b 实参数组后面的括号可以省略 但为便于阅读 建议一般不要省略为好 3 数组作过程的参数 调用时形参数组a和实参数组b虚实结合 共用一段内存单元 如图6 7所示 因此在Sort 过程中改变数组a的各元素值 也就相当于改变了实参数组b中对应的元素的值 当调用结束时 形参数组a成为无定义 b 1 b 2 b 3 b 4 b 5 b 6 b 7 b 8 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 参数为数组时虚实结合示意图 3 数组作过程的参数 8 4可选参数和可变参数 1 可选参数在过程的形参列表中加入Optional关键字 就可以指定过程的参数为可选的 如果指定了可选参数 则参数表中此参数后面的其它参数也必是可选的 并且要用Optional关键字来声明 例6 求两个数的和的函数过程 lt6 vbp函数过程 PublicFunctionmysum firstAsInteger secondAsLong Optionalthird mysum first secondIfNotIsMissing third Thenmysum mysum thirdEndFunction 事件过程 PrivateSubCommand1 Click DimaAsInteger bAsLong cAsDoubleDimsumAsIntegera 10 b 20Sum mysum a b Print sum Suma 10 b 20 c 30Sum mysum a b c Print sum SumEndSubIsMissing 检测可选参数是否被省略 上一页 下一页 返回首页 2 不定数量的参数 可变参数 一般说来 过程调用中的参数个数应等于过程说明的参数个数 在传递参数时 如果要求参数的数目可以变化 则在函数过程或Sub过程的形参前可加ParamArray关键字 不能与ByValByDef 连用 指明 格式如下 Sub过程名 其他参数 ParamArray 上一页 下一页 返回首页 PrivateSubCommand1 Click Dims a bAsLong cAsVariant dAsDoubles Array 1 2 3 4 5 Print sum multisum s 0 s 2 s 4 a 1000 b 10000 c 100 d 10Print sum multisum a b c d EndSubPublicFunctionmultisum ParamArrayp Dimint1 sumasvariantForint1 LBound p ToUBound p sum sum p int1 Nextmultisum sumEndSub 上一页 下一页 返回首页 8 6过程的嵌套和递归 1 过程的嵌套 在程序中调用一子过程 而在子过程中又调用另外的子过程 这种程序结构称为过程的嵌套 过程的嵌套调用执行过程如下图 2 过程的递归调用 用自身的结构来描述自身 称递归 例如 对阶乘的定义 VisualBasic允许在一个Sub子过程和Function过程的定义内部调用自己 即递归Sub子过程和递归Function函数 6 6过程的嵌套和递归调用 PrivateFunctionfac nAsInteger AsIntegerIfn 1Thenfac 1E

温馨提示

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

评论

0/150

提交评论