控制结构与循环结构程序设计

控制结构与循环结构程序设计

ID:27757587

大小:322.84 KB

页数:44页

时间:2018-12-05

上传者:U-5734
控制结构与循环结构程序设计_第1页
控制结构与循环结构程序设计_第2页
控制结构与循环结构程序设计_第3页
控制结构与循环结构程序设计_第4页
控制结构与循环结构程序设计_第5页
资源描述:

《控制结构与循环结构程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

第五章控制结构与循环结构程序设计结构化程序设计的基本控制结构有3种:顺序结构:程序中的每一步操作从上到下顺序执行;选择结构:根据给定的条件,选择一个分支执行;循环结构:根据给定的条件,重复执行。 5.1选择控制结构产生背景:需要根据给定的条件进行分析、比较和判断,并根据判断结果采取不同的操作。在VB中,选择结构通过条件语句来实现。条件语句也称为IF语句,有两种格式,一种是单行结构,一种是块结构。 5.1.1单行结构条件语句格式:If条件Then语句1 [Else语句2]功能:如果条件成立,执行语句1,然后执行If语句的下一条语句;如果有[Else语句2]的可选部分,条件不成立时执行语句2,然后执行If语句的下一条语句;如果条件不成立且没有可选部分,则直接执行If语句的下一条语句。举例:Ifa>bThenPrint"a>b"Ifa/3=int(a/3)ThenPrint"a能被3整除"Ifa/3=int(a/3)ThenPrint"a能被3整除"ElsePrint"a不能被3整除"IfMpassThenPrint"通过考试" 说明:►条件的结果是一个逻辑值,即真与假。如果一个变量的数据类型为布尔型,则根据要求可以直接在条件处写变量或者写“Not变量”。例如:通过考试的人,打印“英语4级通过”IfMpassThenPrint"英语4级通过"没通过考试的人,打印“英语4级未通过”IfNotMpassThenPrint"英语4级未通过" ►条件语句可以嵌套。(条件语句中的语句1和语句2都可以是条件语句)例如:Ifx>=0ThenIfx>0Theny=1Elsey=0Elsey=-1Ifx>0Theny=1ElseIfx=0Theny=0Elsey=-1注意:嵌套的正确性,每个Else语句都有与之相对应的IfThen语句。 5.1.2块结构条件语句格式:If条件1Then语句块1[ElseIf条件2Then语句块2][ElseIf条件3Then语句块3]......[ElseIf条件nThen语句块n][Else语句块n+1]EndIf 功能:如果条件1成立,执行语句块1(语句块意为多条语句);条件1不成立,测试条件2,如果条件2成立,执行语句块2;一直这样执行下去,到最后一个条件n测试成立,执行语句块n,不成立执行语句块n+1。说明:►在执行了Then或Else后面的语句块之后,程序退出块结构条件语句,继续执行EndIf后面的语句。►语句块中的语句不能与Then放在同一行上,这也是块结构和单行结构条件语句的主要区别。►在块结构的条件语句中,Else子句的数量没有限制。►块结构条件语句中的ElseIf子句和Else子句都是可选的。►当有多个条件为True时,只能执行满足条件的第一个语句块,且执行完后跳出If结构。►块形式的条件语句也可以嵌套。 举例:►如果成绩大于等于60,显示成绩及格;否则,显示成绩不及格。PrivateSubCommand1_Click()mcj=InputBox("输入成绩")mcj=Val(mcj)Ifmcj>=60ThenPrint"成绩及格"ElsePrint"成绩不及格"EndIfEndSub 举例:如果成绩大于100,显示“成绩错误”;在90-100之间,显示“成绩优秀”;80-89之间,显示“成绩良好”;60-79之间,显示“及格”;0-59之间,显示“不及格”。PrivateSubCommand1_Click()mcj=InputBox("输入成绩")mcj=Val(mcj)Ifmcj>100ThenPrint"成绩错误"ElseIfmcj>=90ThenPrint"成绩优秀"ElseIfmcj>=80ThenPrint"成绩良好"ElseIfmcj>=60ThenPrint"及格"ElsePrint"不及格"EndIfEndSub 5.1.3IIf函数—用来执行简单的判断操作格式:result=IIf(条件,表达式1,表达式2)功能:如果条件成立,返回表达式1的值,否则返回表达式2的值。说明:►result是函数的返回值,“条件”是一个逻辑表达式。►IIf函数中的3个参数都不能省略,且要求表达式1、表达式2和结果变量的类型一致。 举例:如果成绩>=60,给变量赋值“及格”,否则赋值“不及格”。Mchr=IIf(Mcj>=60,"及格","不及格")如果成绩>=90,给变量赋值“优秀”,如果成绩>=60,给变量赋值“及格”,否则赋值“不及格”。Mchr=IIf(Mcj>=90,"优秀",IIf(Mcj>=60,"及格","不及格")) 5.2多分支控制结构---情况语句产生背景:根据给定条件从多个分支路径中选择执行其中的一个。在VB中,多分支控制结构通过情况语句来实现。格式:SelectCase测试表达式Case表达式表列1语句块1     [Case表达式表列2        [语句块2]]……[CaseElse        [语句块n]]EndSelect 功能:计算表达式的值,如果表达式的值和Case项中的值相等,则执行相应的语句体。执行完语句体后,执行EndSelect。如果没有合适的项,执行CaseElse后面跟的语句体。注意:1、Case后面的值(表达式表列1、2…n)称为值域,可以是下列形式之一: ►表达式[,表达式],...如果SelectCase后的表达式的值是是上面表达式表中的一个值,进入此处。例如:Case"讲师","副教授","教授"►表达式1To表达式2如果SelectCase后的表达式的值是是上面两个表达式值之间的值,进入此处。表达式1的值必须<表达式2的值,值可以是字符串。例如:Case60To100►Is关系运算表达式Is后面必须跟关系运算符,且只用一次Is例如:CaseIs>=60错误的用法:CaseIs>=60AndIs<=100可以上述方法混用例如:CaseIs<"L","S","Q","X"To"Z" PrivateSubCommand1_Click()SelectCaseVal(Text1.Text)Case1To5Label1.Caption="工作日"Case6,7Label1.Caption="休息日"CaseElseLabel1.Caption="错误"EndSelectEndSubPrivateSubCommand2_Click()EndEndSub举例:窗体上有一个文本框,输入1-5,标签框显示工作日,输入6-7,标签框显示休息日,输入其他为错误。 2、SelectCase语句和If…Then…Else语句的主要区别:►SelectCase语句只对单个表达式求值,并根据求值结果执行不同的语句块,而块形式的条件语句可以对不同的表达式求值,因而效率较高。3、当条件范围重叠时,例如:第一个case的条件是Is>1,第二个case的条件是Is>3,如果表达式的结果两个case都符合,只执行位置在前面的case里的命令。4、当条件范围不重叠时,Case子句的顺序对执行结果没有影响,但CaseElse子句必须放在所有的Case子句之后。5、如果SelectCase结构中的任何一个Case子句都没有与测试表达式相匹配的值,而且也没有CaseElse子句,则不执行任何操作。6、不同的Case子句中制定的条件和相应的操作不能相互矛盾。 5.3For循环控制结构产生背景:一些问题并不复杂,但需要反复多次处理,用顺序结构的程序来处理比较繁琐,甚至难以实现。为此,VB提供了循环语句。VB提供了3种不同风格的循环结构,包括:计数循环(For-Next循环)当循环(While-Wend循环)DO循环(Do-Loop循环) For循环也称为For-Next循环或计数循环格式:For循环变量=循环初值To循环终值[Step循环步长]        [循环体][ExitFor] Next[循环变量]功能:以指定次数来重复执行一组语句。参数说明如下:►循环变量:也称循环控制变量、控制变量或循环计数器。它是一个数值变量,但不能下标变量或记录元素。►初值:循环变量的初值,它是一个数值表达式。►终值:循环变量的终值,也是一个数值表达式。 ►步长:循环变量的增量,是一个数值表达式,可以是正数或负数,但不能为0。►循环体:在For语句和Next语句之间的语句序列,可以是一个或多个语句。►ExitFor:退出循环►Next:循环终端语句,在Next后面的“循环变量”与For语句中的“循环变量”必须相同。注意:格式中的初值、终值、步长均为数值表达式,但其值不一定是整数,可以是实数。 执行过程如下:第一步:循环变量赋循环初值。第二步:如果循环步长>0,测试循环变量初值是否大于循环终值;如果循环步长<0,测试循环变量初值是否小于循环终值。步长默认为1。►是,转到Next的下一句运行。(退出循环)►否,运行循环体。►如果循环体中有ExitFor语句,运行到此句,直接转向Next语句的下一句运行。(退出循环)►运行到Next语句,循环变量=循环变量+步长。►转到第二步开始处运行。(循环一次完成) 注意:►步长为负时,循环变量每加一次步长,值变小。步长为零时,循环变量值不变,因此循环体内如果无ExitFor语句,则进入死循环。在设计时运行程序进入死循环可以使用Ctrl+Break,终止程序执行。►在For循环语句中,For和Next是一对语句,必须成对出现,缺一不可。►可以嵌套使用,但是循环变量名必须使用不同的变量名,而且不可以书写交叉的For循环语句。例如: 下面属于错误的嵌套Fori=1To9Forj=1to9Printi,jNextiNextj正确的嵌套方式Fori=1To9Forj=1to9Printi,jNextjNexti ►当几个Next语句之间无任何其他语句时,可以合并成为一句,Next后面跟上所有的合并的语句中的循环变量名称,但顺序不能随便改动,变量名称之间用逗号分隔,且此处的循环变量不可以省略。例如上面程序最后的2个Next语句可以写成:Nextj,i►当循环终值是一个变量时,在循环第一次运行时取走变量中的值,此变量中的值就不会再影响循环了,下面的程序,循环5次。PrivateSubCommand1_Click()Mcs=5Fori=1ToMcsMcs=Mcs+1Printi,McsNextiEndSub ►循环变量用来控制循环过程,在循环体内可以被引用和赋值。当循环变量在循环体内被引用时,称为“操作变量”,而不被引用的循环变量称为“形式变量”。►有些情况下,需要在循环变量到达终值前退出循环,这可以通过ExitFor语句来实现,它可以出现在循环体的任何位置。但是,ExitFor只能退出当前循环(它所在的循环)。►For-Next中的“循环体”是可选项,当该项缺省时,For-Next执行空循环。 例:请计算n的阶乘。PrivateSubCommand1_Click()a=Val(Text1.Text)m=1Fori=1Toam=m*iNextiLabel1.Caption=Trim(Text1.Text)+"的阶乘为"+Str(m)EndSub 例:请计算1到n的连续求和PrivateSubCommand1_Click()a=Val(Text1.Text)m=0Fori=1Toam=m+iNextiLabel1.Caption="从1到"+Trim(Text1.Text)+"的和为"+Str(m)EndSub 5.4当循环控制结构产生背景:循环次数不固定,当满足条件时退出循环。(For循环解决不了这类问题)格式:While条件[语句块]Wend功能:按照条件是否成立执行循环。操作如下:第一步:测试条件。第二步:当结果为真,执行语句块,执行完语句块,遇到Wend,转向While语句,重新到第一步测试条件,进行下一次循环;如果结果为假,转到Wend语句的下一句执行,结束循环。 说明:►对于循环次数有限但又不知道具体次数的操作,使用当循环。►While循环语句先对条件进行测试,然后再决定是否执行循环体。只有在条件成立时才执行循环体。如果条件从开始就不成立,则一次循环体也不执行。►如果条件总是成立,则重复执行循环体,容易出现死循环,所以循环体的执行,应该能使条件发生改变。►可以嵌套使用,每个Wend语句与离它最近的While语句配对。当循环与For循环的区别:►当循环是以条件的结果为假来结束循环的。►For循环是执行指定的次数。 例:循环输入大于0的数据,如果是奇数,显示是奇数,否则显示是偶数;如果输入了“end”,退出。PrivateSubCommand1_Click()a=Trim(UCase(InputBox("输入>=0的数据,end退出循环")))Whilea<>"END"IfVal(a)/2=Int(Val(a)/2)ThenLabel1.Caption=a+"是偶数"ElseLabel1.Caption=a+"是奇数"EndIfa=Trim(UCase(InputBox("输入>=0的数据,end退出循环")))WendEndSub 例:请输入大于3的数据,如果是素数,显示是素数,否则显示不是素数。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+"是素数")EndSub 5.5Do循环控制结构产生背景:既可以指定循环条件,也能够指定循环终止的条件。格式1:Do[While|Until条件]    [语句块][ExitDo]Loop格式2:Do     [语句块][ExitDo]Loop[While|Until条件] 格式1:Do[While|Until条件]    [语句块]  [ExitDo] Loop功能:按照条件是否成立执行循环。操作如下:第一步:测试条件。第二步:在While条件结果为真,或在Until条件结果为假,执行语句块。否则执行Loop语句的下一句。执行完语句体,遇到Loop,转回Do语句,重新到第一步测试条件,进行下一次循环。注意:在语句体中遇到ExitDo,转去执行Loop语句的下一句。 格式2:Do     [语句块]    [ExitDo] Loop[While|Until条件]功能:按照条件是否成立执行循环。操作如下:第一步:执行语句块。第二步:在While条件结果为真,或在Until条件结果为假,转回Do语句。否则执行Loop语句的下一句。注意:在语句体中遇到ExitDo,转去执行Loop语句的下一句。 注意:►格式2一定会执行1次循环体内的语句块,而格式1测试条件后,根据条件情况执行循环体。►方括弧中的[while|until条件]不写时变成了如下格式:Do[语句块]Loop这时如果在语句块中无ExitDo和其他跳出命令,则成为死循环。►Do循环可以嵌套。 例:求小于100的素数。PrivateSubCommand1_Click()n=1DoWhilen<100flag=0Fori=2ToSqr(n)IfnModi=0Thenflag=1ExitForEndIfNextiIfflag=0ThenPrintn;IfnMod10=0ThenPrintn=n+1LoopEndSub 例:现地球人口约为60亿,增长率如果是0.4%,设计一个程序可计算随意的人口数目在几年后超过。PrivateSubCommand1_Click()mrk=60i=0DoUntilmrk>Val(Text1.Text)mrk=mrk*(1+0.014)i=i+1LoopLabel1.Caption="在"+Str(i)+"年后人口超过"+_Text1.Text+"亿,设人口增长率为1.4%"PrintmrkEndSub 5.6多重循环单重循环:循环体内不含有循环语句的循环。多重循环:循环体内含有循环语句的循环。 例:打印99口诀表。PrivateSubCommand1_Click()Print"*";Fori=1To9PrintTab(i*6);i;NextiPrintFori=1To9Printi;Forj=1ToiPrintTab(j*6);i*j;NextjPrintNextiEndSub Ifflag=0ThenPrintn;m=m+1EndIfIfm=10Thenm=0PrintEndIfn=n+1LoopEndSubPrivateSubCommand1_Click()n=100m=0DoUntiln>300flag=0Fori=2ToSqr(n)IfnModi=0Thenflag=1ExitForEndIfNexti例:打印100-300间的所有素数。 一般情况下。3种循环都不能在循环过程中退出循环,VB以出口语句的形式提供了中止机制,与循环结构配合使用,可以根据需要退出循环。出口语句可以在For循环和Do循环中使用,也可以在过程中使用,有两种形式:无条件形式ExitForExitDoExitSubExitFunction条件形式If条件ThenExitForIf条件ThenExitDoIf条件ThenExitSubIf条件ThenExitFunction 5.7GoTo型控制VB保留了Basic语言的GoTo型控制,包括GoTo语句和On-GoTo语句。,但这种控制会影响程序的质量。 5.7.1GoTo语句GoTo语句可以改变程序的执行顺序,跳过程序的一部分去执行另外一部分,或者返回已经执行过的某些语句使之重复执行。因此,GoTo语句可以构成循环。格式:GoTo{标号|行号}标号是一个以冒号结尾的标识符;行号是一个整形数,不以冒号结尾。标号和行号标识一个位置,可以使用GoTo语句转到这一位置。 说明:►Goto语句中的标号和行号,在程序中必须存在,且是唯一的。►Goto语句只能在一个过程内转向。►Goto语句的功能是直接转到标号或行号的位置执行,因此常常被称作无条件转向语句,但常常与条件语句结合使用。 On-GoTo语句:格式:On数值表达式GoTo标号表|行号表功能:按数值表达式计算的结果n,转去行号表和标号表中的第n个行号或标号。如果数值表达式的值等于0或大于行号表和标号表中的项数,程序找不到适当的语句行,将自动执行On-GoTo语句下面的一个可执行语句。(类似于情况语句)例:ON3GoTo3,10,Start,end转到第三个标号,是Start

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭