《五章节控制构与循环结构程序设计》由会员分享,可在线阅读,更多相关《五章节控制构与循环结构程序设计(44页珍藏版)》请在金锄头文库上搜索。
1、第五章第五章控制结构与循环结构程序设计控制结构与循环结构程序设计结构化程序设计的基本控制结构有结构化程序设计的基本控制结构有3种:种:顺序结构:程序中的每一步操作从上到下顺序执行;顺序结构:程序中的每一步操作从上到下顺序执行;选择结构:根据给定的条件,选择一个分支执行;选择结构:根据给定的条件,选择一个分支执行;循环结构:根据给定的条件,重复执行。循环结构:根据给定的条件,重复执行。5.1选择控制结构选择控制结构产生背景:需要根据给定的条件进行分析、比较和判断,并产生背景:需要根据给定的条件进行分析、比较和判断,并根据判断结果采取不同的操作。根据判断结果采取不同的操作。在在VB中,选择结构通过
2、条件语句来实现。条件语句也称为中,选择结构通过条件语句来实现。条件语句也称为IF语句,有两种格式,一种是单行结构,一种是块结构。语句,有两种格式,一种是单行结构,一种是块结构。5.1.1单行结构条件语句单行结构条件语句格式:格式:If条件条件Then语句语句1Else语句语句2功能:功能:如果条件成立,执行语句如果条件成立,执行语句1,然后执行,然后执行If语句的下一条语语句的下一条语句;如果有句;如果有Else语句语句2的可选部分,条件不成立时执行语句的可选部分,条件不成立时执行语句2,然后执行,然后执行If语句的下一条语句;如果条件不成立且没有可选语句的下一条语句;如果条件不成立且没有可选
3、部分,则直接执行部分,则直接执行If语句的下一条语句。语句的下一条语句。举例:举例:IfabThenPrintabIfa/3=int(a/3)ThenPrinta能被能被3整除整除Ifa/3=int(a/3)ThenPrinta能被能被3整除整除ElsePrinta不能被不能被3整除整除IfMpassThenPrint通过考试通过考试说明说明:条件的结果是一个逻辑值条件的结果是一个逻辑值,即真与假。如果一个变量的数据即真与假。如果一个变量的数据类型为布尔型,则根据要求可以直接在条件处写变量或者写类型为布尔型,则根据要求可以直接在条件处写变量或者写“Not变量变量”。例如:例如:通过考试的人,打
4、印通过考试的人,打印“英语英语4级通过级通过”IfMpassThenPrint英语英语4级通过级通过没通过考试的人没通过考试的人,打印打印“英语英语4级未通过级未通过”IfNotMpassThenPrint英语英语4级未通过级未通过条件语句可以嵌套。(条件语句中的语句条件语句可以嵌套。(条件语句中的语句1和语句和语句2都可以是都可以是条件语句)条件语句)例如:例如:Ifx=0ThenIfx0Theny=1Elsey=0Elsey=-1Ifx0Theny=1ElseIfx=0Theny=0Elsey=-1注意注意:嵌套的正确性嵌套的正确性,每个每个Else语句都有与之相对应的语句都有与之相对应的
5、IfThen语句。语句。5.1.2块结构条件语句块结构条件语句格式:格式:If条件条件1Then语句块语句块1ElseIf条件条件2Then语句块语句块2ElseIf条件条件3Then语句块语句块3.ElseIf条件条件nThen语句块语句块nElse语句块语句块n+1EndIf功能:功能:如果条件如果条件1成立,执行语句块成立,执行语句块1(语句块意为多条语句)(语句块意为多条语句);条件;条件1不成立,测试条件不成立,测试条件2,如果条件,如果条件2成立,执行语句块成立,执行语句块2;一直这样执行下去,到最后一个条件;一直这样执行下去,到最后一个条件n测试成立,执行语测试成立,执行语句块句
6、块n,不成立执行语句块不成立执行语句块n+1。说明:说明:在执行了在执行了Then或或Else后面的语句块之后,程序退出块结后面的语句块之后,程序退出块结构条件语句,继续执行构条件语句,继续执行EndIf后面的语句。后面的语句。语句块中的语句不能与语句块中的语句不能与Then放在同一行上,这也是块结放在同一行上,这也是块结构和单行结构条件语句的主要区别。构和单行结构条件语句的主要区别。在块结构的条件语句中,在块结构的条件语句中,Else子句的数量没有限制。子句的数量没有限制。块结构条件语句中的块结构条件语句中的ElseIf子句和子句和Else子句都是可选的。子句都是可选的。当有多个条件为当有多
7、个条件为True时,只能执行满足条件的第一个语时,只能执行满足条件的第一个语句块,且执行完后跳出句块,且执行完后跳出If结构。结构。块形式的条件语句也可以嵌套。块形式的条件语句也可以嵌套。举例:举例:如果成如果成绩大于等于大于等于60,显示成示成绩及格;否及格;否则,显示成示成绩不及格不及格。PrivateSubCommand1_Click()mcj=InputBox(输入成绩输入成绩)mcj=Val(mcj)Ifmcj=60ThenPrint成绩及格成绩及格ElsePrint成绩不及格成绩不及格EndIfEndSub举例举例:如果成绩大于如果成绩大于100,显示显示“成绩错误成绩错误”;在;
8、在90-100之间之间,显示显示“成绩优秀成绩优秀”;80-89之间,显示之间,显示“成绩良好成绩良好”;60-79之间,之间,显示显示“及格及格”;0-59之间,显示之间,显示“不及格不及格”。PrivateSubCommand1_Click()mcj=InputBox(输入成绩输入成绩)mcj=Val(mcj)Ifmcj100ThenPrint成绩错误成绩错误ElseIfmcj=90ThenPrint成绩优秀成绩优秀ElseIfmcj=80ThenPrint成绩良好成绩良好ElseIfmcj=60ThenPrint及格及格ElsePrint不及格不及格EndIfEndSub5.1.3IIf
9、函数函数用来执行简单的判断操作用来执行简单的判断操作格式:格式:result=IIf(条件,表达式条件,表达式1,表达式,表达式2)功能:功能:如果条件成立,返回表达式如果条件成立,返回表达式1的值,否则返回表达式的值,否则返回表达式2的的值。值。说明:说明:result是函数的返回值,是函数的返回值,“条件条件”是一个逻辑表达式。是一个逻辑表达式。IIf函数中的函数中的3个参数都不能省略,且要求表达式个参数都不能省略,且要求表达式1、表达式、表达式2和结果变量的类型一致。和结果变量的类型一致。举例:举例:如果成绩如果成绩=60,给变量赋值给变量赋值“及格及格”,否则赋值,否则赋值“不及格不及
10、格”。Mchr=IIf(Mcj=60,及格及格,不及格不及格)如果成绩如果成绩=90,给变量赋值给变量赋值“优秀优秀”,如果成绩,如果成绩=60,给变量赋给变量赋值值“及格及格”,否则赋值,否则赋值“不及格不及格”。Mchr=IIf(Mcj=90,优秀优秀,IIf(Mcj=60,及格及格,不及格不及格)5.2多分支控制结构多分支控制结构-情况语句情况语句产生背景:产生背景:根据给定条件从多个分支路径中选择执行其中的一根据给定条件从多个分支路径中选择执行其中的一个。在个。在VB中,多分支控制结构通过情况语句来实现。中,多分支控制结构通过情况语句来实现。格式格式:SelectCase测试表达式测试
11、表达式Case表达式表列表达式表列1语句块语句块1Case表达式表列表达式表列2 语句块语句块2CaseElse语句块语句块nEndSelect功能:功能:计算表达式的值,如果表达式的值和计算表达式的值,如果表达式的值和Case项中的值项中的值相等,则执行相应的语句体。执行完语句体后,执行相等,则执行相应的语句体。执行完语句体后,执行EndSelect。如果没有合适的项,执行如果没有合适的项,执行CaseElse后面跟的语句后面跟的语句体。体。注意:注意:1、Case后面的值后面的值(表达式表列表达式表列1、2n)称为值域,可以是称为值域,可以是下列形式之一:下列形式之一:表达式表达式,表达式
12、,表达式,.如果如果SelectCase后的表达式的值是是上面表达式表中的一个后的表达式的值是是上面表达式表中的一个值值,进入此处。进入此处。例如:例如:Case讲师讲师,副教授副教授,教授教授表达式表达式1To表达式表达式2如果如果SelectCase后的表达式的值是是上面两个表达式值之间后的表达式的值是是上面两个表达式值之间的值的值,进入此处。进入此处。表达式表达式1的值必须的值必须=60错误的用法:错误的用法:CaseIs=60AndIs=100可以上述方法混用可以上述方法混用例如:例如:CaseIs1,第二个第二个case的条件是的条件是Is3,如果表达式的结果两个如果表达式的结果两个
13、case都符合都符合,只只执行位置在前面的执行位置在前面的case里的命令。里的命令。4、当条件范围不重叠时,、当条件范围不重叠时,Case子句的顺序对执行结果没有影子句的顺序对执行结果没有影响,但响,但CaseElse子句必须放在所有的子句必须放在所有的Case子句之后。子句之后。5、如果、如果SelectCase结构中的任何一个结构中的任何一个Case子句都没有与测子句都没有与测试表达式相匹配的值,而且也没有试表达式相匹配的值,而且也没有CaseElse子句,子句,则不执行任何操作。则不执行任何操作。6、不同的、不同的Case子句中制定的条件和相应的操作不能相互矛盾。子句中制定的条件和相应
14、的操作不能相互矛盾。5.3For循环控制结构循环控制结构产生背景:一些问题并不复杂,但需要反复多次处理,用顺产生背景:一些问题并不复杂,但需要反复多次处理,用顺序结构的程序来处理比较繁琐,甚至难以实现。为此,序结构的程序来处理比较繁琐,甚至难以实现。为此,VB提供了循环语句提供了循环语句。VB提供了提供了3种不同风格的循环结构,包括:种不同风格的循环结构,包括:计数循环(计数循环(For-Next循环)循环)当循环(当循环(While-Wend循环)循环)DO循环(循环(Do-Loop循环)循环)For循环也称为循环也称为For-Next循环或计数循环循环或计数循环格式:格式:For循环变量循
15、环变量=循环初值循环初值To循环终值循环终值Step循环步长循环步长循环体循环体ExitForNext循环变量循环变量功能功能:以指定次数来重复执行一组语句。:以指定次数来重复执行一组语句。参数说明如下参数说明如下:循环变量:也称循环控制变量、控制变量或循环计数器。它循环变量:也称循环控制变量、控制变量或循环计数器。它是一个数值变量,但不能下标变量或记录元素。是一个数值变量,但不能下标变量或记录元素。初值:循环变量的初值,它是一个数值表达式。初值:循环变量的初值,它是一个数值表达式。终值:循环变量的终值,也是一个数值表达式。终值:循环变量的终值,也是一个数值表达式。步长:循环变量的增量,是一个
16、数值表达式,可以是正数或步长:循环变量的增量,是一个数值表达式,可以是正数或负数,但不能为负数,但不能为0。循环体:在循环体:在For语句和语句和Next语句之间的语句序列,可以是一语句之间的语句序列,可以是一个或多个语句。个或多个语句。ExitFor:退出循环退出循环Next:循环终端语句,在循环终端语句,在Next后面的后面的“循环变量循环变量”与与For语句语句中的中的“循环变量循环变量”必须相同。必须相同。注意:格式中的初值、终值、步长均为数值表达式,但其值不注意:格式中的初值、终值、步长均为数值表达式,但其值不一定是整数,可以是实数。一定是整数,可以是实数。执行过程如下:执行过程如下
17、:第一步:循环变量赋循环初值。第一步:循环变量赋循环初值。第二步:如果循环步长第二步:如果循环步长0,测试循环变量初值是否大于循环终值;测试循环变量初值是否大于循环终值;如果循环步长如果循环步长=0的数据的数据,end退出循环退出循环)WhileaENDIfVal(a)/2=Int(Val(a)/2)ThenLabel1.Caption=a+是偶数是偶数ElseLabel1.Caption=a+是奇数是奇数EndIfa=Trim(UCase(InputBox(输入输入=0的数据的数据,end退出循环退出循环)WendEndSub例:请输入大于例:请输入大于3的数据,如果是素数,显示是素数,否则
18、显的数据,如果是素数,显示是素数,否则显示不是素数。示不是素数。PrivateSubCommand1_Click()a=InputBox(输入输入3的数据的数据)接收数据接收数据b=Int(Sqr(Val(a)flag=0标志标志i=2起测数据起测数据Whilei=bAndflag=0IfVal(a)Modi=0Thenflag=1不是素数不是素数,修改循环控制变量修改循环控制变量i=i+1WendLabel1.Caption=IIf(flag=1,a+不是素数不是素数,a+是素数是素数)EndSub5.5Do循环控制结构循环控制结构产生背景:既可以指定循环条件,也能够指定循环终止的条件。产生
19、背景:既可以指定循环条件,也能够指定循环终止的条件。格式格式1:DoWhile|Until条件条件语句块语句块ExitDoLoop格式格式2:Do语句块语句块ExitDoLoopWhile|Until条件条件格式格式1:DoWhile|Until条件条件语句块语句块ExitDoLoop 功能:功能:按照条件是否成立执行循环。操作如下:按照条件是否成立执行循环。操作如下:第一步:测试条件。第一步:测试条件。第二步:在第二步:在While条件结果为真,或在条件结果为真,或在Until条件结果为假,执行条件结果为假,执行语句块。否则执行语句块。否则执行Loop语句的下一句。语句的下一句。执行完语句体
20、,遇到执行完语句体,遇到Loop,转回转回Do语句,重新到第一步测试条语句,重新到第一步测试条件,进行下一次循环。件,进行下一次循环。注意:注意:在语句体中遇到在语句体中遇到ExitDo,转去执行转去执行Loop语句的下一句。语句的下一句。格式格式2:Do语句块语句块ExitDoLoopWhile|Until条件条件功能:功能:按照条件是否成立执行循环。操作如下:按照条件是否成立执行循环。操作如下:第一步:执行语句块。第一步:执行语句块。第二步:在第二步:在While条件结果为真,或在条件结果为真,或在Until条件结果为假,转条件结果为假,转回回Do语句。否则执行语句。否则执行Loop语句的
21、下一句。语句的下一句。注意:注意:在语句体中遇到在语句体中遇到ExitDo,转去执行转去执行Loop语句的下一句。语句的下一句。注意:注意:格式格式2一定会执行一定会执行1次循环体内的语句块,而格式次循环体内的语句块,而格式1测试条件测试条件后,根据条件情况执行循环体。后,根据条件情况执行循环体。方括弧中的方括弧中的while|until条件条件不写时变成了如下格式:不写时变成了如下格式:Do语句块语句块Loop这时如果在语句块中无这时如果在语句块中无ExitDo和其他跳出命令,则成为死和其他跳出命令,则成为死循环。循环。Do循环可以嵌套。循环可以嵌套。例:求小于例:求小于100的的素数。素数
22、。PrivateSubCommand1_Click()n=1DoWhilenVal(Text1.Text)mrk=mrk*(1+0.014)i=i+1LoopLabel1.Caption=在在+Str(i)+年后人口超过年后人口超过+_Text1.Text+亿亿,设人口增长率为设人口增长率为1.4%PrintmrkEndSub5.6多重循环多重循环单重单重循环:循环体内不含有循环语句的循环。循环:循环体内不含有循环语句的循环。多重循环:循环体内含有循环语句的循环。多重循环:循环体内含有循环语句的循环。例:打印例:打印99口诀表。口诀表。PrivateSubCommand1_Click()Pri
23、nt*;Fori=1To9PrintTab(i*6);i;NextiPrintFori=1To9Printi;Forj=1ToiPrintTab(j*6);i*j;NextjPrintNextiEndSubIfflag=0ThenPrintn;m=m+1EndIfIfm=10Thenm=0PrintEndIfn=n+1LoopEndSubPrivateSubCommand1_Click()n=100m=0DoUntiln300flag=0Fori=2ToSqr(n)IfnModi=0Thenflag=1ExitForEndIfNexti例:打印例:打印100-300间的所有素数。间的所有素数。
24、一般情况下。一般情况下。3种循环都不能在循环过程中退出循环,种循环都不能在循环过程中退出循环,VB以出以出口语句的形式提供了中止机制,与循环结构配合使用,可以根口语句的形式提供了中止机制,与循环结构配合使用,可以根据需要退出循环。据需要退出循环。出口语句可以在出口语句可以在For循环和循环和Do循环中使用,也可以在过程中使循环中使用,也可以在过程中使用,有两种形式:用,有两种形式:无条件形式无条件形式 ExitFor ExitDo ExitSub ExitFunction 条件形式条件形式If条件条件ThenExitForIf条件条件ThenExitDoIf条件条件ThenExitSubIf条
25、件条件ThenExitFunction 5.7GoTo型控制型控制VB保留了保留了Basic语言的语言的GoTo型控制,包括型控制,包括GoTo语句和语句和On-GoTo语句。,但这种控制会影响程序的质量。语句。,但这种控制会影响程序的质量。5.7.1GoTo语句语句GoTo语句可以改变程序的执行顺序,跳过程序的一部分去执语句可以改变程序的执行顺序,跳过程序的一部分去执行另外一部分,或者返回已经执行过的某些语句使之重复执行另外一部分,或者返回已经执行过的某些语句使之重复执行。因此,行。因此,GoTo语句可以构成循环。语句可以构成循环。格式:格式:GoTo标号标号|行号行号标号是一个以冒号结尾的
26、标识符;行号是一个整形数,不以标号是一个以冒号结尾的标识符;行号是一个整形数,不以冒号结尾。标号和行号标识一个位置,可以使用冒号结尾。标号和行号标识一个位置,可以使用GoTo语句语句转到这一位置。转到这一位置。说明:说明:Goto语句中的标号和行号,在程序中必须存在,且是唯一语句中的标号和行号,在程序中必须存在,且是唯一的。的。Goto语句只能在一个过程内转向。语句只能在一个过程内转向。Goto语句的功能是直接转到标号或行号的位置执行,因此语句的功能是直接转到标号或行号的位置执行,因此常常被称作无条件转向语句,但常常与条件语句结合使用。常常被称作无条件转向语句,但常常与条件语句结合使用。On-
27、On-GoToGoTo语句语句: :格式:格式:On数值表达式数值表达式GoTo标号表标号表|行号表行号表功能功能:按数值表达式计算的结果按数值表达式计算的结果n,转去行号表和标号表中的第转去行号表和标号表中的第n个行号或标号。如果数值表达式的值等于个行号或标号。如果数值表达式的值等于0或大于行号表和或大于行号表和标号表中的项数,程序找不到适当的语句行,将自动执行标号表中的项数,程序找不到适当的语句行,将自动执行On-On-GoToGoTo语句下面的一个可执行语句。语句下面的一个可执行语句。(类似于情况语句)(类似于情况语句)例:例:ON3GoTo3,10,Start,end转到第三个标号,是转到第三个标号,是Start