




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第5章章 选择分支与循环选择分支与循环2本章主要内容本章主要内容5.1 分支结构与分支结构语句分支结构与分支结构语句5.2 循环结构与循环结构语句循环结构与循环结构语句5.3 程序示例程序示例35.1 分支结构与分支结构语句分支结构与分支结构语句 分支结构是程序的基本算法结构之一。分支结构是程序的基本算法结构之一。vb提供提供了实现分支结构的相关语句。了实现分支结构的相关语句。if-then-else-end if 结构语句结构语句select-case-end select 结构语句结构语句4if-then-else-end if 结构语句结构语句该结构语句的一般形式该结构语句的一般形式
2、该结构的变形该结构的变形1该结构的变形该结构的变形2例例5-1 已知三角形三个边的长度,设计求此三角已知三角形三个边的长度,设计求此三角形面积的程序形面积的程序 例例5-2一个有多个分支的示例程序一个有多个分支的示例程序 5if 结构语句的一般形式结构语句的一般形式if e then a组语句组语句else b组语句组语句end if6if 结构的变形结构的变形 1if e then a组语句组语句end ifif e then 7if 结构的变形结构的变形 2if e1 then a1组语句组语句elseif e2 then a2组语句组语句 .end if8例例5-1 已知三角形三个边的长
3、度,设计求此三角形已知三角形三个边的长度,设计求此三角形面积的程序面积的程序算法流程图算法流程图程序代码程序代码当当a+bc 且且 a+cb 且且 b+ca 时,三角形存在,其面积时,三角形存在,其面积式中:式中: p=(a+b+c)/2)()(cpbpapps9例例5-1 算法流程图算法流程图10private sub command1_click() dim a as single, b as single, c as single, p as single, s as single a = val(text1.text) 取数据a b = val(text2.text) 取数据b c =
4、 val(text3.text) 取数据c if a + b c and a + c b and b + c a then 判别数据合法性 p = (a + b + c) / 2 s = sqr(p * (p - a) * (p - b) * (p - c) 求三角形面积 text4.text = cstr(s) 面积数据写入计算结果文本框 else text4.text = 数据错误 数据错误信息 end ifend subprivate sub command2_click() end 结束程序end sub11例例5-2一个有多个分支的示例程序一个有多个分支的示例程序程序代码程序代码12
5、例例5-2 程序代码程序代码private sub command1_click() dim x as integer x = val(text1.text) if x 1 then text2.text = ”这是小于这是小于1的数的数” elseif x 20;is=p等。等。 例例5-2的程序代码也可使用本结构语句实现的程序代码也可使用本结构语句实现 14例例5-2的程序代码使用本结构语句实现的程序代码使用本结构语句实现private sub command1_click() dim x as integer x = val(text1.text) select case x case
6、is 1 text2.text = 这是小于这是小于1的数的数 case 1 to 10 text2.text = 这是这是1到到10之间的数之间的数 case else text2.text = 这是大于这是大于10的数的数 end selectend sub155.2 循环结构与循环结构语句循环结构与循环结构语句 循环结构也是程序的基本算法结构。所谓循环结构也是程序的基本算法结构。所谓循环,就是重复地执行某些操作。循环,就是重复地执行某些操作。 当型循环和直到型循的不同执行方式当型循环和直到型循的不同执行方式do-loop循环结构语句循环结构语句for-next循环结构语句循环结构语句循环
7、嵌套循环嵌套16当型循环和直到型循的不同执行方式当型循环和直到型循的不同执行方式当型循环的不同执行方式当型循环的不同执行方式直到型循环的不同执行方式直到型循环的不同执行方式171. do-loop 循环结构语句循环结构语句do-loop循环结构语句的四种形式循环结构语句的四种形式 exit do语句语句 例例5-3 求两个自然数的最大公约数程序求两个自然数的最大公约数程序 1. do while e 2. do . . exit do exit do . . loop loop while e 3. do until e 4. do . . exit do exit do . . loop l
8、oop until e 18exit do语句语句循环体中,可以包括一条或多条循环体中,可以包括一条或多条 exit do 语句;语句;如果程序执行到如果程序执行到 exit do 语句时,就会直接退出语句时,就会直接退出循环,转而执行循环,转而执行 loop 语句的下一条语句。语句的下一条语句。 exit do 语句最常用的形式是与语句最常用的形式是与 if-then 语句相语句相结合,即:结合,即:if e then exit do exit do 在执行循环体时,如果在执行循环体时,如果条件条件 e 被满足,则执行被满足,则执行 exit do 语句,直接退出循环。语句,直接退出循环。1
9、9例例5-3 求两个自然数的最大公约数程序求两个自然数的最大公约数程序本问题的算法采用欧几里德本问题的算法采用欧几里德算法求解算法求解由于输入的数据由于输入的数据m和和n要求要求是自然数,所以在程序中应是自然数,所以在程序中应加入对数据的合法性进行检加入对数据的合法性进行检验的部分;考虑到程序的应验的部分;考虑到程序的应用范围,数据类型可选用长用范围,数据类型可选用长整型。整型。 本例中使用了求余(数)运本例中使用了求余(数)运算符算符mod。使用。使用mod运算符运算符时,切记应在它的前后各加时,切记应在它的前后各加一个空格。一个空格。程序代码程序代码 20例例5-3 程序代码程序代码pri
10、vate sub command1_click() dim m, n, r as long m = val(text1.text) 取数据m n = val(text2.text) 取数据n if m 1 or n 0 时,判断是否时,判断是否 ve2; 当当 e30 时,判断是否时,判断是否 ve2; 如果如果未超过未超过,则执行循环体;,则执行循环体; 如果如果超过超过了,则退出循环。了,则退出循环。 执行执行 next 语句,语句,v 增加一个步长,增加一个步长,即执行即执行 v = v + e3 ;然后转而执行;然后转而执行判断操作。判断操作。 23注意注意循环参数循环参数e1、e2和
11、和e3中包含的变量如果在循环体中包含的变量如果在循环体内被改变,不会影响循环的执行次数;但循环控内被改变,不会影响循环的执行次数;但循环控制变量若在循环体内被重新赋值,则循环次数有制变量若在循环体内被重新赋值,则循环次数有可能发生变化。可能发生变化。 十进制整数可准确转换为二进制数形式,而带小十进制整数可准确转换为二进制数形式,而带小数点的十进制数在转换为单数点的十进制数在转换为单(双双)精度数时则多半存精度数时则多半存在数制转换误差。若使用非整型数做循环控制变在数制转换误差。若使用非整型数做循环控制变量和循环参数,那么循环次数就有可能发生意想量和循环参数,那么循环次数就有可能发生意想不到的变
12、化。不到的变化。当循环变量为整型,而循环参数为带小数点的实当循环变量为整型,而循环参数为带小数点的实数时,系统将其转换为与循环变量相同的整数型。数时,系统将其转换为与循环变量相同的整数型。24例例5-4 求求1到到10这十个数的和与连乘积这十个数的和与连乘积 求若干个数之和或连乘积,可采用求若干个数之和或连乘积,可采用“累加累加”或或“累乘累乘”法。累加法是设置一个存放和数的变量,法。累加法是设置一个存放和数的变量,称为称为“累加器累加器”,初始值为,初始值为0,累加过程通过循环,累加过程通过循环实现;累乘的算法设置的是实现;累乘的算法设置的是“累乘器累乘器”,初始值,初始值为为1,在循环体内
13、,乘数应与累乘器相乘。在求乘,在循环体内,乘数应与累乘器相乘。在求乘积时,应注意乘积的大小,设置适当的数据类型。积时,应注意乘积的大小,设置适当的数据类型。程序代码程序代码 25例例5-5 大写字母逆序输出的程序大写字母逆序输出的程序 从一个字符串中找出符合要求的字符是采取对字从一个字符串中找出符合要求的字符是采取对字符串的每一个字符逐个筛选的方法实现的,本例符串的每一个字符逐个筛选的方法实现的,本例利用利用mid函数可以从字符串中提取出单个字符,利函数可以从字符串中提取出单个字符,利用循环控制处理过程,循环的终值使用用循环控制处理过程,循环的终值使用len函数;函数;对于符合要求的字符采用连
14、接运算组成新字符串;对于符合要求的字符采用连接运算组成新字符串;逆序输出则是通过从后往前逐个提取字符再连接。逆序输出则是通过从后往前逐个提取字符再连接。 程序代码程序代码263. 循环嵌套循环嵌套无论是无论是do-loop循环,还是循环,还是for-next循环,都可循环,都可以在大循环中套小循环。必须注意:小循环一定以在大循环中套小循环。必须注意:小循环一定要完整地被包含在大循环之内,而不得相互交叉。要完整地被包含在大循环之内,而不得相互交叉。 private sub form_click() for i = 1 to 9 for j = 1 to 9 print i; *; j; =; i
15、 * j; next j print next iend sub 执行本程序,窗体上将显示九九乘法表执行本程序,窗体上将显示九九乘法表 例例5-6 一个模拟摇奖的程序一个模拟摇奖的程序 27例例5-6 一个模拟摇奖的程序一个模拟摇奖的程序【题目】设有【题目】设有100个人中签,要从中找出中奖人。由个人中签,要从中找出中奖人。由机器自动随机产生机器自动随机产生1000个个1100间间的数据,第的数据,第1000个随机数据即为中奖人的号码。个随机数据即为中奖人的号码。 【分析】问题的关键是如何产生【分析】问题的关键是如何产生1100之间的随机之间的随机整数。整数。vb提供了一个可以产生提供了一个可
16、以产生01之间均匀分布之间均匀分布的随机数的随机函数的随机数的随机函数rnd(x)。 为了生成某个范围内的随机整数,可用以下公式:为了生成某个范围内的随机整数,可用以下公式: int(ub - lb + 1) * rnd + lb) 这里,这里,ub、 lb分别是随机整数范围的上下限。分别是随机整数范围的上下限。程序代码程序代码 28随机函数随机函数rnd(x)其中,可选的其中,可选的 x 参数是参数是 single 或任何有效的数值或任何有效的数值表达式表达式 如果使用参数且参数如果使用参数且参数 x 0,则得到随机序列的下一个随机数;参,则得到随机序列的下一个随机数;参数数 x =0,则返
17、回上一次生成的随机数。不使用,则返回上一次生成的随机数。不使用x的结果与的结果与 x0相同。相同。对最初给定的种子都会生成相同的数列,因为每对最初给定的种子都会生成相同的数列,因为每一次调用一次调用 rnd 函数都用数列中的前一个数作为下函数都用数列中的前一个数作为下一个数的种子。一个数的种子。 调用调用 rnd 之前,可先使用无参数的之前,可先使用无参数的 randomize 语句初始化随机数生成器,该生成器具有从系统语句初始化随机数生成器,该生成器具有从系统计时器获得到的种子。计时器获得到的种子。 295.3 程序示例程序示例例例5-7一个简易函数计算器程序一个简易函数计算器程序 例例5-
18、8 个人收入调节税应用程序个人收入调节税应用程序 例例5-9 找出水仙花数找出水仙花数例例5-10利用牛顿迭代法求方程根利用牛顿迭代法求方程根例例5-11 原码转换成反码的程序原码转换成反码的程序 30例例5-7 一个简易函数计算器程序一个简易函数计算器程序为了保证为了保证“计算器计算器”在各种操作状况下都正常工在各种操作状况下都正常工作,程序需要考虑在用户没有在文本框中输入数作,程序需要考虑在用户没有在文本框中输入数据或输入的数据超出函数的定义域时的出错处理。据或输入的数据超出函数的定义域时的出错处理。 程序中使用的程序中使用的 isnumeric()函数用于检测自变量函数用于检测自变量s是
19、是否是一个可转换成数值的数字串,如果是,则返否是一个可转换成数值的数字串,如果是,则返回逻辑值回逻辑值true,否则返回,否则返回false。 程序代码程序代码 31例例5-8 个人收入调节税应用程序个人收入调节税应用程序 按月收入额计个人收入调节税的计税公式按月收入额计个人收入调节税的计税公式式中,式中,income为纳税人的月收入。为纳税人的月收入。 程序代码程序代码 0 income 1600或离退休或离退休(income - 1600)*0.05 1600 income 2100(income - 1600)*0.10 - 25 2100 income 3600 (income - 1
20、600)*0.15 - 125 3600 income 6600(income - 1600)*0.20 - 375 6600 income 21600(income - 1600)*0.25 - 1375 21600 income 41600 (income - 1600)*0.30 - 3375 41600 income 61600(income - 1600)*0.35 - 6375 61600 income 81600(income - 1600)*0.40 10375 81600 101600tax=32例例5-9 找出所有三位找出所有三位水仙花数水仙花数利用利用“穷举法穷举法”在三
21、位数中查找具有在三位数中查找具有“水仙花数水仙花数”特征的数特征的数题中在判断一个数是否是题中在判断一个数是否是“水仙花数水仙花数”时采用了时采用了两种方法:一种是将三位数循环变量的各位数字两种方法:一种是将三位数循环变量的各位数字拆开,然后进行比较;一种是采用三重循环,用拆开,然后进行比较;一种是采用三重循环,用三个循环变量来构成一个三位数,然后进行比较三个循环变量来构成一个三位数,然后进行比较程序代码(程序代码(1)程序代码(程序代码(2)33例例5-10 利用牛顿迭代法求方程根利用牛顿迭代法求方程根利用牛顿迭代法求方程利用牛顿迭代法求方程xex - 1 = 0 在在x0 = 0.5附附近
22、的一个根,要求精确到近的一个根,要求精确到10-7 牛顿迭代法算法说明牛顿迭代法算法说明 程序代码程序代码 34牛顿迭代法算法说明牛顿迭代法算法说明牛顿迭代法是求解一元超越方程的常用算法。设牛顿迭代法是求解一元超越方程的常用算法。设要求解的方程为要求解的方程为f(x)=0,并已知一个不够精确的,并已知一个不够精确的初始根初始根x0,则有:,则有: 上式称为牛顿迭代公式。式中,上式称为牛顿迭代公式。式中,f(x)是是f(x)的导函的导函数。利用迭代公式,可以依次求出数。利用迭代公式,可以依次求出x1、x2、x3、,当,当|xn+1 xn|时的时的xn+1即为要求的根。即为要求的根。 xn+1 =
23、 xn - f(xn)/f(xn) n=0,1,2,3 35例例5-11 原码转换成反码的程序原码转换成反码的程序mid函数的功能除可提取字符串的指定位置的字符函数的功能除可提取字符串的指定位置的字符之外。也可以如同一个变量一样用在赋值语句中,之外。也可以如同一个变量一样用在赋值语句中,其功能是用指定的字符替换字符串中指定位置的其功能是用指定的字符替换字符串中指定位置的内容。本示例使用了内容。本示例使用了mid函数的这一功能。函数的这一功能。程序代码程序代码 36例例5-4option explicitprivate sub form_click() dim i as integer, sum
24、 as integer, fact as long sum = 0 累加器置0 print sum=; for i = 1 to 10 sum = sum + i 累加 if i = a and mid(s, i, 1) = z then t = t & mid(s, i, 1) end if next i for i = len(t) to 1 step 1 字符逆序排列 d = d & mid(t, i, 1) next i text2.text = d 在文本框输出38例例5-6option explicitprivate sub command1_click() dim intranu
25、m as integer, i as integer dim j as integer, a as integer randomize 随机化语句 for i = 1 to 1000 intranum = int(100 * rnd) + 1 产生1100间随机整数 a = 0 for j = 1 to 10000 延时 a = a + 1 next j text1.text = space(2) + cstr(intranum) text1.refresh 文本框刷新 next i text1.text = space(2) + cstr(intranum)39例例5-7option exp
26、licitdim x as singleprivate sub cmd1_click() if text1.text = then msgbox 请输入x值!, 48 + vbokonly, 程序示例 text1.setfocus elseif isnumeric(text1.text) then x = val(text1.text) label2.caption = exp(x)=: text2.text = str(exp(x) else msgbox 输入数据错误!, 48 + vbokonly, 程序示例 text1.text = end if40例例5-8option explic
27、itprivate sub command1_click() dim tax as single, income as single income = text1.text if check1.value = 1 or income = 1600 then tax = 0 elseif income = 2100 then tax = (income - 1600) * 0.05 elseif income = 3600 then tax = (income - 1600) * 0.1 - 25 elseif income = 6600 then tax = (income - 1600) *
28、 0.15 - 125 elseif income = 21600 then tax = (income - 1600) * 0.2 - 375 elseif income = 41600 then tax = (income - 1600) * 0.25 - 1375 elseif income = 61600 then tax = (income - 1600) * 0.3 - 3375 elseif income = 81600 then tax = (income - 1600) * 0.35 - 6375 elseif income = 101600 then tax = (inco
29、me - 1600) * 0.4 - 10375 else tax = (income - 1600) * 0.45 - 15375 end if text2.text = taxend sub41例例5-9 方法一方法一option explicitprivate sub command1_click() dim i as integer, a as integer, b as integer, c as integer, st as string for i = 100 to 999 a = i 100 b = (i mod 100) 10 c = i mod 10 if i = a 3 + b 3 + c 3 then st = i & = & a & 3+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设计验证承包协议
- 铁路旅客运输服务折返站和终到退乘作业课件
- 2025年特种设备作业人员移动式压力容器充装R2证考试题库
- 中国交通文化课件英文版
- 中专职业形象课件下载
- 地下车位买卖合同模板规范
- 员工股票期权授予合同模板
- 2025年度供暖工程承包合同
- 购销合同完整模板
- 股权转让协议书2025
- 围墙拆除工程施工方案
- 性发育异常疾病课件
- 动态分析与设计实验报告总结
- 清水河储能电站施工方案设计
- 从汽车检测看低空飞行器检测发展趋势
- 《短视频拍摄与制作》课件-3短视频中期拍摄
- 中铁投资公司招聘笔试题
- 2024年十堰市中小学教师职称晋升水平能力测试题附答案
- 中药热奄包在急性胃炎治疗中的应用研究
- 观光小火车方案
- 《资本论》思维导图
评论
0/150
提交评论