




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章过程和变量的作用域 4 1VisualBasic的代码模块结构化程序设计思想 把较大的程序划分为若干个模块 窗体 每个模块 窗体 只完成一个或若干个功能 VisualBasic应用程序的结构 4 2VisualBasic的过程 1 引例4 2已知多边形的各条边的长度 要计算多边形的面积 计算多边形面积 可将多边形分解成若干个三角形 计算三角形面积的公式如下 S S1 S2 S3传统方法 下面的公式写三次 4 2 1函数过程的创建和调用除了系统提供的内部函数过程和事件过程外 用户可自定义过程 以Sub保留字开始的为子过程 通用过程 以Function保留字开始的为函数过程 1 函数过程的创建函数过程形式 Function函数过程名 参数列表 形参 As类型 局部变量或常数定义语句块函数名 返回值函数过程体 ExitFunction 语句块函数名 返回值EndFunction自定义函数过程有两种方法 1 利用 工具 菜单下的 添加过程 命令定义 生成一个函数的框架 2 利用代码窗口直接定义 2 函数过程的调用函数过程调用同标准函数调用 形式 函数过程名 参数列表 参数列表 称为实参 它必须与形参个数相同 位置与类型一一对应 可以是同类型的常量 变量 表达式 PrivateSubCommand1 Click A val Inputbaox Endsub 定义一个函数 多次调用 定义函数过程area PublicFunctionarea x y z AsSingleDimc c 1 2 x y z area Sqr c c x c y c z EndFunction 调用函数过程 Subcommand1 click 输入若干个三角形边长S area a b c area c d e S S area e f g PrintSEndSub 例4 3编写定义计算任意整数a阶乘的函数过程fac n 参考代码 PublicFunctionfac aasInteger asLongdimpasLong iasIntegerp 1 累乘初值为1Fori 1toap p iNextifac p 程序中对函数名赋值EndFunction 调用 a fac 10 4 2 2子过程的创建和调用 2 子过程创建Sub子过程名 参数列表 局部变量或常数定义语句 ExitSub 语句EndSub3 子过程的调用子过程名 参数列表 或Call子过程名 参数列表 1 引例编写一个两个数交换的过程供多次调用 Swap x y 子过程的定义主调程序调用Swap子过程PublicSubSwap x y PrivateSubForm Click DimtDima bt xa 10 x yb 20y tCallSwap a b EndSubPrint a a b bEndSub 例4 1 编写一个能找出两个数中大数的子过程 然后在应用程序中调用它 4 2 3参数传递指主调过程的实参传递给被调过程的形参 形参和实参对应关系 1 对应变量名不必相同 但变量个数相等 2 各实参的书写顺序必须和对应的形参顺序一致 且类型相符 1 传址与传值传址 形参得到的是实参的地址 当形参值的改变同时也改变实参的值 传值 ByVal形参得到的是实参的值 形参值的改变不会影响实参的值 4 2 3参数传递 例4 5两个变量的交换 SubSwap1 ByValx ByValy t x x y y tEndSubPrivateSubCommand1 Click a 10 b 20 Swap1a b 传值Print A1 a B1 ba 10 b 20 Swap2a b 传址Print A2 a B2 bEndSub SubSwap2 x y t x x y y tEndSub 4 3变量 过程的作用域作用域 变量 过程随所处的位置不同 可被访问的范围 1 过程的作用域 了解 窗体 模块级 加Private关键字的过程 只能被定义的窗体或模块中的过程调用 全局级 加Public关键字 缺省 的过程 可供该应用程序的所有窗体和所有标准模块中的过程调用 2 变量的作用域局部变量 在过程内用声明的变量 只能在本过程中使用 窗体 模块级变量 在 通用声明 段中用Dim语句或用Private语句声明的变量 可被本窗体 模块的任何过程访问 全局变量 在 通用声明 段中用Public语句声明的变量 可被本应用程序的任何过程或函数访问 例如在下面一个标准模块文件中不同级的变量声明 optionexplicitPublicPaAsinteger 全局变量PrivateMbAsstring 10 窗体 模块级变量SubF1 DimFaAsinteger 局部变量可以访问Pa Mb 不能访问FbEndSubSubF2 DimFbAsSingle 局部变量可以访问Pa Mb 不能访问FaEndSub Subf1 x x f2 xx 3 EndSub SubCommand1 Click Callf1 y EndSub Functionf2 x f2 f3 x 3EndSub Functionf3 x f3 x xEndSub Subf1 x Callf1 y EndSub 过程的直接调用 SubCommand1 Click Callf1 y EndSub 过程的递归调用 4 4递归 1 递归的概念用自身的结构来描述自身就称为 递归 例对阶乘的定义 2 递归过程过程在自身定义的内部调用自己 例4 8编fac n n 的递归函数Functionfac nAsInteger AsIntegerIfn 1Thenfac 1Elsefac n fac n 1 EndIfEndFunction SubCommand1 Click Print fac 4 fac 4 EndSub结果 fac 4 24 递推 回归 fac 2 2 fac 1 fac 1 1 fac 4 4 6 fac 3 3 2 fac 2 2 1 fac 3 3 fac 2 fac 4 4 fac 3 问题 递归方程 写出递归函数 思考若上述fac函数中少了 Ifn 1Thenfac 1即仅有语句 fac n fac n 1 程序运行将造成何结果 由此可见构成递归的结构如下 1 递归结束条件及结束时的值 2 自身的调用 并且递归向终止条件发展 若在不同级声明相同的变量名如 PublicTempAsinteger 全局变量SubForm Load DimTempAsInteger 局部变量Temp 10 访问局部变量Form1 Temp 20 访问全局变量必须加窗体名PrintForm1 Temp Temp 显示2010EndSub 2 数组参数的传递当参数是数组通过传址方式进行传递 注意 在实参和形参中写数组名 忽略维数的定义 但圆括号不能省 被调过程可通过Lbound和Ubound函数确定实参数组的下 上界 Lbound和Ubound函数的形式如下 L U bound 数组名 例6 7编一函数tim 求任意一维数组中各元素之积 调用tim 求和Functiontim a AsInteger Dimt i t 1Fori Lbound a ToUbound a t t a i Nextitim tEndFunction 调用 SubCommand1 Click Dima 1To5 b 3To8 t1 tim a t2 tim b Printt1 t2EndSub 4 子过程与函数过程区别 1 函数过程名有值 有类型 在函数体内至少赋值一次 子过程名无值 无类型 在子过程体内不能对子过程名赋值 2 调用时 子过程调用是一句独立的语句 函数过程不能作为单独的语句加以调用 必须参与表达式运算 3 一般当过程有一个返回值 使用函数过程较直观 反之若过程无返回值 或有多个返回值 使用子过程较直观 4 4用户自定义类型 自定义数据类型一组不同类型变量的集合 相当于C语言中的结构 Struct 类型 当遇到简单数据类型不能表示问题的时候 使用复合数据类型来表示由若干基本数据类型组成 1 自定义类型的定义形式如下 Type自定义类型名元素名 下标 As类型名 元素名 下标 As类型名 EndType例如 以下定义了一个有关学生信息的自定义类型TypeStudTypeNoAsInteger 学号NameAsString 20 姓名SexAsString 1 性别Mark 1To4 AsSingle 4门课程成绩TotalAsSingle 总分EndType 元素名 表示自定义类型中的一个成员下标 表示是数组类型名 为标准类型 2 自定义类型变量的声明和使用 1 声明形式 Dim变量名As自定义类型名例DimStudentAsStudType 2 引用形式 变量名 元素名例表示Student变量中的姓名 第4门课程的成绩 则表示如下 Student Name Student Mark 4 3 自定义类型数组的应用例4 12利用自定义类型数组 编写一个输入 显示程序 例打印分形图二叉树 加密和解密简单加密的思想是 将每个字母C加一序数K 式子c chr Asc c k 例如序数k为5 这时 A F a f B G 当加序数后的字母超过 Z 或 z 则c chr Asc c k 解密为加密的逆过程 常用算法 1 数制转换例将一个十进制整数m转换成r 2 16 进制字符串 方法 将m不断除r取余数 直到商为零 以反序得到结果 4 5常用算法 三 3 查找 1 顺序查找例 顺序查找根据查找的关键值与数组中的元素逐一比较 数组可无序 PublicSubSearch a AsVariant ByValkeyAsVariant index Dimi Fori LBound a ToUBound a Ifkey a i Then 找到 元素的下标在index中 结束查找index iExitSubEndIfNextiindex 1 找不到 index形参的值为 1EndSub平均查找次数n 2 Keya mid low mid 1查找区域缩小一半 继续 直到找到或查找区域中无元素 本例用递归实现6 16Subbirsearch a low high key index 2 二分法查找要查找的数组必须有序 思想 要查找的关键值Key同数组的中间mid项元素比较 444 Key 4 排序选择 冒泡 插入法排序等 前两种排序欲排序的数据全部输入后 再进行排序 插入法排序每输入一项 马上插入到数组应在的位置 数组始终有序 例6 17实现的步骤 1 输入欲排序的数据项x 在数组a中找x应所处的位置j 2 从数组的最后一个元素开始到下标j依次往后移 使j位置空出 3 将x放入位置j处 一个数据插入完成 4 有若干个数重复 1 3 5 例6 18高次方程求根有牛顿迭代法 二分法 弦截法等 1 牛顿迭代法迭代公式 思想 对方程给定一个初值x0作为方程的近似根 利用迭代公式 求得x1 当x1为求得的近似根 否则x1作为x0再迭代 2 二分法求根思想 已知求根区间 a b 有一根 每次把求根区间缩小一半 直到找到解或求根区间足够小 方法 求 a b 的中点c 判断 f c 0 c为求得的根 结束 f a 与f c 同号 则 a c 无根 代替a 否则 c b 无根 c代替b 使求根区间缩小一半 重复上述步骤 直到区间小于精度 PublicFunctionhalfRoot ByVala ByValb Dimc DoWhileAbs b a 0 00001c a b 2Iff c 0ThenExitDoElseIff a f c 0Thena cElseb cEndIfLoophalfRoot cEndFunction 6 例6 19数值积分有矩形法 梯形法 抛物线法 又称辛卜生法 等 梯形法积分的思想是 将积分区间 a b n等分 小区间的长度为 第i块小矩形的近似面积为 整个积分的结果为这n块小面积的累加 即 PublicFunctiontrapez ByVala ByValb ByValn AsSingleDimsum h x h b a nsum f a f b 2Fori 1Ton 1x a i hsum sum f x Nextitrapez sum hEndFunction 7 字符串处理例6 20编写一个英文打字训练的程序 要求如下 1 在标签框内随机产生30个字母的范文 2 当焦点进入文本框时开始计时 并显示当时时间 3 在键入文本框按产生的范文输入相应的字母 4 当键入满了30个字母后结束计时 禁止向文本框输入内容 与范文逐一比较 显示打字的速度和正确率 6 7重点和难点 1 确定自定义的过程是子过程还是函数过程函数过程名有值 子过程名无值 过程有一个返回值 则使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蜘蛛织网过家的启示9篇
- 汉字字形理解:高中语文课文中的汉字书写与意思探究
- 化工厂安全标准化课件
- 奥运赛事场馆安全培训课件
- 2025合同争议解析:餐饮业简化版劳动合同书
- 2025家具买卖合同样本模板
- 2025屋顶防漏维修协议
- 2025授权融资租赁合同书
- 化工厂事故安全教育培训课件
- 大颗粒重庆轻轨课件
- 买家赎楼签协议签合同
- 2025至2030年中国虹膜识别市场深度调查分析及投资前景研究预测报告
- 《3-6岁幼儿学习与发展指南》试题及答案
- (2025年标准)合作办厂简单协议书
- 2025年新职工院感防控及传染病防治知识培训试题及答案
- 2025-2026学年人教版(2024)初中信息科技七年级(全一册)教学计划及进度表(第一学期)
- 2025年公安局招聘警务辅助人员考试笔试试题(含答案)
- 2025国家公务员考试真题(附答案)
- 2025年青岛工会知识竞赛题库
- (标准)干洗店转让合同协议书
- 2025国家民委直属事业单位招聘(48人)考前自测高频考点模拟试题及答案详解1套
评论
0/150
提交评论