第五章分支与循环.ppt
第五章 分支与循环,高等医药院校药学类第三轮规划教材大学计算机基础,第一节 分支结构,目 录,第二节 循环结构,第三节 程序示例,大学计算机基础沈阳药科大学,第一节 分支结构,第一节 分支结构,大学计算机基础沈阳药科大学,5.1 分支结构,1. IfThen语句(单分支结构) If Then 语句块 End If 或 If Then ,大学计算机基础沈阳药科大学,经典案例 1)判断按键(回车13,空格32) Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text2 = 2 * 3.14 * Text1 End If End Sub 2)检验正确性(IsNumeric()) Private Sub Text1_LostFocus() If IsNumeric(Text1) Then Text2 = 2 * 3.14 * Text1 End If End Sub,大学计算机基础沈阳药科大学,单分支结构应用举例: 已知两个数x和y,比较它们的大小, 使得x大于y. If xy Then t=x x=y y=t End If 或 If xy Then t=x: x=y: y=t,重要的是学会两个数的交换,若上述语句次序变一下,结果如何?,大学计算机基础沈阳药科大学,2. IfThenElse语句(双分支结构) If Then Else End If 也可以写为一行,格式为: If Then Else ,大学计算机基础沈阳药科大学,单分支结构实现: y=cos(x)x3+3*x If x0 Then y=sin(x)+sqr (x*x+1),双分支结构实现: If x0 Then y=sin(x)+sqr (x*x+1) Else y=cos(x)x3+3*x End If,例如:计算分段函数,思考:如果上面的两个语句换一下顺序 即: If x0 Then y=sin(x)+sqr (x*x+1) y=cos(x)x3+3*x 会是什么结果?,大学计算机基础沈阳药科大学,3If语句的嵌套 If语句的嵌套是指If或Else后面的语句块中又包含If语句 形式如下: If Then If Then End If Else If Then End If End If,大学计算机基础沈阳药科大学,例5-1 已知三角形三条边的长度,设计求此三角形面积的程序。输出结果显示在文本框中,并且把结果再存入D:盘文件名为“sear.dat”。 问题分析:设三角形的三条边分别为a、b、c,从数学上已知,当a+bc、a+cb且b+ca时,三角形存在,其面积 式中: P = (a + b + c)2,大学计算机基础沈阳药科大学,4. IfThenElseIf语句(多分支结构) 形式: If Then ElseIf Then Else 语句块 n+1 End If,例如:成绩小于60吗,否的话小于70吗,,大学计算机基础沈阳药科大学,例5-3将考试成绩转换成等级。计算规则如下: 分数 100-90 89-80 79-70 69-60 60 等级 A B C D E 要求:从文本框1中输入成绩分数,当输完数据按回车键时,等级结果自动地出现在文本框2中。 考虑到题目的要求,有关转换的程序代码应放在Text1_KeyPress( )过程中,大学计算机基础沈阳药科大学,五级制成绩分档.vbp 根据已知的百分制成绩mark,显示对应的五级制成绩 哪些正确,哪些错误?,大学计算机基础沈阳药科大学,:与同类型的下面四种形式之一: 表达式 例: “A“ 一组枚举表达式(用逗号分隔) 2,4,6,8 表达式1 To 表达式2 60 To 100 Is 关系运算符表达式 Is 60,5. Select Case语句(情况语句) 形式: Select Case 变量或表达式 Case 表达式列表1 语句块1 Case 表达式列表2 语句块2 Case Else 语句块n+1 End Select,数值型或字符串表达式,务必注意不能写变量名,大学计算机基础沈阳药科大学,例已知坐标点(x,y),判断其落在哪个象限。,哪个能实现,哪个不能实现?,方法一 If x 0 And y 0 Then Print “在第一象限“ ElseIf x 0 Then Print “在第二象限“ ElseIf x 0 And y 0 Then Print “在第四象限“ End If,方法二 Select Case x,y Case x 0 And y 0 Print “在第一象限“ Case x 0 Print “在第二象限“ Case x 0 And y 0 Print “在第四象限“ End Select,方法二代码错误: 1. Select Case 后不能出现多个变量,应写为select case x 2. Case后不能出现变量及有关运算符,应写为 is 0,而非x0,大学计算机基础沈阳药科大学,例5-4 用Select Case结构实现例5-3的功能。,例5-5 编写一个按月收入额计算个人收入调节税的应用程序,并把结果存入D:盘的数据文件“pay.dat”中。 计税公式如下: 0 pay1000或离退休 (pay1000)*0.05 1000pay1500 (pay1500)*0.1+25 1500pay2000 (Pay2000) *0.15+75 2000pay2500 tax= (pay2500) *0.2+150 2500pay3000 (pay3000) *0.25+250 3000pay3500 (Pay3500) *0.3+375 3500pay4000 (pay4000) *0.35+525 4000pay4500 (pay4500) *0.4+700 pay4500 式中,pay为纳税人的月收入。,大学计算机基础沈阳药科大学,6. 条件函数,试问通过下面的赋值语句后a的是什么? a=iif (85,64,57),IIF结构语法规则: iif(表达式,当表达式为True时的值,当表达式为False时的值) 例如,求x,y中大的数,放入max变量中,语句如下: max=iif(x y,x,y),Choose结构: Choose(数字类型变量,值为1的返回值,值为2的返回值) i = Int(Rnd*4+1) fuhao = Choose(i, “”, “”, “×”, “÷”),大学计算机基础沈阳药科大学,第二节 循环结构,第二节 循环结构,大学计算机基础沈阳药科大学,5.2 循环结构,所谓循环结构就是重复地执行某些操作,在程序中体现的就是部分代码被重复执行。 VB中循环结构分为两大类: 条件循环(Do-Loop),用于循环次数未知的情况 当型循环结构(While) 直到型循环结构 (Until) 计数循环(For-Next),用于循环次数已知的情况,大学计算机基础沈阳药科大学,形式1: Do While 语句块 Exit Do 语句块 Loop,形式2: Do 语句块 Exit Do 语句块 Loop While ,先判断后执行,语句块可能一次也不执行,先执行后判 断,语句块至少执行一次,1. DoWhile循环语句(当型循环结构,条件为真时执行),大学计算机基础沈阳药科大学,形式1: Do Until 语句块 Exit Do 语句块 Loop,形式2: Do 语句块 Exit Do 语句块 Loop Until ,先判断后执行,语句块可能一次也不执行,先执行后判 断,语句块至少执行一次,2. DoUntil循环语句(直到型循环结构,条件为假时执行),大学计算机基础沈阳药科大学,除以5、6、7均余1的最小的正整数.vbp Private Sub Command1_Click() n = 8 Do While n Mod 5 1 Or n Mod 6 1 Or n Mod 7 1 n = n + 1 Loop Print “除以5、6、7均余1的最小的正整数是“ & n End Sub Private Sub Command2_Click() n = 8 Do Until n Mod 5 = 1 And n Mod 6 =1 And n Mod 7 = 1 n = n + 1 Loop Print “除以5、6、7均余1的最小的正整数是“ & n End Sub,DoLoop循环应用举例1,大学计算机基础沈阳药科大学,人口增长计算.vbp 我国现有13亿人口,按人口年增长0.8%计算,多少年后我国人口超过26亿? 分析:解此问题两种方法,可根据公式:26=13*(1+0.008)n 直接利用标准对数函数求得;也可利用循环求得,程序如下: Private Sub Command1_Click() x = 13 n = 0 Do While x 26 n = n + 1 x = x * 1.008 Loop Print n, x End Sub,DoLoop循环应用举例2,大学计算机基础沈阳药科大学,例5-6求自然对数e的近似值,要求其误差小于0.00001,近似公式为: e=1+1/1!+1/2!+1/3!+1/n!+ 把计算结果存入D:盘的“result.dat”文件中。 算法分析:该题涉及两个问题 (1)用循环结构求级数和的问题。求级数和的项数和精度都是有限的,否则有可能会造成溢出或死循环,本例根据某项数的精度来控制循环的结束与否。 (2)累加与连乘在程序设计中非常重要。累加是在原有和的基础上一次次的加一个数,如e=e+t。连乘则是在原有积的基础上一次次的乘以一个数,如n=n*i。为了保证程序的可靠,一般在循环体外对存放累加和的变量清零、存放连乘积的变量则置1,DoLoop循环应用举例3,大学计算机基础沈阳药科大学,例5-7 设计求两个自然数的最大公约数程序。 (1)对于已知两数m,n,使得mn; (2) m除以n得余数r; (3)若r=0,则n为最大公约数结束;否则执行(4); (4)m n,n r,再重复执行(2)。 If m 0) m=n n=r r= m mod n Loop Print “最大公约数=“, n,辗转相减法 m=m-n mn n=n-m nm m、n为公约数 m=n Do While m n m n If m n Then 14 6 m = m n 8 6 Else 2 6 n = n m 2 4 End If 2 2 Loop,DoLoop循环应用举例4,图5-14流程图,大学计算机基础沈阳药科大学,形式 For 循环变量初值 to 终值 Step 步长 语句块 Exit For 语句块 Next 循环变量,循环体,5.2.3 For-Next循环结构,大学计算机基础沈阳药科大学,For循环应用举例: 计算1100的奇数和,程序段如下: Dim i %, s% 等价于: Dim i %, s% s=0 s=0 : i = 1 For i = 1 To 100 step 2 Do Until i100 s = s + i s = s + i Next i i = i +2 Loop,下面程序的结果是什么? Dim a% Dim a% a=10 a=10 for i=6 to 3 for i=3 to 6 a=a+2 a=a+2 next i next i Print a, i Print a, i,大学计算机基础沈阳药科大学,例5-8 编写一个程序求110这十个数的和与乘积。 算法分析:求若干个数之和或若干个数的乘积,可采用“累加”与“累乘”法。累加法是设置一个存放和数的变量,称为“累加器”,它的初始值设为0,累加过程通过循环实现,在循环体中,和数与累加器相加后再赋值给累加器;累乘的算法与累加类似,不过设置的是“累乘器”,它的初始值应设为1,在循环体内,乘数应与累乘器相乘。在求乘积时,应注意乘积的大小,设置适当的数据类型。,For-Next循环应用举例1,图5-18 程序设计界面及运行图,大学计算机基础沈阳药科大学,例5-9 下面是一个从由字母数字组成的字符串中找出所有大写字母并逆序输出的程序。最后再把结果存入D:盘的数据文件“letter.dat”中。 从一个字符串中找出符合要求的字符是采取对字符串的每一个字符逐个筛选的方法实现的。本例利用Mid函数可以从字符串中提取出单个字符,利用循环控制处理过程,循环的终值使用Len函数;对于符合要求的字符采用连接运算 组成新字符串;逆序输出则是通过从后往前逐个提取字符再连接的。,For-Next循环应用举例2,图5-19 程序设计界面及运行图,大学计算机基础沈阳药科大学,无论是Do-Loop循环,还是For-Next循环,都可以在大循环中套小循环。两种不同类型的循环语句也可以嵌套在一起使用。必须注意:小循环一定要完整地被包含在大循环之内,不得相互交叉。,5.2.4 循环的嵌套,下面的程序运行结果是什么? a=10 for i=1 to 5 for j=4 to 6 a=a+2 next j next I Print a, i, j,大学计算机基础沈阳药科大学,例5-10 下面是一个模拟摇奖的程序。设有100个人中签,要从中找出两个中奖人。由机器自动随机产生第一组1000个1100间的数据,第1000个随机数据即为第一个中奖人的号码;然后再次随机产生第二组1000个1100间的数据,第1000个随机数据即为第二个中奖人的号码。 算法分析:本程序算法比较简单,首先外循环用来控制产生两个随机数,里面使用For-Next循环产生1000个1-100间的随机整数即可。但为了获得摇奖的效果,每产生一个随机数,再利用一个For-Next循环起到延时作用,降低数据显示的速度,以便可以较容易地看清数据变化的状况,使用Refresh方法,使文本框中的文本不断改变。,循环嵌套应用举例1,图5-20 界面及运行结果,大学计算机基础沈阳药科大学,第三节 程序示例,第三节 程序示例,大学计算机基础沈阳药科大学,例5-11 产生10个(1,50)之间的随机整数,并将其中的最大数和最小数打印出来。同时存入D:盘的数据文件“Imax.dat”中。 算法分析:用两个变量来存放最大和最小数,给这两个变量赋初值时要考虑周全,否则最小值有可能出错。,5.3程序示例,大学计算机基础沈阳药科大学,例5-12 已知参加聚会有36人,现共有36块小蛋糕,按照下面规则进行分配,男士每人4块,女士每人3块,小孩2个人分1块,蛋糕刚好分完。问男、女、小孩各多少人? 算法分析:根据题目规定,可以判断出男士最多9人,女士最多12人,因为小孩每次只能二人分一块,所以小孩最少是2人,最多是36人。这类题目一般用穷举法来写程序。,5.3程序示例,大学计算机基础沈阳药科大学,例5-13 设计一个简易函数计算器。要求对输入的数据进行有效性检验。 保证“计算器”在各种操作状况下都正常工作,程序需要考虑在用户没有在文本框中输人数据或输入的数据超出函数的定义域时的出错处理。 程序中使用的IsNumeric(s)函数用于检测自变量s是否是一个可转换成数值的数字串,如果是,则返回逻辑值“True',否则返回“False“。,5.3程序示例,大学计算机基础沈阳药科大学,例5-14 编写程序输出3到300之间的素数。要求将找到的素数显示在列表框中。 算法分析:所谓素数即指除了1和它本身不能被其它数整除的数。因此当某个数不能被从2开始到这个数减1之间的所有数整除时,这个数就是素数。,5.3程序示例,End of the chapter,沈阳药科大学计算机教研室,