已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualBasic程序设计教程 内蒙古科技大学实践训练中心 第八章过程 8 1过程的定义与调用 VB的过程 系统提供的内部函数过程 其中 事件是构成VB应用程序的主体 应用设计基本上是对事件过程进行设计 用户根据应用的需要而设计的过程 VB的过程分类 以 Sub 保留字开始的子过程 以 Function 保留字开始的函数过程 以 Property 保留字开始的属性过程 以 Event 保留字开始的事件过程 8 1过程的定义与调用 8 1 1Sub过程的定义与调用用户自定义子过程通常来完成一个特定的功能 其名字可由用户根据自己的习惯而定义 VB的事件过程只在用户触发该事件后启动 而用户自定义的子过程只有在被其他过程调用时才启动 1 用户自定义子过程的一般格式 Static Private Public Sub子过程名 参数列表 语句块 ExitSub 语句块EndSub说明 格式中 Sub子过程名 和 EndSub 不可缺 子过程名的命名规则与变量命名规则相同 8 1过程的定义与调用 8 1 1Sub过程的定义与调用 Static 在过程名之前使用Static 表示过程中的局部变量都是静态变量 当程序退出该程序时 局部变量的值仍然保留作为下次调用的初值 Static对数组变量也有效 但对动态变量则无法转换为静态变量 Private 表示该过程为私有过程 只有本模块中的其他过程访问 不能被其他模块中的模块访问 Public 表示该过程为公有过程 即可以被程序中所有模块调用 本窗体和其他模块均可调用 但过程名必须是唯一的 否则在过程名前加上该过程所在的窗体名或模块名 参数列表 其他过程与本过程进行参数传递和交换的形式参数 当参数个数大于等于2时 参数之间用 隔开 ExitSub 在过程任意位置终止过程的运行而退出过程而使用的语句 EndSub 过程结束标识 用来正常终止过程 8 1过程的定义与调用 8 1 1Sub过程的定义与调用 过程参数的传递默认方式为引用 地址 传递 ByRef 若只传参数 实参 的值则必须将形式参数说明为Byval 格式如下 Byval变量名或数组名 As数据类型 过程内部不能再定义其他过程 可以调用其他合法的过程 事件过程中也不允许定义子过程 subcommand click calltest endsub staticsubtest dima 2 asintegera 0 a 0 1a 1 a 1 1printa 0 a 1 endsub 8 1过程的定义与调用 8 1 1Sub过程的定义与调用定义过程的方式 手工方式 在过程 事件代码窗口中 编写事件程序 sub过程名 参数列表 EndSub 系统方式 进入模块代码窗口 系统菜单 工程 添加 新建 则新建一个模块 在标准模块中填写子过程代码 系统菜单 工具 添加过程 确定子过程的名称以及类型后 即回到模块的代码窗口 8 1过程的定义与调用 8 1 1Sub过程的定义与调用2 子过程调用 Call过程名 实参列表 如 calltext 12 abc 过程名 实参列表 如 test12 abc 例 8 1 求n 解题思路 在标准模块中定义一个子过程n 用于实现求任意正整数的阶乘 8 1过程的定义与调用 8 1 1Sub过程的定义与调用2 子过程调用 Call过程名 实参列表 如 calltext 12 abc 过程名 实参列表 如 test12 abc 例 8 2 给出矩形的长和宽 求矩形的面积 解题思路 定义一个过程area 计算矩形的面积 8 1过程的定义与调用 8 1 2Function过程的定义与调用函数过程 Function 与子过程一样 可将一组完成特定功能的程序代码组织起来 作为一个相对独立的过程使用 但子过程没有值的返回 函数过程有值的返回 1 函数过程的定义 Static Public Private Function函数过程名 参数列表 As类型 语句块 ExitFunction 语句块 给函数名赋返回值 EndFuntion 8 1过程的定义与调用 8 1 2Function过程的定义与调用说明 格式中的Static Public Private的含义与作用以及参数列表的格式和使用方法 Byval传值的作用等均与子过程的定义相同 ExitFunction的作用与ExitSub相同 As类型 指定该函数的返回值的类型 语句块为符合VB语法的一条语句或多条语句 给函数名赋值 一般情况下 定义一个函数过程 就是能返回一个值给调用程序 故函数过程应有一条语句给函数名赋值即调用后的返回值 若不赋值 则默认返回值为0 数值型函数 或空值 可变类型函数 与Sub定义一样 函数过程定义的函数体内不允许定义其他的函数过程和子过程 8 1过程的定义与调用 8 1 2Function过程的定义与调用2 函数过程的定义方法 在代码窗口中手工输入函数过程的框架 如 StaticPrivateFunctionAreturn aasinteger basinteger asInteger EndFunction 系统菜单 工具 添加过程 选择相应的类型和范围属性 3 函数过程的调用函数过程的调用如同调用VB的系统内部函数一样 程序中 函数过程的调用一般放在表达式中赋值号 的右边 将它看成某种类型的值而参加表达式的组成 8 1过程的定义与调用 8 1 2Function过程的定义与调用3 函数过程的调用例 8 3 函数过程的定义与调用 判断某个成绩 百分制 的等级 解题思路 定义一个函数过程 用于判断分数的等级 判断后的结果返回为字符串 优 良 中 及格或不及格 8 1过程的定义与调用 8 1 2Function过程的定义与调用例 8 4 编写求任意给定两个自然数的最大公约数的程序 解题思路 对于已知两个数m n 使得m n m除以n得余数r 若r 0 则n为所求的最大公约数 算法结束 否则执行 1 n m r n 再重复步骤 2 8 2函数和过程的参数传递 参数传递 在调用过程时 过程参数使用的是实际参数 它要与定义过程时的形式参数一一对应 并以适当的形式将实参传给行参 供过程使用 参数传递的方式 传值 传址 8 2 1传值形参 指在定义过程时出现在参数列表中的变量名 这些变量名的使用只能在过程内部 实参 是在调用该过程时调用过程中已组织好的准备传给形参的常量 变量 表达式或数组控件对象等 它是在调用过程 主程序或父过程 中组织好的数据 实参若是常量 则传递就相当于将该常量的值赋给形参 实参若为一个简单变量的表达式 也是与常量一样将该表达式的值赋给对应的形式参数 传递参数时 形参和实参的个数一定相同 传递时要一一对应 参数之间要用 隔开 每个实参的类型必须与相对应的行参类型相同 8 2函数和过程的参数传递 8 2 1传值SubtempSub aasinteger bassingle casstring EndSub可采用调用方式 calltempsub a b comm 过程定义中默认的参数传递是地址传递 但在定义过程中 若某个参数用Byval来说明 则该参数便是传值 传值的一个特点是将实参的值复制一份给形式参数所代表的临时内存单元 此后实参与形参之间再无任何联系 形式参数的任何变化均不会对实参产生任何影响 8 2函数和过程的参数传递 8 2 1传值例 8 5 传值调用Privatesubcommand1 click dimxasinteger yasintegerx 10 y 20print x x y y calltemp x y print x x y y EndSubSubtemp Byvalxasinteger Byvalyasinteger x x 100 y x 60print x x y y EndSub运行结果 x 10y 20 调用前的实参x 110y 6600 temp中的行参x 10y 20 调用后的实参 8 2函数和过程的参数传递 8 2 1传值例 8 6 求幂级数解题思路 定义temp函数用于计算x的幂 需要用到2个参数 x和y x用于传递某个数 y用于传递幂的次方数 y是传值参数 因此 函数中y值的改变不会影响它相应的实际参数 8 2函数和过程的参数传递 8 2 2传址在过程调用过程中 参数传递的默认方式是按地址传递 故不加任何关键字就是传址调用 传址的特点是形参与对应实参用相同的内存地址 形参的改变将影响实参的改变 实际上 形参也是实参的别名 通常情况下 形式参数为传值形式 则形式参数可认为是一个局部变量 但若为传址方式 则由形参与实参连系起来 使形参为非局部变量 因为形参的改变结果直接传给了实参 例 8 7 对于例 8 5 中的过程temp将其定义为 subtemp xasinteger yasinteger EndSub则Calltemp x y 变为了传址调用 故形参的改变会引起实参x y的值改变 8 2函数和过程的参数传递 8 2 2传址例 8 8 传值与传址两种方式下 形参与实参的改变 8 2函数和过程的参数传递 8 2 3数组及对象作为过程的参数1 数组作为参数 用数组名作为形参或实参 用数组元素作为实参进行传递 注意 第 中方法相当于传址方式 即将数组的起始地址传给形参 但在使用时应注意以下几点 用数组名进行地址传递时 在参数列表中说明数组 不需要说明其维数的定义 但圆括号不可省略 在过程定义体内如需要知道参数的上 下界 可用UBound和LBound确定参数组的上 下界 形参数组和实参数组的类型必须一致 例 8 9 求一个n n方阵所有元素之和 8 2函数和过程的参数传递 8 2 3数组及对象作为过程的参数1 数组作为参数例 8 9 求一个n n方阵所有元素之和 解题思路 利用随机函数产生一个6阶方阵a 并保存在二维数组中 将此数组作为参数传给函数suma 在函数suma中计算方阵的元素之和 在函数过程内部使用Ubound a 1 确定数组a的第一维上界 8 2函数和过程的参数传递 8 2 3数组及对象作为过程的参数2 对象参数对于过程中的参数 可以用对象参数进行传递 如窗体 控件等 经过传递后 可以使用对象的有关属性以及方法 在使用控件作为参数时 必须考虑到作为实参的控件是否具有通过过程中所列的控件的属性 因此必须先判断控件是哪一类控件 判断格式为 If Elseif Typeof控件名称is控件类型其中 控件类型指各种不同的控件的关键字 如文本框的关键字为TextBox等 IftypeofTestctristextboxthentestctr text Ms Endif 8 3变量 过程的作用域 在VB程序中我们定义的变量 过程 函数均有其作用范围 在VB系统内 该范围称为其作用域 作用域分为三个层次 过程 模块 文件 全局 工程 过程的作用域最小 仅局限于过程内部 针对局部变量 模块 文件 次之 仅在某个模块或文件内 全局 工程 范围最大 在整个应用工程范围内 8 3 1过程的作用域过程的作用域 模块级 文件级 和全局级 一个工程应用程序一般由三类模块构成 窗体模块 frm 通常有 事件过程 自定义子过程和自定义函数过程 标准模块文件 bas 由若干个VB子过程和函数组成 通常为应用程序提供可调用的标准程序单元 类模块文件 cls 包括自定义的类 为相应类设计的属性过程 自定义方法过程 自定义事件过程等 8 3变量 过程的作用域 8 3 1过程的作用域 应用程序 vbp文件 至少一个或多个窗体模块 frm 文件 事件过程 sub 自定义过程 Sub 自定义函数 Function 一个或多个标准模块 bas 文件 自定义过程 Sub 自定义函数 Function 一个或多个类模块 cls 文件 自定义属性过程 Property 自定义方法过程 Sub或Function 自定义事件过程 Event 8 3变量 过程的作用域 8 3 1过程的作用域1 模块级 文件级 过程指只能在本文件或模块中被调用 此类过程 或函数 定义时在Sub或Function前加 Private 关键字 2 全局级过程指能在整个应用程序中被调用的过程 此类过程与模块级过程的定义过程完全相同 只是在定义前不加关键字 Private 或加关键字 Public 调用方式通常为 标准模块名 或窗体名 子过程或函数名 参数 8 3变量 过程的作用域 8 3 1过程的作用域 8 3变量 过程的作用域 8 3 2变量的作用域变量的作用域分为三级 局部 过程 级 模块级 文件 全局 工程 级 1 局部变量 过程级 指在过程内部定义 只能在过程内使用的变量 别的过程不能使用 定义方式 Dim Static 局部变量随过程的调用而产生 也随着过程调用的结束而结束 Dim声明的变量将被释放内存 而用Static声明的变量 变量没有被释放 但已变得不可访问 下次发问时 其值仍存在 2 窗体模块级变量 指在窗体 模块 文件内 但在所有过程之外定义的变量 即在窗体文件中的 通用声明 段里用Dim或Private语句声明的变量 该变量可被窗体文件中的任何过程访问 但不能被其他模块文件中的过程访问 此类变量随窗体的产生而产生 也随着窗体的结束而结束 3 全局变量 工程级变量 指窗体或任一模块中定义 但不在任一过程内定义的变量 此类变量的声明必须用Public语句完成 次变量在整个工程文件中存在 在工程应用结束时才会被释放 8 3变量 过程的作用域 8 3 2变量的作用域 8 3变量 过程的作用域 文件1 Bas 模块文件Module1 Bas publicaasintegerprivatebasinteger 模块级变量subf1 dimcasinteger 局部变量 printform1 c c bendsub 文件2 frm 窗体模块 Form1 frm publiccassingle 全局变量publicaasinteger 全局变量subcommand1 click dimcasinteger 局部变量 printmodule1 a c form1 c aendsub 注释 上面Form1 frm文件print语句中 Module1 a 是指 Module1 Bas 文件中定义的全局变量a Form1 c 是指Form1 frm中定义的全局变量c c 是指command1 click中定义的局部变量c a 是指在Form1 frm中定义的全局变量a 8 3变量 过程的作用域 说明 在同一模块不同过程中定义的变量可以同名 在同一模块不同级别中定义的变量可以同名 在不同模块中定义的全局变量可以同名 在过程中直接引用的变量总是同名变量中作用域最小的那个变量 在其他模块 定义全局变量所在模块 中引用全局变量时 必须在该变量前加上模块名 8 3变量 过程的作用域 8 3 3静态变量局部变量除了用Dim语句声明外 还可以用Static语句将变量声明为静态变量 它在程序运行中保留变量的值 即每次调用过程 用Static说明的变量保持原来的值 而用Dim说明的变量 每次调用过程时 重新初始化 形式 Static变量名 As类型 StaticFunction函数名 参数列表 As类型 StaticSub过程名 参数列表 若函数名 过程名前加 Static 表示该函数 过程内的局部变量都是静态变量 8 3变量 过程的作用域 8 3 3静态变量例 8 10 一个窗体单击事件过程 Form click 和一个求和函数 sum 组成的应用程序 在Form click 过程中5次调用函数sum DimiAsInteger isumAsIntegerFori 1To5isum sum i Print isum isum NextPrivateFunctionsum nAsInteger StaticjAsIntegerDimjAsIntegerj j nsum jEndFunction 8 4递归 递归是指一个自己调用自己的过程 VB允许定义一个自定义过程或函数在过程内部自己调用自己 这样的子过程或函数叫做递归子过程或递归函数 例 8 11 求n 的函数 解题思路 递归就是一个自己不断调用自己的过程 直到达到递归结束条件 而后逐级返回到上一次调用过程 每一次调用自己 先把形参 局部变量 调用结束时的返回地址压栈 直到递归结束 这个过程叫做递归过程 然后一级一级从堆栈弹出参数 直到栈空 这个过程叫做回归 定义阶乘运算如下 n n n 1 n 1 n 1 n 2 若用fn n 表示n 则由有 8 4递归 求n 的函数定义如下 publicfunctionfn nasinteger asintegerifn 1thenfn 1elsefn n fn n 1 endifendfunction假设n 3 则上诉函数的步骤如下 fn 3 3 fn 2 n 3时调用fn 2 fn 2 2 fn 1 n 2时调用fn 1 fn 1 1 n 1时求得fn 1 的值 fn 2 2 1 返回fn 2 的值 fn 3 3 fn 2 3 2 返回fn 3 的值 设计一个递归过程或函数应具备的条件 具备递归条件及递归的条件 递归调用递归结束的条件发展 8 4递归 例 8 12 在一个三角形中 取三边的中点构成一个三角形 然后在所画的三角形的边与相邻的三角形的角构成的三角形
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江西农业工程职业学院工作人员招聘考试试题
- 2025毕节幼儿师范高等专科学校工作人员招聘考试试题
- 市政绿化施工方案
- 神经重症患者肠内喂养护理专家共识总结2026
- 多塔作业防碰撞施工技术方案
- 城市交通道路照明工程施工技术方案
- 高中生物教学中生态学教学的实践与反思课题报告教学研究课题报告
- 2025年光伏产业清洗药剂环保研发与高效报告
- 幼儿园教师观察记录工具跨文化效度-基于2024年观察量表跨国验证数据分析
- 卡压式涂覆碳钢管施工组织设计
- 新22G01 砌体房屋结构构造(烧结普通砖、烧结多孔砖)
- DBJ50-T-291-2018 建设工程施工现场安全资料管理标准
- 2025卫生职称(副高)考试小儿内科学高级职称(副高)历年考试真题及答案
- 2025年托育园考试题库及答案
- 中国南水北调集团文旅发展有限公司(新闻宣传中心)招聘笔试题库2025
- 护理科研课件
- 民兵安全训练课件
- GB/T 18204.6-2025公共场所卫生检验方法第6部分:卫生监测技术规范
- 新能源电站消防培训课件
- 2025年湖北省中考语文试卷真题(含标准答案)
- 分泌性中耳炎术后护理
评论
0/150
提交评论