计算机基础与Visual Basic程序设计(第二版)第九章 过程_第1页
计算机基础与Visual Basic程序设计(第二版)第九章 过程_第2页
计算机基础与Visual Basic程序设计(第二版)第九章 过程_第3页
计算机基础与Visual Basic程序设计(第二版)第九章 过程_第4页
计算机基础与Visual Basic程序设计(第二版)第九章 过程_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1 第 9章 过 程与函数 2 过程的定义 : 在设计一个规模较大、复杂程度较高的程序时,往往根据需要按功能 将程序分解成若干个相对独立的部分 ,然后对每个部分分别编写一段程序,这些程序段称为 过程。 过程是构成程序逻辑部件的基本单位 ,将程序分割成较小的逻辑部件可以简化程序设计任务,结构化设计就是建立在这个思路之上。 每个过程完成一个具有特定目的的任务。 3 过程 函数 内部函数(如: ) ) 通用函数(自定义函数 事件过程 通用过程(自定义过程 窗体事件过程(如: )) 控件事件过程(如 :)) 事件过程 是对 发生的事件 进行处理的程序段 通用过程和通用函数 是由用户根据自己的需要定义和编写 的、可供事件过程多次调用的程序段 它们都不直接与特定的事件相关联 4 通用过程( 程 是指 以规定语法结构组织的 、 可以被重复调用的 、 具有特定功能的 、 相对独立的 程序段。 与任何特定的事件过程相关联,只能由别的过程调用 1、 声明 程 (定义 ) 声明 程 就是在 窗体或标准模块 的代码窗口编写一个能实现预期功能的语句块。 声明 过程名 () 过程体 注意: 程名无值,无类型。 5 说明: 1、 每个通用过程都有一个 过程名 (由用户自己指定,规定同变量名), 同一模块中过程名不得重复。 2、 过程前加上 缺省,则该过程为 全局级过程 , 可以被应用程序的所有窗体模块或标准模块中的过程调用(在窗体中定义,调用时应加窗体名) 。 3、 过程前加上 则该过程为 模块级过程 ,只有在声明它的模块中才可以调用此过程。 4、 在过程名前加上 表明该过程的变量都是静态变量。 5、 形参列表 是传递到过程中的变量名 (多个时用“ ,”分隔 ),它指明了调用时传递给过程的参数的类型和个数 . 过程可以有参数,也可以不带任何参数。根据需要而定 格式为: 量名 ( ) 据类型 , 示按值传递; 示按地址传递 6、过程内不能再定义过程,过程定义也不能写在事件过程内 6 如: x y x=x+100 y=y*6 x,y 7、 建立通用过程可以使用以下两种方法: “工具” ”添加过程” 在标准模块或窗体模块中, 直接输入通用过程的代码。 8、子过程名不返回值,只能通过形式参数与调用语句通信 9、过程体中的 示强制退出过程返回 7 2、调用 程 要执行一个过程 , 必须调用该过程 。 调用的方法为: 方法 1 使用 格式: 过程名 (实参列表 ) 方法 2. 将过程名作为语句使用 : 格式: 过程名 特点: 程的调用 是一句独立的语句。 例:要调用前面的 可以使用下面两种方式: a , b) 或 a , b 主过程 过程 1 程 1 过程 2 程 2 用的本质:转入被调用过程去执行 ,完成后返回 8 说明: 1、使用 数必须放在括号内,如没有参数,括号可省略 2、用过程名调用时,过程名后不能加括号,若有参数,参数与过程名间用空格隔开 3、参数表:在调用语句中的参数称为实际参数(简称实参),实参可以是变量、常量、数组或表达式,参数间用逗号隔开 4、 可以直接调用本模块中声明的过程或 标准模块中声明的全局过程; 5、 当定义的过程重名时,调用过程时,过程名前应加模块名修饰; 6、 如果要调用 窗体模块 中声明的 全局过程, 调用时过程名前 应加窗体名。 9 程 与 程 的主要区别是: 程 可通过函数名返回一个值到调用的过程 1、 声明 程(函数定义) 格式: 函数过程名 () = 返回值语句 意: 在函数体内,函数名可以当变量名使用,函数的返回值就是通过对函数名的赋值语句来实现的。即函数值通过函数名返回。 函数体中的 函数过程需要返回的值的类型由 设置 。 程(自定义函数) 函数体 10 2、 调用 程 程的调用 , 与标准函数 ( 内部函数 ) 相同 。 通常用在表达式中 格式: 函数名 () 特点: 不能独立成为语句,必须参加表达式的运算。 如 1: 下面是已知直角三角形两直角边的值,计算斜边的函数。 as as as *A+B*B) ) a=: b= a , b) 1 例 2: 将前面的两个 x y z s s = (x + y + z) / 2 s - x) * (s - y) * (s - z) * s) a#, b#, c#, s#, a = : b = c = If a + b c b + c a c + a b 面积 =; a, b, c) ) 无参数时,括号不能省略 f 2 过程中参数的传送 不同模块(过程)之间数据的传递方式: 通过全局变量实现各过程中共享数据 (即在 “通用”部份 定义的变量,由该模块所有过程 共享 ) 通过过程调用实参与形参的结合实现 按值传递 (单向传递 ) 按地址传递 (双向传递 ) 13 的参数称为 形式参数 ( 形参 ) , 在程序中调用 称为实际参数 ( 实参 ) 。 在调用过程时 , 就是 把 “ 实参 ” 依次 按位置 传递给被调用过程的 “ 形参 ” , 然后执行被调用过程中的语句 。 参数传递时相当于给变量赋初值 。 如: x, y) m n 参数传递有两种模式: 按值传递 与 按址传递 14 按值传递 就是将 实参的值 传送给被调用过程中的 形参 。 即:系统把实参复制一份传送给形参。 这样, 被调用的过程如果改变了形参的值,也不会改变实参的值。 在 值方式的标志为: 在形参前加上 这种传递方式 是一种单向的数据传递 , 即调用时只能由实参的值传递给形参,调用结束不能由形参将操作结果返回给实参 。 实参可以是常数、变量或表达式。 1、 按值传递 15 例: 写出下列程序的运行结果 x as y as x=x+100 y=y*6 “x=“;x.”y=“;y a%,b% a=10:b=20 a,b “a=“;a,”b=“;b 值: X=110 y=120 a=10 b=20 16 2、 按址传递 变量的引用 传址方式是将实参在内存的地址传递给形参 , 也就是实参 、形参公用内存的 “ 地址 ” 。 在 按址传递数据是在形参前加上 默认方式 ) 。 这种传递方式 是一种双向的数据传递 ,即调用时实参将值传递给形参;调用结束由形参将操作结果返回给实参。当用传址方式时, 实参只能是变量、数组名,不能是常数、表达式。 修改前例题 再写其运行结果 17 x as y as x=x+100 y=y*6 “x=“;x.”y=“;y a%,b% a=10:b=20 a,b “a=“;a,”b=“;b 址: X=110 y=120 a=110 b=120 18 3、 数组作过程的参数 数组作参数是通过传地址方式传送 。 在传送数组时 , 除遵守参数传送的一般规则外 , 还应注意以下几点: 1 为了把一个数组的全部元素传送给一个过程 , 应将数组名分别写入形参表中 , 并略去数组的上下界 , 但括号不能省略 。 a() As 中形参 “ a( )”即为数组 。 19 2 被调过程可通过 下界 。 3 当用数组作形参时 , 对应的实参必须也是数组 , 且类型一致 。 4 实参和形参结合是按地址传递 , 即形参数组和实参数组共用一段内存单元 。 例如:定义了实参数组 b(1 ), 给它们赋了值 , 调用函数过程的形式如下: b( ) 或 b() ) 实参数组后面的括号可以省略,但为便于阅读,建议一般不要省略为好。 3、 数组作过程的参数 20 调用时形参数组 共用一段内存单元 , 如图 6 因此在 过程中改变数组 也就相当于改变了实参数组 当调用结束时 , 形参数组 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、 数组作过程的参数 21 可选参数和可变参数 1、 可选参数 在过程的形参列表中加入 就可以指定过程的参数为可选的。如果指定了可选参数,则 参数表中此参数后面的其它参数也必是可选的 ,并且要用 例 6: 求两个数的和的函数过程。 函数过程: s f 2 事件过程: a b c im s a = 10: b = 20 a, b) ; a = 10: b = 20: c = 30 a, b, c) ; )检测可选参数是否被省略 23 2、 不定数量的参数(可变参数) 一般说来,过程调用中的参数个数应等于过程说明的参数个数。 在传递参数时, 如果要求参数的数目可以变化 ,则在函数过程或 参前可加 不能与 连用) 指明。 格式如下: 程名 ( 其他参数 , ( ) ) 24 s( ), a%, b c d s = , 2, 3, 4, 5) ; s(0), s(2), s(4) ) a = 1000: b = 10000: c = 100: d = 10 ; a, b, c, d ) p() ) as or p) p) p(5 窗体参数 形参定义格式 : 形参名 调用时实参 : 必须为某个窗体名称 控件参数 : 形参定义格式 : 形参名 调用时实参 : 可为任意一个控件对象 26 过程的嵌套和递归 1、 过程的嵌套 在程序中调用一子过程 , 而在子过程中又调用另外的子过程 , 这种程序结构称为 过程的嵌套 。 过程的嵌套调用执行过程如 下图: 27 2、 过程的递归调用 用自身的结构来描述自身,称递归。例如,对阶乘的定义: )!2()1()!1()!1(!递归 直接调用自己称为直接递归调用 间接调用自己称为间接递归调用 过程的嵌套和递归调用 28 n f n = 1 1 n * n - 1) f )=”; ) 序的递归过程: 29 说明: 递归处理分递推和回归两个过程 , 如上图所示 。 当一个大问题能够分解成同类型的小问题 ,且问题 规模在逐渐减小 ,才适合用递归解决 . 使用递归算法必须要满足以下的递归条件: ( 1)存在递归结束条件及结束时的值; ( 2)能用递归形式表示,且递归向终止条件发展。 30 变量的作用域 根据变量的作用域,变量分为 局部 ( 过程级 )变量、 窗体 / 模块 变量和 全局 变量 局部 变量 在过程中用 存在于过程中 用 义的变量称为动态变量 ,生存期为过程的一次调用 . 用 生存期为整个应用程序的执行期间 (重点掌握 ,举例 ) 窗体 / 模块 变量 块中的所有过程都可使用 全局 变量 以在所有模块中使用 31 s i 0 i = 1 i) i x s s = s + x s 行时单击窗体 , 程序输出结果为 : 32 能 能 变量名前加窗体 名 不能 不能 被其他模块 存取 能 能 不能 被本模块的其他过程存取 通用声明 通用声明 过程中

温馨提示

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

评论

0/150

提交评论