VB程序设计教程高等教育出版社第4-6章.ppt

上传人:max****ui 文档编号:8303153 上传时间:2020-03-28 格式:PPT 页数:116 大小:1.21MB
返回 下载 相关 举报
VB程序设计教程高等教育出版社第4-6章.ppt_第1页
第1页 / 共116页
VB程序设计教程高等教育出版社第4-6章.ppt_第2页
第2页 / 共116页
VB程序设计教程高等教育出版社第4-6章.ppt_第3页
第3页 / 共116页
点击查看更多>>
资源描述
VisualBasic程序设计教程 第3版 2 第4章VB控制结构 4 1顺序结构4 2选择结构4 3循环结构4 4其它辅助控制语句4 5综合应用4 6程序调试 3 4 1顺序结构 VB具有结构化程序设计的三种程序控制结构 顺序结构 选择结构 循环结构 是程序设计的基础 本章目录 1 顺序结构各语句按出现的先后次序执行 用传统流程图表示为 4 2 选择结构 根据条件决定执行的语句 5 3 循环结构 I 当型循环结构 II 直到型循环结构 根据条件重复执行语句 称为循环体 6 4 1顺序结构一般程序设计语言中顺序结构的语句主要 赋值语句和输入 输出语句等 在VB中赋值语句输入 输出通过 文本框控件 标签控件 InputBox函数 MsgBox函数和过程Print方法等来实现 7 4 1 1赋值语句 形式 变量名 表达式 对象名 属性名 表达式功能 计算表达式的值 再将此值赋给变量或对象属性 给变量赋值和设定属性是VB编程中常见的两个任务 例如 n n 1 计数累加Text1 Text 清除文本框的内容Text1 Text 欢迎使用VB 文本框显示字符串 本章目录 8 赋值语句注意点 符号有两个意义 赋值号与表示等于的关系运算符都用 表示 系统会根据所处的位置判断符号的意义 赋值号左边只能是变量 不能是常量 常数符号 表达式 下面均为错误的赋值语句 Now x y 左边是表达式 函数 5 sqr s x y 左边是常量X y z 左边是表达式 本章目录 9 赋值语句的两个常见形式 1 累加sum sum x 2 计数n n 1 10 4 1 2数据的输入和输出 1 标签和文本框 1 标签利用标签的Caption属性输出数据 2 文本框利用文本框的Text属性获得用户输入的数据或将计算的结果输出 例如 r Val Text1 Text 11 2 输入对话框InputBox函数其作用是打开一个对话框 等待用户输入 返回字符串类型的输入值 形式 InputBox 提示 标题 默认值 x坐标位置 y坐标位置 本章目录 注意 提示项不能省略 若要多行提示 可在每行行末加回车换行vbCrLf 例4 1利用InputBox输入基本工资和营业额 按营业额的5 提成 计算实发工资并显示 12 作用 打开一个消息框 等待用户选择一个按钮 MsgBox函数返回所选按钮的值MsgBox过程不返回值MsgBox函数形式 变量 MsgBox 提示 按钮 标题 MsgBox过程形式 MsgBox提示 按钮 标题 按钮项是一整型表达式 决定信息框按钮的数目和类型及出现在信息框上的图标形式 3 消息对话框MsgBox函数和过程 13 MsgBox按钮设置 14 MsgBox所选按钮返回值 例4 2编一账号和密码输入的检验程序 当输入不正确 如账号为非数字字符 密码不正确等 显示有关信息 再输入 15 4 Print方法 作用 在对象上输出信息 形式 对象 Print Spc n Tab n 输出列表 其中 对象 窗体 图形框或打印机 缺省为窗体 Spc n 函数 从当前位置起空n个空格Tab n 函数 从最左端开始计算的第n列分号 定位在上一个被显示的字符之后逗号 定位在下一个打印区开始处 每区14列 Print语句尾无分号或逗号 输出后换行例4 3Print方法输出图形利用String函数显示重复字符利用循环结构 Spc Tab函数显示有规律图形 16 5 Format格式输出函数 形式 Format 表达式 格式字符串 常用数值格式化符及举例 例4 4利用Format函数显示数值 17 4 2选择结构 计算机要处理的问题往往是复杂多变的 仅采用顺序结构是不够的 必须利用选择结构等来解决实际应用中的各种问题 VB中主要通过If条件语句和Select情况语句来实现 它们都是对条件进行判断 根据判断结果 选择执行不同的分支 本章目录 18 4 2 1If条件语句 1 If Then语句 单分支结构 IfThen语句块 可以是一句或多句语句 EndIf或IfThen表达式 关系表达式 逻辑表达式 算术表达式 表达式值按非零为True 零为False进行判断 该语句的作用是当表达式的值为True 执行Then后面的语句块 否则不做任何操作 IF演示 19 单分支结构 例 已知两个数x和y 比较它们的大小 使得x大于y Ifx yThent xx yy tEndIf或Ifx yThent x x y y t简单If形式无EndIf时 只能是一句语句或语句间用冒号分隔 而且必须在一行上书写 20 双分支结构 2 If Then Else语句If表达式Then语句块1Else语句块2EndIf或If表达式Then语句1Else语句2当表达式的值为True时 执行Then后面的语句块1 否则执行Else后面的语句块2 21 双分支结构例 计算分段函数 单分支y cos x x 3 3 x结构实现Ifx0Theny sin x sqrt x x 1 Ifx0Then双分支y sin x sqr x x 1 Else结构实现y cos x x 3 3 xEndIf 22 多分支结构 3 If Then ElseIf语句If表达式1Then语句块1ElseIf表达式2Then语句块2 Else语句块n 1 EndIf 作用 根据不同的表达式值确定执行哪个语句块 23 例4 7已知变量ch中存放了一个字符 判断该字符是字母字符 数字字符还是其他字符 IfUCase ch A AndUCase ch 0 Andch 9 Then 数字字符MsgBox ch 是数字字符 Else 除上述字符以外的字符MsgBox ch 是其他字符 EndIf 不管有几个分支 依次判断 当某条件满足 执行相应的语句 其余分支不再执行 若条件都不满足 且有Else子句 则执行该语句块 否则什么也不执行 ElseIf不能写成ElseIf 多分支结构例 24 指If或Else后面的语句块中又包含If语句 If表达式1ThenIf表达式2Then EndIf EndIf Ifx yThent x x y y tIfy zThent y y z z tIfx yThent x x y y tEndIfEndIf If语句的嵌套 例已知x y z三个数 使得x y z用一个IF语句和一个嵌套的IF语句实现 25 4 2 2SelectCase语句 SelectCase变量或表达式Case表达式列表1语句块1Case表达式列表2语句块2 CaseElse语句块n 1 EndSelect 表达式列表与变量或表达式的类型必须相同 是下面4种形式之一 表达式例 A 一组用逗号分隔的枚举值2 4 6 8表达式1To表达式260To100Is关系运算符表达式Is 60 26 SelectCase语句例 将例4 7改用SelectCase语句实现 SelectCasechCase a To z A To Z MsgBox ch 是字母字符 Case 0 To 9 MsgBox ch 是数字字符 CaseElseMsgBox ch 是其他字符 EndSelect多分支结构 用SelectCase语句比If Then ElseIf语句直观 程序可读性强 但不是所有的多分支结构均可用SelectCase语句代替If Then ElseIf语句 27 SelectCase语句例 例4 9判断坐标点 x y 落在哪个象限 代码一Ifx 0Andy 0ThenMsgBox 在第一象限 ElseIfx0ThenMsgBox 在第二象限 ElseIfx0Andy 0ThenMsgBox 在第四象限 EndIf 代码二SelectCasex yCasex 0Andy 0MsgBox 在第一象限 Casex0MsgBox 在第二象限 Casex0Andy 0MsgBox 在第四象限 EndSelect 代码二错误 1 SelectCase后不能出现多个变量2 Case后不能出现变量及有关运算符 28 4 2 3条件函数 1 IIf函数IIf 表达式 表达式为真时的值 表达式为假时的值 IIf函数是If Then Else结构的简洁表示例如 将x y中大的数 放入Tmax变量中 Tmax IIf x y x y 该语句与如下语句等价 Ifx yThenTmax xElseTmax y 29 4 2 3条件函数 2 Choose函数Choose 整数表达式 选项列表 根据表达式的值i 返回选项列表中第i个选项 如果整数表达式的值越出选项范围时 返回Null 例根据Nop的值 得到 中的某运算符 Op Choose Nop 例4 10根据当前日期 显示今日是星期几 t Choose Weekday Now 星期日 星期一 星期二 星期三 星期四 星期五 星期六 MsgBox 今天是 Now t DimnopAsInteger opAsCharRandomize nop Int Rnd 4 1 op Choose nop MsgBox nop nop op op 30 4 3循环结构 计算机最擅长的功能之一就是按规定的条件 重复执行某些操作 例如 按照人口某增长率 对人口增长统计 根据各课程的学分 绩点和学生的成绩 统计每个学生的平均绩点等 这类问题都可通过循环结构来方便地实现 VB中提供了主要两类循环语句 For循环语句 一般已知循环次数 Do条件型循环语句 一般未知循环次数 31 4 3 1For循环语句 For循环语句用于控制循环次数预知的循环结构 For循环变量 初值To终值 Step步长 语句块 ExitFor 语句块Next循环变量循环变量必须为数值型 循环次数 例4 11计算1 100的奇数和 Dimi sum Fori 1To100Step2sum sum iNextiMsgBox sum 32 For循环语句 循环流程 1 循环变量被赋初值 它仅被赋值一次 2 判断循环变量是否在终值内 如果是 执行循环体 如果否 结束循环 执行Next的下一语句 3 循环变量加步长 转 2 继续循环 33 4 3 2Do Loop循环语句 Do循环用于控制循环次数未知的循环结构 形式1 Do While Until 语句块 ExitDo语句块 Loop形式1为先判断后执行 有可能一次也不执行 形式2为先执行后判断 至少执行一次 形式2 Do语句块 ExitDo语句块 Loop While Until 34 Do Loop流程 35 循环例题 例4 13我国有13亿人口 按人口年增长0 8 计算 多少年后我国人口超过26亿 解此问题两种方法 可根据公式 直接利用标准函数对数可求得 但求得的年数不为整数 也可利用循环求得 36 4 3 3循环的嵌套 在一个循环体内又包含了一个完整的循环结构称为循环的嵌套 循环嵌套对For循环语句和Do Loop语句均适用 例4 14打印九九乘法表 思考 打印上三角或下三角程序如何改动 37 4 4其他辅助控制语句 4 4 1GoTo语句无条件地转移到标号或行号指定的那行语句 GoTo 标号 行号 注意 标号是字符序列 首字符必须为字母 标号后应有冒号 行号是一个数字序列 例4 15判断输入的数是否为素数素数就是除1和本身以外 不能被其他任何整数整除的数 根据此定义 判别某数m是否为素数最简单的方法就是依次用i 2 m 1去除 只要有一个数能整除m m就不是素数 否则m是素数 要求一定范围内的素数 只要将m作为外循环体变量 38 4 4 2退出和结束语句 1 Exit语句VB中有多种形式的Exit语句 用于退出某种控制结构的执行 Exit的形式如下 ExitFor ExitDo ExitSub ExitFunction2 End语句独立的End语句用于结束一个程序的运行 它可以放在任何事件过程中 39 4 5综合应用 例4 16由计算机自动产生四则运算题 并能判断答案的正确性 设计思路 1 为了减少输入和增加试题内容的随机性 通过随机函数Rnd产生试题的操作数和运算符 操作数范围是1 10 运算符 可对应编号1 4 产生表达式通过Form Load事件过程 2 当产生表达式后 学生在文本框内输入结果后按回车键 在图形框显示正确与否的判断结果 3 当单击 计分 按钮时 计算机显示得分结果 本题主要将随机函数 If语句 Select语句综合在一起使用 本章目录 40 4 5综合应用 级数求和 例4 18求自然对数e的近似值 其误差小于0 00001 近似公式 分析 本例涉及到程序设计中两个重要运算 累加 连乘i 累加 在原有和的基础上再加一个数 连乘 在原有积的基础上再乘以一个数 该题先求i 再将1 i 进行累加 循环次数未知 可先设置一个次数很大的值 然后在循环体内判断是否到达精度 也可用DoWhile来实现 41 4 6程序调试 随着程序的复杂性提高 程序中的错误也伴随而来 对初学者 看到出现错误不要害怕 关键是如何改正错误 失败是成功之母 上机的目的 不光是为了验证你编写的程序的正确性 还要通过上机调试 学会查找和纠正错误的方法和能力 VB为调试程序提供了一组交互的 有效的调试工具 42 4 6 1错误类型 语法错误 运行时错误和逻辑错误三类 1 语法错误 43 2 运行错误 指令代码执行了一非法操作引起的 例如 类型不匹配 试图打开一个不存在的文件等 程序会自动中断 并给出有关的错误信息 44 3 逻辑错误 程序运行后 得不到所期望的结果 这说明程序存在逻辑错误 例如 运算符使用不正确 语句的次序不对 循环语句的起始 终值不正确等 通常 逻辑错误不会产生错误提示信息 故错误较难排除 需要程序员仔细地阅读分析程序 并具有调试程序的经验 45 4 6 2调试和排错 VB的三种模式1 设计模式 设计 可以进行程序的界面设计 属性设置 代码编写等 2 运行模式 运行 执行启动命令进入运行模式 在此阶段 可以查看程序代码 但不能修改 3 中断模式 Break 执行中断命令 进入中断模式 在中断模式下可以查看代码 修改代码 检查数据 本章目录 46 调试和排错 插入断点 鼠标指向所关心的变量 本章目录 47 本章小节 结构化程序设计三种结构顺序结构 选择结构 循环结构If Then语句 SelectCase语句 For与Do循环语句赋值语句与复合赋值语句数据输出和输入InputBox MsgBox常用算法素数判定 级数求和 试凑法 迭代法解方程 48 第5章数组和自定义类型 5 1数组的概念5 2数组的基本操作和排序5 3列表框和组合框控件5 4自定义类型及其数组5 5综合应用 本章目录 49 5 1数组的概念 1 引例例5 1求100个学生的平均成绩 并统计高于平均分的人数 用简单变量和循环 求平均成绩程序段如下 aver 0Fori 1To100mark InputBox 输入学生成绩 aver aver markNextiaver aver 100问题 1 mark只能放一个学生的成绩 无法统计高于平均分的人数 2 若用简单变量保存100个学生的成绩 则需定义100个变量和使用100句输入语句 由此引入了数组 本章目录 50 用数组解决问题的程序如下 Dimmark 99 AsInteger 声明数组markDimaver overn i aver 0Fori 0To99 输入成绩 求分数和mark i InputBox 输入学生的成绩 aver aver mark i Nextiaver aver 100 求100人的平均分overn 0Fori 0To99 统计高于平均分的人数Ifmark i averThenovern overn 1NextiMsgBox 平均分 aver 高于平均分人数 overn 本章目录 51 数组 不是一种数据类型 而是一组相同类型的变量的集合 作用 用一个数组名代表逻辑上相关的一批数据 用下标表示该数组中的各个元素 和循环语句结合使用 使得程序书写简洁 使用 必须先声明后使用按声明时数组的大小确定与否 分为两类数组 静态 定长 和动态 可变长 本章目录 52 5 1 2定长数组及声明 静态 定长 数组 声明时就确定了大小的数组 一维数组Dim数组名 下标下界To 上界 As类型 说明 下标下界缺省为0 下标上界为常数 数组大小为 下标上界 下标下界 1 作用 声明了数组名 类型 维数 数组大小在内存分配一块连续的区域 本章目录 53 例 Dimmark 99 AsInteger声明了一维定长整型数组mark 共有100个元素 下标范围为0To99 mark数组的各元素是mark 0 mark 1 mark 99 mark i 表示由下标i的值决定是哪一个元素 mark数组内存分配如下 每个数组元素有一个唯一的顺序号 下标不能超出数组声明时的上 下界范围 否则会产生 下标越界 错误 数组元素的使用规则与同类型的简单变量相同 本章目录 54 多维数组声明 Dim数组名 下标1 下标2 As类型 下标数决定了数组的维数 数组的大小为每一维大小的乘积 例Dimx 2 4 AsLong声明了一个长整型的二维数组x 共占据3 5个长整型变量的空间 本章目录 55 注意 1 下界缺省为0 也可在重新定义数组的下界 例如 OptionBase1 2 错误的声明 下标是变量 n Inputbox 输入n Dimx n AsSingle 56 动态数组 声明时未给出其大小的数组 当需要使用时再用ReDim语句指出数组大小 优点 可根据用户需要 有效地利用存储空间 它是在程序运行到ReDim语句时分配空间 而定长数组是在程序编译时分配空间 5 1 3动态数组及声明 57 1 用Dim语句声明数组 但不能指定数组大小形式 Dim数组名 As数据类型 2 用ReDim语句动态地分配元素个数形式 ReDim数组名 下标 下标2 例 Dims AsSingleSubForm Load ReDims 4 8 EndSub 建立动态数组要分两步 58 定义动态数组大小注意 Dim是说明语句 可出现在程序的任何地方 而ReDim是执行语句 只能在过程中在过程中可多次使用ReDim语句来改变数组的大小 每次使用ReDim语句都会使原来数组中的值丢失 可在ReDim后加Preserve参数用来保留原来的数据 若使用Preserve参数后 只能改变最后一维的大小 例5 2编一个程序 显示有n个数的非波那契数序列 59 数组定义时用数组名表示整体 但在具体使用时针对每个数组元素进行 数组元素的引用形式为 数组名 下标 下标2 数组的赋值Array函数 见P103 形式 变量名 Array 常量列表 注意 1 变量名必须声明为Variant类型 并作为动态数组 2 数组的下界默认为0 上界由参数个数决定 下界和上界可通过函数Lbound和Ubound获得 3 常量列表用逗号分隔 5 2数组的基本操作 60 2 数组的输入通过TextBox控件或InputBox函数输入Dims 3 4 ASIntegerFori 0To3Forj 0To4s I j Val InputBox 输入 i j 元素 NextjNexti说明 对大量数据的输入一般不用InputBox函数 61 3 数组的输出 例5 3形成5 5的方阵 分别输出方阵中各元素 上三角和下三角元素 方阵规律 第一行的元素为0 4 以后每一行是前一行对应元素增加5上三角规律 每一行的起始列与行号相同 只要控制内循环的初值用Tab函数或Space定位控制输出的空格 62 4 求数组和 最小值 位置及交换元素 例5 4求一维数组中各元素之和 最小数组元素 并将最小值数组元素与数组中第一个元素交换求元素和通过循环将每个元素进行累加求数组中最小元素假设第一个元素为最小 然后将该数与其他元素逐一比较 若发现小于最小值 就用新值替换最小值 同时记录下标值 求最大值的方法与求最小值相似 63 本章目录 64 5 数组排序 排序是将一组数按递增或递减的次序排列 例如按学生的成绩 球赛积分等排序 排序的算法有许多 常用的有选择法 冒泡法 插入法 合并排序等 1 选择法排序基本思想 每次在若干个无序数中找最小 大 数 并放在相应的位置 65 例对于有n个数的数组 按递增次序排序的步骤 从n个数中找出最小数的下标 最小数与第1个数交换位置 通过这一轮排序 第1个数已确定好 2 除已排序的数外 其余数再按步骤1 的方法选出最小的数 与未排序数中的第1个数交换位置 3 重复步骤2 n 1遍 最后构成递增序列 如原始序列 869327第1遍排序后 269387第2遍排序后 239687 66 例5 5对已知存放在数组中的6个数 用选择法按递增顺序排序 选择法排序过程示意 67 2 冒泡法排序 基本思想是 1 从第一个元素开始 对数组中两两相邻的元素比较 将值较小的元素放在前面 值较大的元素放在后面 一轮比较比较完毕 一个最大的数沉底成为数组中的最后一个元素 一些较小的数如同气泡一样上浮一个位置 2 n个数 经过n 1轮比较后完成排序 68 冒泡法排序 例5 6用冒泡排序法实现例5 5的问题 69 3 插入数据 插入数据基本思想是 1 首先查找待插入数据在数组中的位置k 2 然后从最后一个元素开始往前直到下标为k的元素依次往后移动一个位置 3 第k个元素的位置腾出 将数据插入 例5 7在有序数组a中插入数值x 本章目录 70 4 删除数据 删除操作首先也是要找到欲删除的元素的位置k 然后从k 1到n个位置开始向前移动 最后将数组元素减1 例5 8要将值为13的元素删除 本章目录 71 5 3列表框和组合框 列表框和组合框实质是一维字符串数组的使用列表框可显示多个选项供用户选择 不能直接修改其中的内容 组合框组合了文本框和列表框的特性而形成的一种控件 72 1 列表框和组合框重要属性 1 List该属性是一个字符型数组 下标从0开始 存放列表框的项目 2 ListIndex 表示执行时选中的列表项的序号 若未选中任何项 则ListIndex的值为 1 该属性只能在程序中设置或引用 3 ListCount 列表框中项目的数量 4 Sorted 为True时 则项目按字母顺序排列显示 否则 按加入的先后顺序显示 5 Text 被选定的文本内容 73 列表框特有的属性MultiSelect属性组合框特有的属性组合框有3种式样 由Style属性决定 下拉式组合框 简单组合框和下拉式列表框 74 List1 ListIndex 2List1 ListCount 6List1 Sorted FalseList1 Text为 C C 程序设计 List1 List List1 ListIndex 等于List1 Text 本章目录 75 2 常用方法 AddItem方法把一个项目加入列表对象 AddItem项目字符串 索引值 索引值 决定新增项在列表中的位置 如果省略 则新增项目添加在最后 RemoveItem方法删除列表中指定项目对象 RemoveItem索引值Clear清除列表中所有项目例如 List1 Clear 全部清除 76 3 重要事件 列表框 Click DblClick组合框 Click例5 9编写一个能对列表框进行项目添加 修改和删除的应用程序 关键 1 获得选中的下标ListIndex2 不能直接修改列表框 先将选项显示在文本框中 更改文本框中内容后 再更新列表框 77 4 应用 例5 12使用组合框对省和直辖市名称管理 78 5 4自定义类型及数组 1 概念和定义数组存放性质相同的数据集合 若不同类型信息作为一个整体来描述 例如姓名 性别 出生年月等 通过Type语句来实现 79 Type自定义类型名元素名1As数据类型名 元素名nAs数据类型名EndType其中 元素名 表示一个成员 可以是简单变量 也可是数组说明符 数据类型名 既可是标准类型 也可是已定义的自定义类型 若为字符串类型 应为定长字符串 80 例如 定义一个有关学生信息的类型 TypeStudType StudType为自定义类型名NameAsString 5 姓名SexAsString 1 性别TelephoneAsLong 电话SchoolAsString 10 学校EndType注意 自定义类型不能在过程内定义 一般放在标准模块文件 默认为Public 若在窗体模块的通用声明段定义 必须加Private 本章目录 81 2 自定义类型变量的声明 定义了自定义类型 就可在变量的声明时使用 形式 Dim变量名As自定义类型名例如 如下语句 DimS1AsStudType S2AsStudType声明S1 S2为两个同种类型的变量 82 注意 不要混淆StudType和S1 前者如同Integer等的类型名 后者根据该类型分配所需的内存空间 存储各成员数据 2 类型变量和数组相同之处它们都是由若干个成员组成 不同之处 前者的成员代表不同性质 不同类型的数据 以各个不同的成员名表示 而数组一般存放的是同种性质 同种类型的数据 以下标表示不同的元素 83 3 自定义类型变量成员的引用 引用自定义类型变量中的某个成员 形式如下 自定义类型变量名 成员名例如 S1 Name S1变量中的姓名S1 Sex 性别可利用With语句简化成员引用 With变量名语句块EndWith WithS1 Name 张华 Sex 男 School 同济大学 EndWith 84 4 自定义类型数组及应用 自定义类型数组就是数组中的每个元素是自定义类型例5 13用自定义类型数组 查询和显示学生信息分析 自定义一个记录类型 由姓名 性别 电话 学校组成 声明一个存放100个记录的数组 85 5 5综合应用 大量数据输入和编辑 问题 InputBox一次输入一个数据 而后不能修改一个文本框也只能输入一项改进 可利用文本框 字符串函数通过编程实现 例5 15在文本框输入数据 并允许修改和自动识别非数字数据 输入结束将它们按分隔符分离后存放在数组中 利用Keyascii参数过滤非法数据 文本框本身具有编辑功能 利用Replace函数去除重复输入的分隔符 利用Split函数将输入的内容分离到数组中 86 第六章过程 6 1函数过程的定义与调用6 2子过程的定义与调用6 3参数传递6 4递归6 5综合应用 87 过程的引入 使同类的操作不重复编写 写一次多次用把一项复杂的工作分成简单的功能块 分而治之过程 完成一段独立功能 可供其他过程使用 调用 调用过程 调用其他过程的过程 88 引例6 1已知多边形各条边的长度 计算多边形的面积 计算多边形面积 可将多边形分解成若干个三角形 计算三角形面积的公式如下 本章目录 可将需重复计算三角形面积的功能自定义为一个过程 供事件过程多次调用 89 常用过程分类 Sub过程 Function过程 事件过程自定义子过程 内部函数 标准函数 自定义函数过程 1 过程是一段程序代码 是相对独立的逻辑模块 2 一个完整的VB应用程序由若干过程和模块组成 本节主要介绍用户自定义的Sub子过程 完成一定的操作和功能 无返回值 Function函数过程 完成一定的操作和功能 并且可将数据处理的结果返回 90 有两种方法 1 利用 工具 菜单的 添加过程 命令定义生成一个函数的框架 2 利用代码窗口直接定义 函数过程形式为 Public Private Function函数过程名 形参列表 As类型 局部变量或常数定义语句块1函数名 表达式函数过程体 ExitFunction 语句块2函数名 表达式EndFunction 6 1函数过程的定义和调用1 函数过程的定义 91 其中 a 函数过程名 与变量命名规则相同 b As类型 函数返回值的类型 c 形参列表形式为 ByVal 变量名 As类型 ByVal 变量名 As类型 形参只能是变量或数组名 ByVal表示当过程被调用时此参数是值传递 否则是地址传递 函数过程无参数时 过程名后的括号不能省略 d 在函数体内至少对函数名赋值一次 92 定义函数过程areaFunctionarea x y z AsSingleDimc c 1 2 x y z area Sqrt c c x c y c z EndFunction 例如 定义计算三角形面积的函数过程 93 2 函数过程的调用函数过程的调用与使用标准函数相同 形式如下 函数过程名 参数列表 如 s1 area a b c 见P126 因函数过程名返回一个值 故函数过程不能作为单独的语句调用 必须作为表达式或表达式的一部分来构成语句 94 函数过程的调用 例6 3编一函数 统计字符串中汉字的个数 分析 在VB中 字符以Unicode码存放 每个汉字和英文是一个字符 占有两个字节 区别是汉字的机内码最高位为1 若利用Asc函数求其码值为小于0 以补码表示 而西文字符的最高位为0 Asc函数求其码值为大于0 本章目录 95 6 2子过程的定义与调用 6 2 1引例以下情况使用函数过程存在不便 不是为了获得某个函数值 而是为了某种功能的处理 要获得多个结果 VB中提供了使用更灵活的子过程 例6 4编一过程 对Label1控件进行移动 通过参数Tag的值 1或 1 决定移动方向 该过程不是为了计算获得某个结果 而是进行对控件移动的处理 本章目录 96 6 2 2子过程的定义 子过程定义的方法同函数过程 形式如下 Public Private Sub子过程名 形参列表 局部变量或常数定义语句 ExitSub 语句EndSub子过程名 形参同函数过程中对应项的规定 当无形参时不要括号 本章目录 97 子过程与函数过程的区别 把某功能定义为函数过程还是子过程 没有严格的规定 一般若程序有一个返回值时 函数过程直观 当有多个返回值时 习惯用子过程 函数过程必须有返回值 函数名有类型 子过程名没有值 过程名没有类型 不能在子过程体内对子过程名赋值 本章目录 98 子过程的调用是一句独立的调用语句 有两种形式 Call子过程名 实参列表 子过程名 实参列表 用Call关键字时 若有实参 则实参必须用圆括号括起 无实参圆括号省略 注意 若实参要获得子过程的返回值 则实参只能是变量 与形参同类型的简单变量 数组名 结构类型 不能是常量 表达式 也不能是控件名 6 2 3子过程调用 本章目录 99 例6 5分别编一统计字符串S中定冠词The出现个数的子过程和函数过程 并分别调用 处理方法 利用InStr函数反复在字符串S找The子串 分析 对同一问题定义两种过程时 只要抓住函数过程和子过程的区别 即函数名有一个值 子过程名无值的特点 当定义好函数过程后 要改为子过程 只要将函数过程的返回结果作为子过程的形参 即在子过程中增加一个参数 反之也然 本章目录 100 6 3参数传递 6 3 1形参与实参在参数传递中 一般是按位置传送 按实参的位置次序与形参的位置次序对应传送 与参数名没有关系 按位置传送是最常用的参数传递方法 如在调用标准函数时 用户根本不知道形参名 只要关心形参的个数 类型 位置 例如Mid函数形式 Mid 字符串 起始位 取几位 调用语句 s Mid ThisisVB 9 2 则s中的结果为 VB 本章目录 101 6 3 2传址与传值 实参与形参的结合有传址 ByRef 和传值 ByVal 两种方法 传址方式参数结合过程当调用一个过程时 它将实参的地址传递给形参 因此在被调过程体中对形参的任何操作都变成了对相应实参的操作 实参的值就会随过程体内对形参的改变而改变 传值方式参数结合过程当调用一个过程时 系统将实参的值复制给形参 实参与形参断开了联系 在过程体内对形参的任何操作不会影响到实参 本章目录 102 例6 6传址与传值 本章目录 形参获得实参的值 形参获得实参的地址 103 传址与传值 选用传值还是传地址一般进行如下考虑 要将被调过程中的结果返回给主调程序 则形参必须是传址方式 这时实参必须是同类型的变量名 包括简单变量 数组名 结构类型等 不能是常量 表达式 不希望过程修改实参的值 则应选用传值方式 减少各过程间的关联 因为在过程体内对形参的改变不会影响实参 形参是数组都是地址传递 可表示值传递或地址传递 本章目录 104 例6 7如下sum子过程求数组a各元素和 并改变数组各元素值 Functionsum ByValx AsInteger Dimi sum 0Fori 0ToUBound x sum x i x i 2 x i NextiEndFunction 6 3 3数组参数的传递 本章目录 105 形参是数组要以数组名加圆括号表示 不要给出维数上界 多维数组 每维以逗号分隔 在过程中通过Ubound函数确定每维的上界 实参是数组要给出数组名 不需要圆括号 当数组作为参数传递时 系统将实参数组的起始地址传给过程 使形参数组也具有与实参数组相同的起始地址 数组参数的传递 形参数组实参数组 本章目录 106 6 3 4变量的作用域 过程级变量在一个过程内用Dim或Static语句声明的变量 只能在本过程中使用模块级变量在模块内 任何过程外用Dim Private语句声明的变量 可被本模块的任何过程访问全局变量在模块级用Public语句声明的变量 可被应用程序的任何过程或函数访问 本章目录 107 变量的作用域 例如在下面一个标准模块文件中不同级的变量声明 PublicPaAsinteger 全局变量PrivateMbAsstring 10 窗体 模块级变量SubF1 DimFaAsinteger 过程级变量 EndSubSubF2 DimFbAsSingle 过程级变量EndSub 本章目录 108 6 3 5静态变量 静态变量程序运行过程中可保留变量的值声明形式 Static变量名 AS类型 用Dim声明的变量 每次调用过程时重新初始化例6 12比较Dim和Static两者的区别 编一程序 利用局部变量Count统计单击窗体的次数 本章目录 109 递归过程在自身定义的内部调用自己 例6 12编fac n n 的递归函数Functionfac nAsInteger AsIntegerIfn 1Thenfac 1Elsefac n fac n 1 EndIfEndFunction 6 4递归 用自身的结构来描述自身就称为递归 最典型的例子是阶乘运算 作如下的定义 本章目录 110 递推过程 每调用自身 当前参数压栈 直到达到递归结束条件 回归过程 不断从栈中弹出当前的参数 直到栈空 递归算法设计简单 但消耗的机时和占据的内存空间比非递归大由此可见构成递归的结构如下 递归结束条件及结束时的值 能用递归形式表示 并且递归向终止条件发展 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 本章目录 递归结构 111 6 5综合应用 1数制转换不同进制数之间的转换 可通过编程来实现 也可通过VB提供的内部函数 十进制转换为八进制函数 Oct 转换为十六进制函数 Hex 来实现 例6 13编一函数 实现一个十进制整数转换成二至十六任意进制的字符 分析 十进制正整数m转换成r进制数 将m不断除r取余数 若余数超过9 还要进行相应的转换 例如10变成A 11变成B等 直到商为零 以反序得到结果 即最后得到的余数在最高位 本章目录 动画演示 112 综合应用 加密 2 加密和解密信息加密是信息安全性的措施之一 信息加密有各种方法 最简单的加密方法是将每个字母平移一个位置 称为密钥 例如 后移5个位置 这时 A F B G Y D Z E a f 解密是加密的逆操作 例6 14编一加密和解密的程序 即将输入的一行字符串中的所有字母加密 加密后还可再进行解密 本章目录 113 Welcomestud W C 87 IAsc Asc C 92 5 IAsc 90IAsc IAsc 26 B 对取得的一个字符 放入变量 中 加密的过程如左 C Chr IAsc 114 综合应用 查找 3 查找什么是查找 查找是在线性表 在此为数组 中 根据指定的关键值 找出与其值相同的元素 查找方法 一般有顺序查找和二分法查找 顺序查找根据查找的关键值与数组的元素逐一比较 若相同 查找成功 若找不到 则查找失败 例6 15实现顺序查找 115 综合应用 字符处理 4 字符处理应用例6 16编写一个英文打字训练的程序 要求如下 1 在标签框内随机产生30个字母的范文 2 当焦点进入输入文本框时开始计时 并显示当时的时间 3 当输入了30个字母时结束计时 禁止向文本框输入内容 显示打字的速度和正确率 此题关键是 对输入的字符串与随机产生的字符串 一一对应比较 判断输入正确与否 本章目录 116 思考题 1 为什么是要使用过程 2 简述子过程和函数过程的异同点 3 什么是形参 什么是实参 实参与形参之间怎样传值 4 按变量声明的位置可分为哪几种变量 5 什么是静态变量 如何声明静态变量 本章目录
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!