《第5章 选择分支与循环68905.ppt》由会员分享,可在线阅读,更多相关《第5章 选择分支与循环68905.ppt(44页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第5章章 选择分支与循环选择分支与循环1本章主要内容本章主要内容5.1 分支结构与分支结构语句分支结构与分支结构语句5.2 循环结构与循环结构语句循环结构与循环结构语句5.3 程序示例程序示例25.1 分支结构与分支结构语句分支结构与分支结构语句分支结构是程序的基本算法结构之一。分支结构是程序的基本算法结构之一。VB提提供了实现分支结构的相关语句。供了实现分支结构的相关语句。If-Then-Else-End If 结构语句结构语句Select-Case-End Select 结构语句结构语句3If-Then-Else-End If 结构语句结构语句该结构语句的一般形式该结构语句的一般形式该结
2、构的变形该结构的变形1该结构的变形该结构的变形2例例5-1 已知三角形三个边的长度,设计求此三角已知三角形三个边的长度,设计求此三角形面积的程序形面积的程序 例例5-2一个有多个分支的示例程序一个有多个分支的示例程序 4If结构语句的一般形式结构语句的一般形式IfeThenA组语句组语句ElseB组语句组语句EndIf5If结构的变形结构的变形1IfeThenA组语句组语句EndifIfeThen6If结构的变形结构的变形2Ife1ThenA1组语句组语句ElseIfe2ThenA2组语句组语句.Endif7当当 a+bc 且且 a+cb 且且 b+ca时时,三三角角形形存存在在,其面积其面积
3、式中:式中:p=(a+b+c)/2例例5-1 已知三角形三个边的长度,设计求此三已知三角形三个边的长度,设计求此三角形面积的程序角形面积的程序算法流程图算法流程图程序代码程序代码8例例5-1 算法流程图算法流程图910例例5-2一个有多个分支的示例程序一个有多个分支的示例程序程序代码程序代码11例例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等。13例例5-2的程序代码使用本结构语句实
4、现的程序代码使用本结构语句实现Private Sub Command1_Click()Dim x As Integer x=Val(text1.Text)Select Case x Case Is 0时,判时,判ve2否;当否;当e30时,时,判判ve2否,如果未超过,否,如果未超过,则执行循则执行循环体;如果超过了,环体;如果超过了,则退出循环。则退出循环。执行执行Next语句,语句,v增加一个增加一个步长,即执行步长,即执行v=v+e3;转转而执行判别操作。而执行判别操作。22注意注意循环参数循环参数e1、e2和和e3中包含的变量如果在循环体中包含的变量如果在循环体内被改变,不会影响循环的
5、执行次数;但循环控制内被改变,不会影响循环的执行次数;但循环控制变量若在循环体内被重新赋值,则循环次数有可能变量若在循环体内被重新赋值,则循环次数有可能发生变化。发生变化。十进制整数可准确转换为二进制数形式,而带小数十进制整数可准确转换为二进制数形式,而带小数点的十进制数在转换为单点的十进制数在转换为单(双双)精度数时则多半存在精度数时则多半存在数制转换误差。若使用非整型数做循环控制变量和数制转换误差。若使用非整型数做循环控制变量和循环参数,那么循环次数就有可能发生意想不到的循环参数,那么循环次数就有可能发生意想不到的变化。变化。23例例5-4求求1到到10这十个数的和与连乘积这十个数的和与连
6、乘积 求若干个数之和或连乘积,可采用求若干个数之和或连乘积,可采用“累加累加”或或“累累乘乘”法。累加法是设置一个存放法。累加法是设置一个存放和数和数的变量,称为的变量,称为“累加器累加器”,初始值为,初始值为0,累加过程通过循环实现;,累加过程通过循环实现;累乘的算法设置的是累乘的算法设置的是“累乘器累乘器”,初始值为,初始值为1,在,在循环体内,乘数应与累乘器相乘。在求乘积时,应循环体内,乘数应与累乘器相乘。在求乘积时,应注意乘积的大小,设置适当的数据类型。注意乘积的大小,设置适当的数据类型。程序代码程序代码 24例例5-5大写字母逆序输出的程序大写字母逆序输出的程序从一个字符串中找出符合
7、要求的字符是采取对字符从一个字符串中找出符合要求的字符是采取对字符串的每一个字符逐个筛选的方法实现的,本例利用串的每一个字符逐个筛选的方法实现的,本例利用Mid函数可以从字符串中提取出单个字符,利用循函数可以从字符串中提取出单个字符,利用循环控制处理过程,循环的终值使用环控制处理过程,循环的终值使用Len函数;对于函数;对于符合要求的字符采用连接运算组成新字符串;逆序符合要求的字符采用连接运算组成新字符串;逆序输出则是通过从后往前逐个提取字符再连接。输出则是通过从后往前逐个提取字符再连接。程序代码程序代码25循环嵌套循环嵌套无论是无论是Do-Loop循环,还是循环,还是For-Next循环,都
8、可以在大循循环,都可以在大循环中套小循环。必须注意:小循环一定要完整地被包含在大环中套小循环。必须注意:小循环一定要完整地被包含在大循环之内,而不得相互交叉。循环之内,而不得相互交叉。Private Sub Form_Click()For i=1 To 9 For j=1 To 9 Print i;*;j;=;i*j;Next j Print Next iEnd Sub 执行本程序,窗体上将显示九九乘法表执行本程序,窗体上将显示九九乘法表 例5-6 一个模拟摇奖的程序一个模拟摇奖的程序 26例例5-6 一个模拟摇奖的程序一个模拟摇奖的程序设有设有100个人中签,要从中找出中奖人。由机器自个人中
9、签,要从中找出中奖人。由机器自动随机产生动随机产生1000个个1100间间的数据,第的数据,第1000个个随机数据即为中奖人的号码。随机数据即为中奖人的号码。问题的关键是如何产生问题的关键是如何产生1100之间的随机整数。之间的随机整数。VB提供了一个可以产生提供了一个可以产生01之间均匀分布的随机之间均匀分布的随机数的随机函数数的随机函数Rnd(x)。为了生成某个范围内的随机整数,可用以下公式:为了生成某个范围内的随机整数,可用以下公式:Int(ub-lb+1)*Rnd+lb)这里,这里,ub、lb分别是随机整数范围的上下限。分别是随机整数范围的上下限。程序代码程序代码 27随机函数随机函数
10、Rnd(x)其中,可选的其中,可选的 x 参数是参数是 Single 或任何有效的数值或任何有效的数值表达式表达式 如果使用参数且参数如果使用参数且参数 x 0,则得到随机序列的下一个随机数;参则得到随机序列的下一个随机数;参数数 x=0,则返回上一次生成的随机数。不使用则返回上一次生成的随机数。不使用x的结果与的结果与 x0相同。相同。对最初给定的种子都会生成相同的数列,因为每一对最初给定的种子都会生成相同的数列,因为每一次调用次调用 Rnd函数都用数列中的前一个数作为下一函数都用数列中的前一个数作为下一个数的种子。个数的种子。调用调用 Rnd之前,可先使用无参数的之前,可先使用无参数的Ra
11、ndomize语语句初始化随机数生成器,该生成器具有从系统计时句初始化随机数生成器,该生成器具有从系统计时器获得到的种子。器获得到的种子。285.3 程序示例程序示例例5-7一个简易函数计算器程序一个简易函数计算器程序 例5-8个人收入调节税应用程序个人收入调节税应用程序 例5-9 找出水仙花数找出水仙花数例5-10利用牛利用牛顿顿迭代法求方程根迭代法求方程根例5-11原码转换成反码的程序原码转换成反码的程序 29例例5-7一个简易函数计算器程序一个简易函数计算器程序为了保证为了保证“计算器计算器”在各种操作状况下都正常工作,在各种操作状况下都正常工作,程序需要考虑在用户没有在文本框中输入数据
12、或输程序需要考虑在用户没有在文本框中输入数据或输入的数据超出函数的定义域时的出错处理。入的数据超出函数的定义域时的出错处理。程序中使用的程序中使用的IsNumeric()函数用于检测自变量函数用于检测自变量s是是否是一个可转换成数值的数字串,如果是,则返回否是一个可转换成数值的数字串,如果是,则返回逻辑值逻辑值True,否则返回否则返回False。程序代码程序代码 30例例5-8个人收入调节税应用程序个人收入调节税应用程序 按月收入额计个人收入调节税的计税公式按月收入额计个人收入调节税的计税公式式中,式中,income为纳税人的月收入。为纳税人的月收入。程序代码程序代码0income1600或
13、离退休或离退休(income-1600)*0.051600income2100(income-1600)*0.10-252100income3600(income-1600)*0.15-1253600income6600(income-1600)*0.20-3756600income21600(income-1600)*0.25-137521600income41600(income-1600)*0.30-337541600income61600(income-1600)*0.35-637561600income81600(income-1600)*0.401037581600101600ta
14、x=31例例5-9找出所有三位找出所有三位水仙花数水仙花数利用利用“穷举法穷举法”在三位数中查找具有在三位数中查找具有“水仙花数水仙花数”特征的特征的数数题中在判断一个数是否是题中在判断一个数是否是“水仙花数水仙花数”时时采用了两采用了两种方法:一种是将三位数循环变量的各位数字拆开,种方法:一种是将三位数循环变量的各位数字拆开,然后进行比较然后进行比较;一种是采用三重循环,用三个循环一种是采用三重循环,用三个循环变量来构成一个三位数,然后进行比较变量来构成一个三位数,然后进行比较程序代码(程序代码(1)程序代码(程序代码(2)32例例5-10利用牛顿迭代法求方程利用牛顿迭代法求方程根根利用牛利
15、用牛顿顿迭代法求方程迭代法求方程xex-1=0 在在x0=0.5附近的一个根,要求精确到附近的一个根,要求精确到10-7 牛牛顿顿迭代法迭代法算法说明算法说明 程序代码程序代码 33牛顿迭代法算法说明牛顿迭代法算法说明牛顿迭代法是求解一元超越方程的常用算法。设要牛顿迭代法是求解一元超越方程的常用算法。设要求解的方程为求解的方程为f(x)=0,并已知一个不够精确的初并已知一个不够精确的初始根始根x0,则则有:有:上式称上式称为为牛牛顿顿迭代公式。式中,迭代公式。式中,f(x)是是f(x)的导函的导函数。利用迭代公式,可以依次求出数。利用迭代公式,可以依次求出x1、x2、x3、,当当|xn+1xn
16、|时的时的xn+1即为要求的根。即为要求的根。xn+1=xn-f(xn)/f(xn)n=0,1,2,334例例5-11原码转换成反码的程序原码转换成反码的程序Mid函数的功能除可提取字符串的指定位置的字符函数的功能除可提取字符串的指定位置的字符之外。也可以如同一个变量一样用在赋值语句中,之外。也可以如同一个变量一样用在赋值语句中,其功能是用指定的字符替换字符串中指定位置的内其功能是用指定的字符替换字符串中指定位置的内容。本示例使用了容。本示例使用了Mid函数的这一功能。函数的这一功能。程序代码程序代码 35例例5-436例例5-537例例5-638例例5-739例例5-840例例5-9 方法一
17、方法一OptionExplicitPrivateSubCommand1_Click()DimIAsInteger,aAsInteger,bAsInteger,cAsInteger,stAsStringForI=100To999a=I100b=(IMod100)10c=IMod10IfI=a3+b3+c3Thenst=I&=&a&3+&b&3+&c&3List1.AddItemstEndIfNextIEndSub41例例5-9 方法二方法二OptionExplicitPrivateSubCommand1_Click()DimIAsInteger,aAsInteger,bAsInteger,cAs
18、Integer,stAsStringFora=1To9Forb=0To9Forc=0To9I=a*100+b*10+cIfI=a3+b3+c3Thenst=I&=&a&3+&b&3+&c&3List1.AddItemstEndIfNextcNextbNextaEndSub42例例5-10OptionExplicitPrivateSubcmd1_Click()DimxAsSingle,x1AsSingle,EpsAsSinglex=InputBox(输入初始值输入初始值x:,牛顿迭代法牛顿迭代法)Eps=InputBox(输入允许误差输入允许误差Eps:,牛顿迭代法牛顿迭代法)Dox1=xx=x1-(x1*Exp(x1)-1)/(Exp(x1)*(x1+1)LoopUntilAbs(x-x1)=EpsText1.Text=Str(x)EndSubPrivateSubcmd2_Click()EndEndSub43例例5-1144