




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
控制结构 VisualBasic提供的控制结构有以下四种 1 顺序结构 2 分支结构 也称为 选择结构 3 循结结构 4 跳转结构 分支结构 If语句 SelectCase语句 循环结构 Do Loop语句 For Next语句 While Wend语句 跳转结构 GoTo语句 GoSub语句 If条件语句 这两种形式的If语句在执行流程方面是相同的 如果 条件表达式 的值为True 则执行 语句块 否则跳过 语句埠 直接执行随后的语句 语句块 可以是一条语句 多条语句 对于单行形式 多条语句必须使用 隔开写在同一行上 例 下面双种形式功能相同 单行形式 IfiMod2 0ThenPrint 偶数 块形式 IfiMod2 0ThenPrint 偶数 语句块EndIf 单行形式的If Then 语句 块行形式的If Then EndIf语句 If条件表达式Then语句块 If条件表达式Then语句块EndIf If条件表达式Then语句组1Else语句组2EndIf如果 条件表达式 的值为True 则执行 语句块1 否则 执行 语句块2 语句组1 与 语句组2 中至少有一组被执行 然后继续执行随后的语句 例 IfiMod2 0ThenPrint 偶数 语句块1ElsePrint 奇数 语句块2EndIf 单行形式的If Then Else 语句 If条件表达式Then语句块1Else语句块2 块形式的If Then Else EndIf语句 打开 例5 1 在If语句的 If语句块 和 Else语句块 中还可以包含另一个If语句 如 If条件1Then If条件2Then Else EndIf Else If条件3Then Else EndIf EndIf If语句的嵌套 例5 2 判断输入数的奇偶性及所在的区间 PrivateSubcmd1 Click Dimint1AsInteger int2AsInteger int1 Cint txt1 Text Ifint1100Thentxt2 Text 这是一个大于100的偶数 Elsetxt2 Text 这是一个不大于100的偶数 EndIfElseIfint1 100Thentxt2 Text 这是一个大于100的奇数 Elsetxt2 Text 这是一个小于100的奇数 EndIfEndIfEndIfEndSub 这是一种多重分支结构 比使用嵌套的If语句更容易理解 If Then ElseIf EndIf语句 If条件1Then语句块1ElseIf条件2Then语句块2ElseIf条件3Then语句块3 ElseIf条件nThen语句块n Else语句块n 1 EndIf 从上到下 第几个条件表达式值为True 就执行相应的第几个语句块 然后执行EndIf下面的语句 如果有不只一个条件表达式的值为True 只有最上面的条件所对应的语句块被执行 如果所有条件表达式的值均不为True 则执行Else关键字下面的 语句块n 1 然后执行EndIf下面的语句 其中Else和 语句块n 1 是可选部分 注意 ElseIf 关键字中间没有空格 不是 Else If SelectCase测试表达式Case表达式1语句块1Case表达式2语句块2 Case表达式n语句块n CaseElse语句块n 1 EndSelectSelectCase语句中包含一个类型为数值或字符串的 测试表达式 开始时计算一次此表达式的值 然后用这个值与各个Case语句之后的 表达式X 比较 如果二者匹配 则执行该Case之后的语句块 然后执行EndSelect之后的语句 如果 测试表达式 中的值与 表达式X 中的多个相匹配 则只执行第一个相匹配的Case之后的语句块 如果没有相匹配的 则执行CaseElse之后的语句 没有CaseElse语句 则直接执行EndSelect之后的语句 SelectCase多重分支语句 SelectCase语句中的 匹配 包括 精确相等 和 在指定区间内 两种情况 具体使用的是哪种情况 由Case后面 表达式 的给定方式决定 Case后面 表达式 的形式可以是以下4种情况之一 1 单个常量 变量或表达式如 Case90和Case Tom 这种情况下 如果测试表达式的值与给出的值相等就认为匹配 2 使用关键字 To 连接的两个值如 Case1To5和Case A To C 这种情况下 关键字 To 连接两个值表示值的范围 闭区间 如果测试表达式的值属于这个区间则认为匹配 3 使用 Is 关键字 比较运算符和数值 字符串构成的表达式如 CaseIs 80和CaseIs 这种情况表示一个开区间 如果测试表达式的值属于该区间便认为匹配 4 以上三种的组合形式 使用逗号分隔 如 Case6 8To9 Is 12 这种情况下 只要由逗号分开的多项中有任何一项与测试表达式匹配 就认为匹配 关于 匹配 的定义 打开 例5 6 打开 例5 7 1 当循环 的第一种形式 DoWhile条件表达式语句块Loop2 当循环 的第二种形式 Do语句块LoopWhile条件表达式两种循环共同的特点是 当每次计算 条件表达式 的值为True或非零数值时 循环执行 语句块 当 条件表达式 值为False或零值时 跳出循环 执行Loop语句后别的语句 二者不同的是 第一种形式 如果条件表达式第一次计算 条件表达式 就为False 则 语句块 不会被执行 第二种形式中 条件测试在后 所以 语句块 至少被执行一次 Do Loop循环语句 3 直到型循环 的第一种形式 DoUntil条件表达式语句块Loop4 直到型循环 的第二种形式 Do语句块LoopUntil条件表达式 直到型循环 与 当循环 不同点是 当每次计算 条件表达式 的值为False或零数值时 循环执行 语句块 当 条件表达式 值为True或非零值时 跳出循环 执行Loop语句后别的语句 直到型循环 的两种不同形式的区别和 当循环 相同 第一种形式中的 语句块 有可能一次都不被执行到 第二种形式中的 语句块 至少被执行一次 5Do Loop形式 Do语句块Loop这种形式是一种 条件永远成立 的循环 需要使用ExitDo语句强制跳出循环 ExitDo语句 ExitDo语句必须放置在Do Loop语句的循环体中 执行到ExitDo时 程序会立即结束循环 跳到Loop后面执行下面的语句 当有多个循环嵌套使用时 ExitDo语句只跳出所在的最内层的Do Loop循环 ExitDo语句不只可以用来结束不使用While和Until关键字的Do Loop语句 也可以用在使用了While或Until关键字的 当型循环 或 直到型循环 中 如果在运行时发生了 死循环 可以使用Ctrl Break组合键返回调试状态 再返回设计状态 For计数器变量 起始值To终止值 Step增量 语句块 循环体 Next 计数器变量 ForNext循环语句使用一个 计数器 变量控制循环 这个变量不能是逻辑值或数组元素 此语句每次自动给计算器变量增加一个 增量 如果变量的值超出给定的 终止值 则退出循环 否则会重复执行 语句块 第一次运行 语句块 时 只进行比较 不改变变量的值 当 增量 是正值或零时 变量的值大于 终止值 时退出循环 当为负值时 变量量的值小于 终止值 时退出 如果 Step增量 省略 按增量为1处理 For Next循环语句 一般地 当事先可以确定循环次数时 使用For Next语句 否则应使用Do Loop循环 ExitFor语句 就像使用ExitDo语句可以强制跳出Do Loop循环一样 对于For Next循环 可以在循环体中使用ExitFor语句 当程序执行到ExitFor语句时立即终止循环 跳到Next下面的语句继续执行 与ExitDo类似 ExitFor语句只能用在ExitFor循环中 并且只能跳出所在的最内层For Next循环 For Next循环的 终止值 和 步长 问题 特别值得注意的是 对于For Next语句来说 一旦进入循环 其 终止值 和 增量 便不会再改变了 例如 在下面的程序段中 循环的 终止值 和 增量 是由变量j和k的值决定的 虽然在循环体中改变了这两个变量的值 但是并不会影响循环次数 10次 终止值 和 增量 仍然是进入循环时两个变量的值 分别是10和1 1DimiAsInteger jAsInteger kAsInteger2j 10 k 13Fori 1TojStepk4Printi5j j 16k k 17Next8Printj k 练习 分析下面程序段结束时窗体上显示的值是多少 2 i2 0Fori 1To 2Step 1i2 i2 1NextPrinti i2 34 1 Fori 1To10i2 i2 1NextPrinti 11 3 i2 0Fori 1To5Step2i2 i2 1NextPrinti 7 4 i2 1Fori 1To10i i 1i2 i2 1NextPrinti i2 116 5 i2 1i3 10i 10Fori 1Toi3i i 1i2 i2 1i3 i3 1NextPrinti i2 116 6 i2 0Fori 1To10i2 i2 1Ifi 6ThenExitForNextPrinti i2 77 7 i2 0i 10Doi2 i2 1LoopWhilei i2Printi2 1 1 嵌套的层数不限 2 内层控制结构必须完全位于外层的一个语句块中 3 多个For Next语句嵌套时 不能重复使用同一个 循环计数器变量 4 为了便于阅读与排错 内层的控制结构应向右缩进 正确的嵌套 循环的嵌套 错误的嵌套 ExitDo语句用于强制结束Do循环 当有多个Do循环嵌套时 只跳出该语句所在的最内层循环并执行对应Loop之后的语句 同理 ExitFor语句用于强制结束For循环 当有多个For循环嵌套时 只跳出该语句所在的最内层循环并执行对应Next之后的语句 当Do循环与For循环嵌套使用时 如果ExitDo语句处于Do循环中的一个For循环中 ExitDo语句同时会跳出For循环 同理 如果ExitFor处于一个For循环内的Do循环中 程序不但跳出当前的For循环 而且会跳出正在执行的处于For循环内部的Do循环 ExitDo和ExitFor语句在循环嵌套时的作用 当程序中有控制结构的互相嵌套时 其执行流程仍严格按照每个控制结构既定的流程进行 下面以两重For Next嵌套为例 演示循环嵌套时的执行流程 多重嵌套的道理是相同的 循环嵌套的执行流程 1PrivateSubForm Click 2DimiAsInteger jAsInteger3Fori 1To34Print i i5Forj 1To36PrintTab j j7Next8Next9EndSub 从这段程序的执行情况可见 外层循环执行一次 如i 1 内层循环要从头循环一遍 如j 1 j 2 j 3 在同一对象或同一个用户定义类型变量上执行一系列的语句 With对象名或自定义类型变量名语句块 可以省略其中的对象名或变量名 EndWithWith语句可以对某个对象执行一系列的操作 如设置属性值 调用方法 而不用重复指出对象的名称 例如 cmd1 Height 2000cmd1 Width 2000cmd1 Caption Hello cmd1 Move0 0 Withcmd1 Height 2000 Width 2000 Caption Hello Move0 0EndWith 注意 一个With语句只能用于一个对象 如果一个对象属于另一个对象 可以使用嵌套的With语句 不要跳入或跳出With块 如果在With块中的语句被执行 但是With或EndWith语句并没有执行 则会产生错误 或不可预知的结果 With语句 PrivateSubcmd2 Click Form1 Height 2000Form1 Width 2000Form1 Caption Hello Form1 Move0 0Form1 cmd1 Height 1000Form1 cmd1 Width 1000Form1 cmd1 Caption OK Form1 cmd1 Move0 0EndSub PrivateSubcmd2 Click WithForm1 Height 2000 Width 2000 Caption Hello Move0 0With cmd1 Height 1000 Width 1000 Caption OK Move0 0EndWithEndWithEndSub With语句的嵌套 例5 15 求一元二次方程的根 一元二次方程的根有下列三种情况 1 当a 0 b 0时 方程无解 2 当a 0 b 0时 方程只有一个实根 3 当a 0时 方程有两个根 两个实根或两个虚根 例5 16 验证质数 如果一个整数n只能被1和n整除 则n为质数 质数又称为素数 规定 1不是质数 2是质数 本程序验证从文本框中输入的正整数是否为质数 在窗体上的文本框txtInput中输入任一大于3的正整数n 然后单击按钮cmdPrime 文本框txtOutput中显示出 n是质数 或 n不是质数 判断n是否为质数比较简单的方法是 用n逐个除以2 n 1之间的每个整数 只要有一个可以整除 则说明n不是质数 如果全部不能整除 则说明n是质数 例5 17 求水仙花数 水仙花数 是指一种三位整数 它各位数字的立方和等于该数本身 编程将所有的水仙花数显示在窗体上 并在文本框中显示个数 水仙花数共有4个 153 370 371和407 控制结构的应用 例5 18 求Fibonacci 菲邦纳契 数列第n项的值 已知Fibonacci数列为 1 1 2 3 5 8 该数列第一项和第二项均为1 从第三项开始 每一项都是前面两项的和 除了数列的前两项之外 其他项可用迭代法求得 例5 19 使用级数求 的值 根据下式 计算圆周率 的近似值 当计算到绝对值小于0 0001的通项时 认为满足精度要求 停止计算 本例的两个重点是 1 对于需要进行 无限次 计算的情况 如何利用给定的 精度 在适当的时刻结束计算 2 如何使程序编制得代码简单 运行效率高 解法一 PrivateSubcmdPi Click DimaAsSingleDimmAsSingleDimnAsIntegern 1Dom 1 2 n 1 a a 1 n 1 mn n 1LoopWhilem 0 0001Text1 Text a 4EndSub PrivateSubcmdPi Click DimaAsSingleDimmAsSingleDimsAsIntegerDimiAsIntegers 1 i 1Dom 1 ia a s mi i 2s sLoopWhilem 0 0001Text1 Text a 4EndSub 解法二 例5 20 将一角钱换成零钱 可以包括含1分 2分 5分中的任意多个面值 共有多少种换法 组成一角的零钱中 最多有10个1分 5个2分 2个5分 判断所有的组合中 总和正好是一角 10分 的情况有多少次即为所求 这类方法称为 穷举法 也称为 列举法 PrivateSubCommand1 Click DimiAsInteger jAsInteger kAsIntegerDimnAsIntegerPrint 1分个数 2分个数 5分个数 Fori 0To10Forj 0To5Fork 0To2Ifi j 2 k 5 10Thenn n 1Printi j kEndIfNextNextNextPrint 共有 n 种方法 EndSub PrivateSubcmdCalc Click Dimx1AsSingle x2AsSingle x3AsSinglex1 0 x2 2Dox3 x1 x2 2If x1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 桡骨头骨折课件
- 2025年公务员考试练习题考试练习题及答案指导
- 2025年融媒体舆情分析笔试高频考点解析集
- 桌球培训课程内容
- 2025年篮球规则试题及答案
- 2025年篮球明星试题及答案
- 2025年注册验船师资格考试(A级船舶检验专业案例分析)综合试题及答案二
- 桃红葡萄酒发酵工艺
- 2025年视觉设计岗位面试常见题
- 栽蒜苗课件教学课件
- 关于推荐评审高级工程师专业技术职务的推荐意见报告
- 少先队辅导员工作记录表(共7页)
- Q∕GDW 10356-2020 三相智能电能表型式规范
- 公开课教学评价表
- 消防验收规范标准(最新完整版)19844
- 教研工作手册
- CINV化疗相关呕吐课件
- 应届毕业生培养计划方案
- 独树一帜的中国画(课堂PPT)
- 生产设备控制程序
- LCM不良命名规范
评论
0/150
提交评论