第3章 控制结构.ppt
第第3章章 控制结构控制结构 C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构制作人:杨进才 沈显君第第3章章 控制结构控制结构学习目标 1.理解并掌握分支语句if、switch的使用;2.理解并掌握for、while、dowhile三种循环的语法和使用场合,控制执行的顺序,能根据要求选择合适的循环语句;3.理解并掌握跳转语句break、continue语句的语法和使用场合,能根据要求选择合适的跳转语句。C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构3.1 C+语言的语句 C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构 语句语句是程序中可以独立执行的最小单元,类似于自然语言中的句子。语句一般由分分号号结束。语句通常是由表达式构成的,表达式尾部加上分号构成表达式语句表达式语句。a=b+c;i+j;变量的说明必须以分号结束,所以变量的说明也是语句,叫做说明语句说明语句。由一对花括号括起来的多条语句叫做一个块语块语句句。例如:int i=5;i=(i+5)/2;couti10)i=i-5;coutiy)coutxendl;else coutyendl;首先计算表达式的值,如果表达式的值为真,则执行语句1;否则就执行语句2。流程如右图所示。通常,将前者叫做if分支,将后者叫做else分支。实现了从x和y中选择较大的一个输出。F注意注意:尽管完整的if语句中存在两个语句段,且有两个表示语句结束的分号,但整个语句在语法上只是一条语句。if分支后边的分号是不可缺少的(除非这里是一条复合语句)。3.3.2 完整的完整的if语句语句C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构将if语句用作if语句的语句段。这就是所谓的if语句的嵌套语句的嵌套。if语句的嵌套常用于多次判断选择。【例例3-1】将百分制的成绩按等级分输出。分析分析:等级分为四等:A、B、C、D,分别对应的分数段为90100、8089、6079、059,转换时需要进行多次判断,要用多重选择结构,这里我们选用嵌套的if语句。3.3.3 if语句的嵌套语句的嵌套 C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构3.3.3 if语句的嵌套语句的嵌套 789101112131415161718192021void main()int n;coutn;if(n=60)if(n=90)coutThe degree is A=80)coutThe degree is Bendl;else coutThe degree is Cendl;else coutThe degree is Dendl;C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构3.3.3 if语句的嵌套语句的嵌套 运行结果运行结果Enter the score:86 The degree is AEnter the score:74 The degree is CEnter the score:48 The degree is D 由于if语句存在两种形式,当发生嵌套时就面临理解的问题,在程序p3-1.cpp中就出现下列嵌套形式:if(表达式1)if(表达式2)语句1;else 语句2;else解释为属于第解释为属于第1个个if与属于第与属于第2个个if会有会有完全不同的结果。完全不同的结果。else究竟属于哪个究竟属于哪个if?C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构3.3.3 if语句的嵌套语句的嵌套 if(表达式1)if(表达式2)语句1;else 语句2;if(表达式1)if(表达式2)语句1;else 语句2;对于上述歧义,C+规定else与前面最近的没有与前面最近的没有else的的if语语句配句配对对。因此上述嵌套的if语句解释如下:if(表达式1)if(表达式2)语句1;else 语句2;if(表达式1)if(表达式2)语句1;else 语句2;C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构3.4 switchcase判断式 在有的问题中,要进行多次判断选择,C+中使用switch语句,其语法形式如下:switch(表达式表达式)case 常量表达式常量表达式1:语句块语句块1break;case 常量表达式常量表达式2:语句块语句块2break;case 常量表达式常量表达式n:语句块语句块nbreak;default:语句块语句块n+1表达式可以是任意一个合法的C+表达式,但其值只能是字符型或者整型。常量表达式是由常量组成的表达式,其值也只能是字符型常量或者整型常量,各常量表达式的值不可以重复(相等)。符号 表示其中的内容可选,语句块是可选的,它可以由一条语句或一个复合语句组成。break语句、default语句也是可选的。C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构3.4 switchcase判断式switch(表达式表达式)case 常量表达式常量表达式1:语句块语句块1break;case 常量表达式常量表达式2:语句块语句块2break;case 常量表达式常量表达式n:语句块语句块nbreak;default:语句块语句块n+1switch语句的执行过程语句的执行过程:先求出表达式的值;将表达式的值依次与case后面的常量表达式值相比较,若与某一常量表达式的值相等,则转去执行该case语句后边的语句序列,直到遇到break语句或switch语句的右花括号为止。若表达式的值与case语句后的任一常量表达式的值都不相等,如果有default语句,则执行其后边的语句序列。如果没有default语句,则什么也不执行。F注意注意:在使用switch-case语句时经常容易丢失必要的break语句,这样程序会产生结果的错误,此类错误往往不易发觉。C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构3.4 switchcase判断式【例例3-23-2】将百分制的成绩按的等级分输出的switch-case语句的实现。7891011121314151617181920212223242526void main()int n;coutn;switch(n/10)case 9:case 10:coutThe degree is Aendl;break;case 8:coutThe degree is Bendl;break;case 7:case 6:coutThe degree is Cendl;break;default:coutThe degree is Dendl;if语句和语句和switch语句的比较语句的比较:if语句和switch语句都可以用来处理程序中的分支问题,在许多场合可以互相替代。差别表现为:(1)if语句常用于分支较少的场合;而switch语句常用于分支较多的场合。(2)if语句可以用来判断一个值是否落在一个范围内;而switch语句则要求其相应分支的常量必须与某一值严格相等。例如,设i为一整型变量,若i的值为1、3、7或11时,就执某一语句,相应的if语句和switch语句各是什么?C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构3.5 for循环 在程序中,常常需要重复地执行某些操作。C+提供了3种循环语句:for语句、while语句和do-whi1e语句。在循环语句中,重复执行的操作叫做循环体循环体。循环体可以是单条语句、块语句甚至是空语句。上述格式可理解为:for(循环变量赋初值;循环条件;循环变量增值)循环体 for是关键字;表达式1、表达式2和表达式3是任意表达式;语句为循环体,它可以是一条语句,也可以是复合语句,还可以是空语句。3.5.1 for语句语句其中for语句的语法形式如下:for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3)3)语句语句C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构for循环语句的执行过程:计算表达式1的值。计算表达式2的值,并进行判断,如果表达式2的值为0(false)则退出该循环,执该循环体后面的语句;如果表达式2的值为非0(true)转(3)。执行循环体的语句。计算表达式3的值。转 3.5 for循环for循环语句执行过程图循环语句执行过程图:C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构3.5 for循环C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构【例例3-33-3】求1+3+5+7+99 分析分析:求1100的之间的奇数和就是一个累加的算法,累加过程是一个循环过程,可以用for语句实现:5678910111213#includeusing namespace std;void main()int i,sum=0;for(i=1;i100;+i,+i)sum=sum+i;coutsum=sumendl;运行结果运行结果sum=2500 表达式1可以省略,此时表达式1应出现在循环语句之前。表达式3可以省略,即将循环变量增量的操作放在循环体内进行。表达式1不仅可以设置循环变量的初值,同时还可以通过逗号表达式设置设置一些其它变量的值。表达式2和表达式3都可以这样。表达式2如果省略,即不判断其循环条件,则循环将无终止地进行下去。要结束循环,需要在循环体内设置break语句,退出循环。所谓循环结构嵌套循环结构嵌套是指一个循环体内可以包含另一个完整的循环结构,构成多重循环结构。3.5.2 用用for语句实现嵌套循环语句实现嵌套循环C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构【例例3-43-4】用嵌套for语句显示乘法九九表7891011121314151617void main()const int line=9;int i,j,k,l;for(i=0;iline;i+)/显示9行 for(j=0;j=i;j+)/每一行显示的内容 coutj+1i+1=(j+1)*(i+1)t;coutendl;运行结果运行结果11=112=2 22=413=3 23=6 33=914=4 24=8 34=12 44=1615=5 25=10 35=15 45=20 55=25 【例例3-5】百钱百鸡问题:鸡翁一、值钱五;鸡婆一、值钱三;鸡雏三,值钱一;百钱买百鸡。问鸡翁、鸡婆、鸡雏各几?分析分析:鸡翁最多有20个,鸡婆最多有33个,鸡雏最多有100个。采用穷举的方式,考察每一种可能,是否满足百钱买百鸡。3.5.2 用用for语句实现嵌套循环语句实现嵌套循环C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构7891011121314151617void main()const int cock=20,hen=33,chick=100;/分别表示鸡翁、鸡婆、鸡雏的最大数int i,j,k;for(i=0;i=cock;i+)for(j=0;j=hen;j+)for(k=0;k=chick;k+)if(i+j+k)=100&(5*i+3*j+k/3)=100&k%3=0)/鸡的个数与钱数必须为整数cout鸡翁、鸡婆、鸡雏各有:titjtkendl;运行结果运行结果鸡翁、鸡婆、鸡雏各有:0 25 75鸡翁、鸡婆、鸡雏各有:4 18 78鸡翁、鸡婆、鸡雏各有:8 11 81鸡翁、鸡婆、鸡雏各有:12 4 84 保证保证k/3是整数是整数 循环优化循环优化是指通过减少循环的层次以及每层循环体执行的次数,以节省系统资源(时间),提高程序运行效率。百钱百鸡问题如何进行循环优化?3.6 while循环 在C+中while循环有两种循环控制语句实现,while语句和dowhile语句。while是关键字;条件表达式给出是否执行循环体的判断条件,常用关系表达式或逻辑表达式作为条件表达式,也可以用其他表达式或常量;语句是while循环的循环体,它可以是一条语句,也可以是复合语句。语句为循环体,它可以是一条语句,也可以是复合语句,还可以是空语句。3.6.1 while语句语句while语句的语法形式如下:C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构while语句执行过程为:先计算条件表达式,如果该表达式的值为非零,则执行循环体的语句;否则退出循环,不执行循环体,而执行该循环语句后面的语句。也就是说,当循环条件为真时反复执行循环体。因此,while循环也被叫做“当”型循环。while(while(条件表达式条件表达式)语句语句3.6.2 dowhile语句语句do和while是关键字;条件表达式给出是否执行循环体的判断条件,常用关系表达式或逻辑表达式作为条件表达式,也可以用其他表达式或常量;dowhile语句先执行循环体后判断条件表达式的值,若表达式的值为真则反复地执行循环体,直到表达式的值为假才退出循环。因此,dowhile语句也被叫做“直到”型循环。在一定条件下,while循环可能一次都不执行,而dowhile循环在任何条件下都至少要执行一次。这一点正是在程序设计中决定选择while语句还是do.while语句的重要依据。dowhile语句的语法形式如下:C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构 do 语句语句 while(条件表达式条件表达式);while与与dowhile语句的执行流程语句的执行流程:F注意注意:while(条件表达式)后面分号不可省去。【例例3-6】分别用while循环dowhile循环求1+3+5+7+99C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构F注意注意:应用while语句与dowhile语句时应注意,一般来说在循环体中,应该包含改变循环条件表达式的语句,否则便会造成无限循环(死循环)。378910111213141516/*用while 语句计算1+3+.+99 */void main()int i=1,sum=0;while(i100)sum=sum+i;+i,+i;coutsum=sumendl;/*用do.while 计算1+3+.+99 */void main()int i=1,sum=0;do sum=sum+i;+i,+i;while(i100);coutsum=sumn;if(n=1)break;for(i=2;i=n?coutn是素数n :coutnn;if(n=1)break;for(i=2;i=n?coutn是素数n :coutnn;if(n=1)break;for(i=2;i=n?coutn是素数n :coutn不是素数n;加上标号goon:goto goon;运行结果运行结果与原程序相同F注意注意:尽管C+语言中提供了goto语句,但它决不鼓励程序员使用goto语句。在早期的程序设计方法中,goto语句是控制程序流程的基本手段之一而在现代程序设计方法中,它则变成了程序设计高手的技巧之一。3.8 本章小结 语句用于完成一定功能,对程序实行流程控制。一系列语句构成程序。表达式语句由表达式加上分号构成,完整实现表达式的功能;结构语句用于控制程序的结构;块语句是用 括起来的各种语句系列,在程序中可以看成是一条语句。if语句有基本形式与if.else形式,由这两种形式可以组合成各种结构,但本质上只有这两种形式。在两种形式组合使用发生理解的歧义时,C+规定else与前面最近的没有else的if语句配对。switch.case语句方便实现多重分支,使程序结构更加清晰。但不能取代基本的if语句。C+提供了for、while、dowhile三种循环语句,不同场合、不同使用者使用不同的语句,一般来说:当不知道循环次数时,可以考虑使用while语句;当不知道循环次数时,但循环至少执行一次时,使用do.while语句;for语句最复杂也最灵活,一般在已知循环次数时可以考虑使用for语句。使用for语句时要注意,for语句体中其中的最后一个表达式在循环体执行完后再执行。break语句用在循环和switch.case语句中,用于跳出语句块。continue语句用在循环语句中,用来结束本次循环,忽略后面的语句。C+语语言言程程序序设设计计教教程程第第3章章控控制制结结构构