第七章过程(何国斌版本)ppt课件_第1页
第七章过程(何国斌版本)ppt课件_第2页
第七章过程(何国斌版本)ppt课件_第3页
第七章过程(何国斌版本)ppt课件_第4页
第七章过程(何国斌版本)ppt课件_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

第七章过程 7 1通用过程7 2常用算法举例 7 1通用过程7 1 1通用过程概念7 1 2参数传递7 1 3过程的嵌套与递归调用7 1 4变量 过程的作用域 引例 已知多边形的各条边的长度 要计算多边形的面积 求三角形面积的代码重复使用了三次 解决办法 对于重复使用的程序段 可以自定义一个过程 供多次调用 7 1 1通用过程概念及分类 Sub过程 子过程 Function过程 函数过程 7 1 1 1Sub过程 1 Sub过程的定义 利用代码窗口直接定义通用过程其格式为 Private Public Static Sub过程名 参数表 语句组 ExitSub 语句组EndSub 利用 工具 菜单下的 添加过程 命令定义过程 2 Sub过程的调用 直接使用过程名调用Sub过程 即把过程名作为一个语句来使用 格式如下 过程名 参数列表 使用Call语句调用Sub过程 格式如下Call过程名 参数列表 例2 编写Sub过程求s 1 2 n 7 1 1 2Function过程 1 Function过程的定义 Public Private Static Function函数名 形参表 As数据类型 语句组 函数名 表达式 ExitFunction 语句组 函数名 表达式 EndFunction 2 Function过程的调用 其格式为 变量名 Function过程名 参数列表 例3 编写Function过程求s 1 2 n 7 1 2参数传递 7 1 2 1形式参数与实际参数的概念 形式参数 简称形参 是指在定义过程时 在过程头 指Sub或Fuction语句行 的参数列表中出现的变量名和数组名 在过程体中被引用 实际参数 简称实参 是调用过程时 在过程名后的参数列表中出现的变量名 数组名 常量或表达式 7 1 2 2参数按地址传递和按值传递1 按地址传递参数2 按值传递参数 1 按地址传递参数 例如 创建一个工程 编写一个交换两变量值的函数过程Swap PrivateFunctionSwap xAsInteger yAsInteger DimtmpAsIntegertmp x x y y tmpEndFunction 然后编写窗体的Load事件过程 调用该函数过程 PrivateSubForm Load DimaAsInteger bAsIntegerShowa 10 b 15Print 调用交换函数过程前 a a b bSwapa bPrint 调用交换函数过程后 a a b bEndSub 2 按值传递参数 例如 把上面调用交换变量值的函数过程Swap修改为按值传递参数 PrivateSubForm Load DimaAsInteger bAsIntegerShowa 10 b 15Print 调用交换函数过程前 a a b bSwap a b 按值传递参数Print 调用交换函数过程后 a a b bEndSub 例 用Do Loop循环编写一个求阶乘的函数过程Fact 并求1 2 n 的值 7 1 2 3传递数组参数 按地址传递 例 编写一个Sub过程 实现对数组元素从小到大排序 例7 7 编写一个Sub过程 实现对数组元素从小到大排序 7 1 3过程的嵌套与递归调用 7 1 3 1过程的嵌套调用 7 1 3 2过程的递归调用 使用递归调用的条件是 可以把要解决的问题转化为一个新的问题 而这个新的问题的解法仍与原来的解法相同 只是所处理的对象有规律地递增或递减 可以用上述转化过程使问题得到解决 有一个明确的结束递归的条件 例7 9 采用递归方法计算n n 0 分析 自然数n的阶乘可以递归定义为 递归调用的执行过程分两部分进行 Fact 4 4 fact 3 Fact 3 3 fact 2 Fact 2 2 fact 1 Fact 1 1 fact 0 Fact 0 1 Fact 4 4 6 Fact 3 3 2 Fact 2 2 1 Fact 1 1 1 边界条件 例7 10 用递归调用方法求两个正整数n和m的最大公约数 分析 通过辗转相除求两个整数最大化的方法 也可以采用递归调用方法来求解 递归终止的条件是余数为0 7 1 4变量 过程的作用域 7 1 4 1代码模块的概念1 窗体模块2 标准模块3 类模块 7 1 4 2变量的作用域1 过程级变量2 模块级变量 7 1 4 3变量的生成期1 动态变量2 静态变量例7 11 7 1 4 4过程的作用域例7 121 模块级过程2 全局过程3 调用其他模块中的过程 7 2常用算法举例 例 数制转换 编写一函数过程 实现一个十进制整数转换成2 16任意进制字符串 例 顺序查找 例 加密和解密 简单的加密算法 将每一个字母加一序数 例如加序数5 这时 A F a f B G Y D Z E TheEnd 习题7一 单选题1 假设已通过下列Sub语句定义了Mysub过程 若要调用该过程 可以采用语句 SubMysub xAsInteger A s Mysub 2 B Mysub 32000 C PrintMysub 120 D Callysub 40000 2 要使过程调用后返回两个参数s和t 下列的过程定义语句中 正确的是 A SubMySub1 ByRefs ByValt B SubMySub1 ByVals ByValt C SubMySub1 ByRefs ByReft D SubMySub1 ByVals ByReft 3 以下程序段运行后 单击窗体显示的结果是 PrivateSubForm Click DimbAsInteger yAsIntegerCallMysub2 3 b y bCallMysub2 4 b Printy bEndSubPublicSubMysub2 x t t 0Fork 1Toxt t kNextEndSubA 13B 16C 19D 21 4 下列程序段运行后 单击窗体时显示的结果是 PublicSubMysub3 ByValxAsInteger yAsInteger x y xy xModyEndSubPrivateSubForm Click DimaAsInteger bAsIntegera 11 b 22CallMysub3 a b Printa bEndSubA 3311B 1111C 1122D 2211 5 下列程序运行后 单击窗体时显示的结果是 PublicSubMysub4 xAsInteger x 3 x 1Ifx 5Thenx x 9Printx EndSubPrivateSubForm Click x 1Mysub43 xPrintxEndSubA 201B 2014C 111D 1114 6 在窗体模块的通用段中声明变量时 不能使用关键字 A DimB PublicC PrivateD Static 7 使用PublicConst语句声明一个全局的符号常量时 该语句应在 A 事件过程中B 窗体模块的通用段中C 标准模块的通用段中D 通用过程中 8 下列论述中 正确的是 A 用户可以定义通用过程的过程名 也可以定义事件过程的过程名 B 一个工程中只能有一个SubMain过程C 窗体的Hide方法和Unload方法的作用完全相同 D 在一个窗体文件中用Private定义的通用过程 可以被其他窗体调用 二 填空题1 下列程序段运行后 单击窗体时显示的结果是 PublicFunctionFn1 x AsStringk Len x Fn1 Mid x 2 k 2 EndFunctionPrivateSubForm Click DimaAsString bAsString sAsStringa ABCDEFG b 12345 s Fn1 a Fn1 b PrintFn1 Fn1 Fn1 s EndSub 2 在窗体上已经建立了3个文本框 Text1 Text2及Text3 和一个命令按钮 Command1 运行程序后单击命令按钮 则在文本框Text1中显示的内容是 在文本框Text2中显示的内容是 在文本框Text3中显示的内容是 PublicSubMySub5 x ByValy a x yx a yy 2 xEndSubPrivateSubCommand1 Click DimbAsInteger cAsIntegerb 1 CallMySub5 b c c a b CallMySub5 c b a a cText1 Text aText2 Text bText3 Text cEndSub 3 运行下列程序段后 单击窗体 显示结果是 再次单击窗体时 显示结果是 去掉StaticTemp语句后 单击窗体 显示结果是 再次单击窗体时 显示结果是 PrivateFunctionFn2 tAsInteger StaticTempTemp Temp tFn2 TempEndFunctionPrivateSubForm Click s Fn2 1 Fn2 2 Fn2 3 PrintsEndSub 4 设在窗体 启动窗体 上有一个命令按钮Command1 在该按钮的Click事件过程中已经写了一些代码 完成一定的功能 现要使程序运行时自动执行该按钮的功能 请在空白处填入合适的语句 PrivateSubForm Load EndSub 5 从键盘输入一个十进制正整数 小于32767 利用过程To hex的递归调用将该数转换为十六进制数 完善下列程序 使之求出正确结果 PublicSubTo hex nAsInteger DimrAsInteger chAsStringch 0123456789ABCDEF r nMod16 n n 16If ThenTo hex EndIfPrintMid EndSubPrivateSubForm Load DimnAsIntegerShown Val InputBox To hex n EndSub 上机编程练习6 1 设计一个能检查字符串是否为数字字符串的通用过程 调用该过程检验3个框中输入的字符是否都是数字 如果都是数字 求这3个数字之和并把结果显示在第4个文本框中 2 编写一个标准模块 该模块包含一个能比较3个数大小和送回大数的Sub过程 调用该过程来求6个数的最大数 利用文本框控件数组和文本框来分别输入数据和输出最大数 3 窗体上含有两个文本框 Textl及Text2 一个列表框 Listl 和一个命令按钮 Commandl 程序运行后 用户在文本框Textl中输入一个字符串 其中包含若干个英文单词 单词之间用空格分隔 单击命令按钮后 分解出这些单词 并依次显示在列表框Listl中 单词个数显示在文本框Text2 完善下列程序代码 PrivateSubCommand1 Click DimsAsStrings Trim Text1 Text List1 Clearn Getword s Text2 Text nEndSub PublicFunctionGetword sAsString AsIntegern 0DoWhilen Len s p InStr s Space 1 n n 1Ifp 0ThenList1 AddItemss ElseList1 AddItemLeft s p 1 s Mid s p 1 EndIfLoopGetword nEndFunction 4 用递归方法编写计算xn的过程 n为正整数 精确到小数点后2位 5 创建一个工程 由3个窗体Forml Form2和Form3组成 Forml用于输入用户名和密码 假设用户名和密码分别为 username 和 password 输入正确时显示Form2 连续三次输入错误时显示Form3 在Forml中单击 结束 按钮时结束程序运行 Form2中用文本框显示 欢迎你使用本系统 单击 返回 按钮回到Forml Form3中用文本框显示 对不起 请向管理员查询 单击 退出 按钮结束程序运行 6 创建一个工程 由两个窗体Forml和Form2组成 用户界面如图7 36所示 添加一个标准模块 在标准模块中定义两个通用过程 一个是Function过程Max 用于求数组a中10个数的最大值 另一个是Sub过程Sort 用于对数组a中10个数按从小到大顺序排序 要求 1 窗体Forml为主窗体 当单击 生成随机数 按钮时 生成10个 11 100 区间内的随机整数 将这10个随机整数存入数组a 同时显示在 随机数 文本框中 单击 求最大数 按钮时 调用标准模块中的Function过程Max 求这10个数的最大数并显示在 最大值 文本框中 当单击 打开排序窗口 按钮时 打开窗体Form2 2 在窗体Form2中 当单击

温馨提示

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

评论

0/150

提交评论