第5章 选择分支与循环 joyo_fly.ppt
5.2 5.2 循环结构与循环结构语句循环结构与循环结构语句5.1 5.1 分支结构与分支结构语句分支结构与分支结构语句第五章第五章第五章第五章 选择分支与循环选择分支与循环选择分支与循环选择分支与循环5.3 5.3 程序示例程序示例 先对条件测试,根据测试的结果选择执行不同的分支先对条件测试,根据测试的结果选择执行不同的分支1.If1.If条件语句条件语句2.Select Case 2.Select Case 结构结构VisualBasic程序设计程序设计5.1 5.1 5.1 5.1 分支结构与分支结构语句分支结构与分支结构语句分支结构与分支结构语句分支结构与分支结构语句3.3.条件函数条件函数例:例:If Ifscore=60ThenPrint祝贺你考试通过!祝贺你考试通过!EndIfEndIfPrint“继续努力!继续努力!”等价于等价于等价于等价于:If If Score=60 Then Score=60 Then Print Print“祝贺你考试通过!祝贺你考试通过!”Print Print“继续努力继续努力!”1.If1.If1.If1.IfThen Then Then Then 结构结构结构结构 格式格式:(1):(1)IfIf 条件条件 Then Then (A(A组组语句语句)End IfEnd If (2)(2)If If 条件条件 Then Then 语句语句执行规则:若执行规则:若条件成立条件成立条件成立条件成立,执行执行A A组语句组语句;条件不成立条件不成立,跳过跳过A A组语句组语句.5.1.1 If5.1.1 If5.1.1 If5.1.1 If条件语句条件语句条件语句条件语句条件条件A组语句组语句TF使用前提:使用前提:条件成立时条件成立时条件成立时条件成立时,A,A组语句中只一条执行语句组语句中只一条执行语句例:例:Ifscore=60ThenPrintscorePrint祝贺你考试通过!祝贺你考试通过!EndIfPrint“继续努力!继续努力!”1.If1.If1.If1.IfThenThenThenThen结构结构结构结构例例例例1 1:输入两个数,分别放在:输入两个数,分别放在:输入两个数,分别放在:输入两个数,分别放在x x和和和和y y变量中,比较它们大小,变量中,比较它们大小,变量中,比较它们大小,变量中,比较它们大小,然后将大数放在然后将大数放在然后将大数放在然后将大数放在x x中,小数放在中,小数放在中,小数放在中,小数放在y y中。中。中。中。x yx%=Text1.textY%=Text2.textIfx=60ThenPrint“祝贺你考试通过!祝贺你考试通过!”ElsePrint“考试未通过考试未通过.”EndIfPrint继续努力!继续努力!2.If2.If2.If2.IfThenThenThenThenElse Else Else Else 结构结构结构结构格式:格式:IfIfIfIf 条件条件 ThenThen A A组语句组语句 ElseElse B B组语句组语句 END END END END If If If If 执行规则执行规则:条件条件成立成立,执行执行A A组语句组语句,条件条件不成立不成立,执行执行B B组语句组语句例例2:计算分段函数:计算分段函数:Y=x2+1(x0)x3+3x(x=0)条件条件A组语句组语句TFB组语句组语句 5.1.1 If5.1.1 If5.1.1 If5.1.1 If条件语句条件语句条件语句条件语句F两边之和大于第三边?两边之和大于第三边?2.If2.If2.If2.IfThenThenThenThenElse Else Else Else 结构结构结构结构输入输入a,b,ca,b,c求求SS结束结束输出输出s s求半周长求半周长L LT提示提示数据错数据错开始开始5.1.1 If5.1.1 If5.1.1 If5.1.1 If条件语句条件语句条件语句条件语句例例5-15-1:已知:已知三边的长,三边的长,设计求设计求面积的程序面积的程序。3.If3.If3.If3.IfThenThenThenThenElseIfElseIfElseIfElseIf 结构结构结构结构格式:格式:IfIfIfIf 条件条件1 1 ThenThen (A A组语句)组语句)ElseIfElseIf 条件条件2 Then2 Then (B B组语句)组语句)ElseIfElseIf 条件条件3 Then3 Then (C C组语句)组语句)ElseElse (n n组语句组语句)End IfEnd IfEnd IfEnd If 5.1.1 If5.1.1 If5.1.1 If5.1.1 If条件语句条件语句条件语句条件语句X1?输入整数x开始输出x在110间T输出x10F格式:格式:IfIfIfIf 条件条件1 1 ThenThen A A组语句组语句 ElseIfElseIf 条件条件2 Then2 Then B B组语句组语句 ElseIfElseIf 条件条件3 Then3 Then C C组语句组语句 ElseElse n n组语句组语句 End IfEnd IfEnd IfEnd If3.If3.If3.If3.IfThenThenThenThenElseIfElseIfElseIfElseIf 结构结构结构结构注意:注意:多分支语句中,有多个分多分支语句中,有多个分支同时满足,只执行支同时满足,只执行第一第一第一第一个个个个与之匹配的语句块。与之匹配的语句块。注意注意ElseIfElseIfElseIfElseIf 的写法的写法 5.1.1 If5.1.1 If5.1.1 If5.1.1 If条件语句条件语句条件语句条件语句4.If4.If4.If4.If语句的嵌套语句的嵌套语句的嵌套语句的嵌套 5.1.1 If5.1.1 If5.1.1 If5.1.1 If条件语句条件语句条件语句条件语句 IfIf语句的嵌套是指语句的嵌套是指if if 或或elseelse后面的语句块中又包后面的语句块中又包含含IfIf语句。语句形式:语句。语句形式:IfIfIfIf 1 ThenThen IfIfIfIf 11 ThenThen End IfEnd IfEnd IfEnd If End IfEnd IfEnd IfEnd If 注意:注意:注意:注意:(1)(1)对于嵌套结构,为了增强程序的可读性,应该采用缩进对于嵌套结构,为了增强程序的可读性,应该采用缩进 形式书写;形式书写;(2)If(2)If语句形式若不在一行上书写,必须与语句形式若不在一行上书写,必须与End IfEnd If配对配对 多个多个IfIf嵌套,嵌套,End IfEnd If与它最接近的与它最接近的IfIf配对。配对。Select CaseSelect Case 测试表达式测试表达式 Case Case 测试项测试项1 1 A A组语句组语句 Case Case 测试项测试项2 2 B B组语句组语句 Case Case ElseElse n n组语句组语句End SelectEnd Select说明:说明:说明:说明:测试表达式的值应是数字或字符型测试表达式的值应是数字或字符型 测试项的取值测试项的取值必须必须与测试表达式与测试表达式 的值的值类型相同,类型相同,常用形式为:常用形式为:具体取值,用逗号隔开具体取值,用逗号隔开如:如:1 1,5 5,9 9连续的范围:界连续的范围:界1 TO 1 TO 界界2 2如:如:12 To 2012 To 20 满足某个条件:满足某个条件:IsIs运算符运算符如:如:Is10Is10 三种形式可以组合使用三种形式可以组合使用5.1.2 Select Case5.1.2 Select Case5.1.2 Select Case5.1.2 Select Case语句语句语句语句Select Case Select Case Select Case Select Case 结构结构结构结构例例5-2:Dim x As IntegerSelect Case x Case Is YThenTmax=XElseTmax=YEndIf用用Iif函数:函数:Tmax=IIf(XY,X,Y)5.2 5.2 5.2 5.2 循环结构与循环结构语句循环结构与循环结构语句循环结构与循环结构语句循环结构与循环结构语句 循环循环:是在指定的条件下多次重复执行一组语句是在指定的条件下多次重复执行一组语句2.For 2.For NextNext1.Do1.DoLoop Loop 3.3.循环嵌套循环嵌套 4.4.其他辅助控制语句其他辅助控制语句1.Do 1.Do WhileWhile 循环体循环体 LoopLoop2.D0 2.D0 循环体循环体 Loop Loop WhileWhile 3.Do 3.Do UntilUntil 循环体循环体 LoopLoop4.Do 4.Do 循环体循环体 Loop Loop Until Until 5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop循环循环循环循环1.While1.While1.While1.While循环循环循环循环 Do While Do While 循环体循环体Exit doExit do 循环体循环体 LoopLoop执行过程执行过程:(先判断,后执行)(先判断,后执行)先判断循环条件先判断循环条件,若为真若为真:执行循环体执行循环体,再判断循环条件再判断循环条件否则,跳过循环体否则,跳过循环体,执行执行LoopLoop之后语句之后语句循环条件循环条件语句块语句块TF语句块语句块FExit DoExit DoT5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop循环循环循环循环 Do While Do While 循环体循环体Exit doExit do 循环体循环体 LoopLoop例例1:1:求求1+2+3+4+1+2+3+4+10+10的和的和.Dim I,s As Integer Dim I,s As Integer I=1I=1Do WhileDo WhileLoopLoopPrint I,s Print I,s s=s+I s=s+I I=10I=10I=I+1I=I+1I=I+1I=I+1I=11I=11I=11I=11(1)(1)循环体执行了几次循环体执行了几次?(2)(2)没有没有I=I+1I=I+1会怎样会怎样?(3)(3)将将PrintPrint语句语句移到移到LoopLoop的的 前面结果怎样前面结果怎样?(4)(4)I I先赋值为先赋值为1 11 1,结果如何结果如何?1.While1.While1.While1.While循环循环循环循环5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop循环循环循环循环 D0 D0 循环体循环体Exit doExit do 循环体循环体 Loop While Loop While 执行过程执行过程:(先执行,后判断)(先执行,后判断)先执行循环体先执行循环体,再判断循环条件再判断循环条件,若为真,若为真,继续执行循环体继续执行循环体;否则,结束循环否则,结束循环,执行执行LoopLoop之后语句之后语句循环条件循环条件语句块语句块TF语句块语句块FExit DoExit DoT1.While1.While1.While1.While循环循环循环循环5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop循环循环循环循环 D0 D0 循环体循环体 Exit DoExit Do Loop While Loop While 例例4:4:修改例修改例3 3 Dim I,s As Integer Dim I,s As Integer I=1 I=1 Do Do While I=10While I=10 s=s+I s=s+I I=I+1 I=I+1 Loop Loop Print I,s Print I,s Dim I,s As Integer Dim I,s As Integer I=1 I=1 Do Do s=s+I s=s+I I=I+1 I=I+1 Loop Loop While I=10While I=10 Print I,s Print I,s (1)(1)(1)(1)循环体执行几次?循环体执行几次?循环体执行几次?循环体执行几次?(2)(2)(2)(2)将将将将I I I I先赋值为先赋值为先赋值为先赋值为11111111,执行结果如何执行结果如何执行结果如何执行结果如何?1.While1.While1.While1.While循环循环循环循环5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop循环循环循环循环 Do Do WhileWhile 循环体循环体 LoopLoop D0 D0 循环体循环体 Loop Loop WhileWhile 区别区别:(1)(1)执行顺序不同执行顺序不同 形形式一式一:先判断先判断,后执行后执行循环体循环体;形式二形式二:先执行先执行循环体循环体,后判断后判断 (2)(2)执行次数不同执行次数不同(特殊情况下)形式一形式一:条件不满足条件不满足,循环体可能一次也不执行循环体可能一次也不执行 形式二形式二:不论条件如何不论条件如何,至少执行一次至少执行一次1.While1.While1.While1.While循环循环循环循环5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop循环循环循环循环例例5-3:用辗转相除法求两自然数:用辗转相除法求两自然数m、n的最大公约数和的最大公约数和最小公倍数最小公倍数分析:最大公约数最大公约数 已知两数m、n m Mod n的值为r mn,nr,若r0,则重复 否则,循环结束,m为所求的最大公约数,最小公倍数最小公倍数原两个数相乘,再除以最大公约数5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop循环循环循环循环执行过程执行过程:(先判断,后执行)(先判断,后执行)先判断循环条件:先判断循环条件:条件为条件为假假:执行循环体执行循环体,然后再判断条件然后再判断条件.条件为条件为真真:跳过循环体跳过循环体,执行执行LoopLoop之后语句之后语句 Do Until Do Until 循环体循环体 LoopLoop2.Until2.Until2.Until2.Until循环循环循环循环循环条件循环条件语句块语句块F FT T语句块语句块FExit DoExit DoT5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop循环循环循环循环 Do Until Do Until 循环体循环体 LoopLoop例例5:5:修改上例修改上例Dim I,s As Integer Dim I,s As Integer I=1I=1Do Do While I=10While I=10 s=s+I s=s+I I=I+1 I=I+1LoopLoopPrint I,s Print I,s Dim I,s As Integer Dim I,s As Integer I=1I=1Do Do Until Until s=s+Is=s+I I=I+1 I=I+1LoopLoopPrint I,s Print I,s 条件应该如何写出条件应该如何写出?显示的显示的I、S值与值与上例一样吗?上例一样吗?Do Do 循环体循环体 Loop Until Loop Until I10I10I10I105.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop循环循环循环循环2.Until2.Until2.Until2.Until循环循环循环循环几种形式比较几种形式比较几种形式比较几种形式比较:DoDo While While 循环体循环体 LoopLoop(While While )DoDo Until Until 循环体循环体 LoopLoop(Until Until )区别区别:While While 条件为条件为真真时执行循环体时执行循环体,否则退出循环否则退出循环 Until Until 条件为条件为假假时执行循环体时执行循环体,否则退出循环否则退出循环关系:关系:whilewhile和和UntilUntil可以相互可以相互转换转换,但循环条件,但循环条件取反取反 whilewhile和和UntilUntil可以通过可以通过Exit DoExit Do退出循环退出循环5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop5.2.1 DoLoop循环循环循环循环循环变量循环变量=循环变量循环变量+步长步长语句块语句块FExit ForExit For语句块语句块T循环变量循环变量=终值终值 For For 循环变量循环变量=初值初值 TO TO 终值终值 Step Step 步长步长 语句块语句块 Exit ForExit For 语句块语句块 Next Next 循环变量循环变量ForForForFor循环格式:循环格式:循环格式:循环格式:执行过程执行过程:(1)将初值赋循环变量;将初值赋循环变量;(2)判断循环变量值是否判断循环变量值是否小于等于小于等于终止值;终止值;(3)若是若是,执行循环体(语句块);执行循环体(语句块);(4)然后将变量增加一个步长;然后将变量增加一个步长;(5)重复重复24步骤。步骤。(6)否则,结束循环否则,结束循环5.2.2 For5.2.2 For5.2.2 For5.2.2 For循环循环循环循环步长省略,步长省略,默认为默认为1 1循环变量赋初值循环变量赋初值FT循环体循环体程序代码:程序代码:DimI%,s%ForI=1To10step1NextIPrintI,s例例1:1:求求1+2+3+4+1+2+3+4+10+10之和之和.分析分析:重复过程重复过程(循环体循环体):s:ss s+I+I初值、终值和增量初值、终值和增量:1、10、1 初值与终值换位初值与终值换位初值与终值换位初值与终值换位 可以吗?可以吗?可以吗?可以吗?循环体的执行次数是多少循环体的执行次数是多少?输出的输出的I、S的值是多少的值是多少?ForI=1To10执行多少次?执行多少次?s=s+IForI=10To1Step-15.2.2 For5.2.2 For5.2.2 For5.2.2 For循环循环循环循环 For For 循环变量循环变量=初值初值 TO TO 终值终值 Step Step 步长步长 语句块语句块 Exit ForExit For 语句块语句块 Next Next 循环变量循环变量循环体循环体 Dim I,s As Integer For I=1 To 10 s=s+I Next I Print I,s 例例2:2:求求1010!分析分析:重复过程重复过程:*初值、终值与增量不变初值、终值与增量不变 例例1:1:求求1+2+3+4+1+2+3+4+10+10之和之和.分析分析:重复过程重复过程(循环体循环体):+初值、终值和增量初值、终值和增量:1、10、1 Dim I,s As Integer For I=1 To 10 s=s*I Next I Print I,ss=1For I=1 To 10For I=1 To 10s=15.2.2 For5.2.2 For5.2.2 For5.2.2 For循环循环循环循环S1=0S2=0ForI=1 To 10001 To 10001 To 10001 To 1000S1=S1+INextI练习练习1 1:计算:计算1 110001000的奇数和与偶数和的奇数和与偶数和 方法一:方法一:方法二:方法二:Step 2Step 2Step 2Step 2ForI=1 To 1000 1 To 1000 1 To 1000 1 To 1000 Step 2Step 2Step 2Step 2S2=S2+INextIPrintS1,S20 0 0 0S1=0S2=0ForI=1 To 10001 To 10001 To 10001 To 1000IfImod20thenS1=S1+IElseS2=S2+IEndIfNextIPrintS1,S25.2.2 For5.2.2 For5.2.2 For5.2.2 For循环循环循环循环例例5-55-5:一个从字母、数字组成的字符串中找出所有大写:一个从字母、数字组成的字符串中找出所有大写字母并逆序输出的程序。字母并逆序输出的程序。输入原字符串输入原字符串求出串长求出串长用用For循环循环1,长度和步长,长度和步长用用Mid函数取出每一位,对函数取出每一位,对每个字符进行判断每个字符进行判断对符合要求的字符采用连对符合要求的字符采用连接运算组成新字符串接运算组成新字符串重复以上两步,直到结束重复以上两步,直到结束在在text2中显示新串中显示新串5.2.2 For5.2.2 For5.2.2 For5.2.2 For循环循环循环循环例:分析下列程序段的输出结果:例:分析下列程序段的输出结果:DimIAsInteger,JAsIntegerJ=0ForI=0To10Step2I=I+3J=J+1NextIPrintI,J注意:注意:初值、终值、步长必须是初值、终值、步长必须是数值型数值型,步长为步长为正正,初值,初值 终值;终值;缺省缺省为默认为为默认为1 1 当循环变量为整型,而循环参数为浮点型时,系统将按当循环变量为整型,而循环参数为浮点型时,系统将按CintCint或或CLongCLong函数函数 将其转换为与循环变量相同的整型数。将其转换为与循环变量相同的整型数。在已知循环次数时使用在已知循环次数时使用ForFor循环,循环次数循环,循环次数=intint(终值终值-初值初值)/)/步长步长)+1)+1 组成循环体的语句块可以是一条或多条语句组成循环体的语句块可以是一条或多条语句 Exit ForExit For表示当遇到该语句时,退出循环体,执行表示当遇到该语句时,退出循环体,执行NextNext的下一句;的下一句;在循环体内对循环变量可多次引用,但在循环过程中一般在循环体内对循环变量可多次引用,但在循环过程中一般不改变不改变其值其值,否则影响结果。否则影响结果。退出循环后,循环变量保持退出时的值退出循环后,循环变量保持退出时的值5.2.2 For5.2.2 For5.2.2 For5.2.2 For循环循环循环循环循环的嵌套:循环的嵌套:循环的嵌套:循环的嵌套:在一个循环体内又包含了一个完整的循环结构在一个循环体内又包含了一个完整的循环结构5.2.3 5.2.3 5.2.3 5.2.3 循环嵌套循环嵌套循环嵌套循环嵌套 For I=1 To 9 For J=1 To I s=I&J&=&I*J Picture1.Print Tab(J-1)*8+1);s;Next J Picture1.Print Next I注意:注意:内、外循环变量不能同名 外循环必须完全包含内循环,不能出现交叉 分析:用三重循环分析:用三重循环n个位个位x x的可能取值为的可能取值为0 09 9n十位十位y y的可能取值为的可能取值为0 09 9n百位百位z z的可能取值为的可能取值为1 19 9,看三个位置上的数是否满足如下条件,若满足,即看三个位置上的数是否满足如下条件,若满足,即是其中一个解是其中一个解 x x3 3+y+y3 3+z+z3 3=z100=z100y10y10 x x 练习练习5 5:求水仙花数:求水仙花数(P78)(P78)水仙花数是指一个水仙花数是指一个3 3位数,其各个数字的立方和等于位数,其各个数字的立方和等于数字本身。数字本身。5.2.3 5.2.3 5.2.3 5.2.3 循环嵌套循环嵌套循环嵌套循环嵌套1.GoTo1.GoTo1.GoTo1.GoTo语句语句语句语句2.Exit2.Exit2.Exit2.Exit语句语句语句语句满足循环条件的情况下,提前跳出循环体,结束循环。满足循环条件的情况下,提前跳出循环体,结束循环。两种形式:两种形式:ExitFor、ExitDo作用:无条件的转移到标号或行号指定的语句作用:无条件的转移到标号或行号指定的语句语法:语法:GoTo标号标号|行号行号100100 If I=100 Then If I=100 Then s=s+I s=s+I I=I+2 I=I+2 GoToGoTo 100 100 End If End If5.2.4 5.2.4 5.2.4 5.2.4 其他辅助控制语句其他辅助控制语句其他辅助控制语句其他辅助控制语句5.3 5.3 5.3 5.3 程序示例程序示例程序示例程序示例示例示例1 1:一个简易的函数计算器程序一个简易的函数计算器程序.(P73).(P73)首先要对第一个文本框中输入的数据进行合法性判断首先要对第一个文本框中输入的数据进行合法性判断:是否为空?是否为数字?是否为空?是否为数字?5.3 5.3 5.3 5.3 程序示例程序示例程序示例程序示例(续续续续)示例示例2 2:利用牛顿迭代法求方程利用牛顿迭代法求方程xexex x-1=0-1=0在在x x0 0=0.5=0.5附近的附近的一个根,精确到一个根,精确到1010-7-7.(P78).(P78)X Xn+1n+1=x xn n-f(x-f(xn n)/f)/f(x(xn n)n=0,1,2,3,)n=0,1,2,3,当当|x|xn+1n+1-x-xn n|时,时,x xn+1n+1为要求的根。为要求的根。示例示例3 3:将一个二进制的原码转换成补码:将一个二进制的原码转换成补码(P80)(P80)。思考题:输入一个十进制整数,输出其原码和反码思考题:输入一个十进制整数,输出其原码和反码思考题:输入一个十进制整数,输出其原码和反码思考题:输入一个十进制整数,输出其原码和反码5.3 5.3 程序示例程序示例程序示例程序示例(续续续续)示例示例4 4:利用级数和求:利用级数和求cos(xcos(x)函数的近似值函数的近似值(误差误差 10-6)=Ix=I时时 如果如果x mod Ix mod I0 0,I I是一个因子是一个因子 否则否则I I加加1 1思考题思考题思考题思考题:判断一个正整数:判断一个正整数n n是否是完数是否是完数 即一个数恰好等于它的因子之和即一个数恰好等于它的因子之和 如:如:28281 12 24 47 714 14 5.3 5.3 程序示例程序示例程序示例程序示例(续续续续)示例示例6 6:用递推法(将一个复杂的计算过程转化为简单过程:用递推法(将一个复杂的计算过程转化为简单过程的多次重复)解决的多次重复)解决猴子吃桃子问题。猴子吃桃子问题。小猴在一天摘了若干个桃子,当天吃掉一半多一个,以小猴在一天摘了若干个桃子,当天吃掉一半多一个,以后每天吃掉剩下的桃子的一半多一个,到第七天要吃时只剩后每天吃掉剩下的桃子的一半多一个,到第七天要吃时只剩下一个了,问小猴那天共摘了几个桃子?下一个了,问小猴那天共摘了几个桃子?XnXn-1-1 XnXn=-1=-1 2 25.3 5.3 程序示例程序示例程序示例程序示例(续续续续)作业作业nP81 1、2、3 nP82 4、5、10、11 习题四答案n一、选择题C CADAABDBn二、填空题1 Is=0;1 To 10;Is 102.93.3;5 154.this is a book;This Is A Book5.3;3;3 56.32 07.48.15 19.1 ;401 ;10410.1 2 3;1 3;111.(3)12.2 0 2413.10 1414.BAABC CBAABC15.X Mod P=0;X=X+1 ;Find=False16.abs(t)Mid(n,i+1,1)ik-119.输入n;N/I=0 ;Print I