程序的流程控制.ppt
- 文档编号:17900024
- 上传时间:2023-08-04
- 格式:PPT
- 页数:48
- 大小:225KB
程序的流程控制.ppt
《程序的流程控制.ppt》由会员分享,可在线阅读,更多相关《程序的流程控制.ppt(48页珍藏版)》请在冰点文库上搜索。
第三章程序的流程控制语句,本章内容,语句概述表达式语句复合语句选择语句循环语句转移语句空语句程序设计风格,语句概述,表达式构成了数据处理的基本单位。
当程序中有多个表达式时,就会面临:
先计算哪一个表达式根据不同的情况计算不同的表达式一个或几个表达式需要重复计算多次语句实现对程序执行流程的控制,包括:
顺序控制分支控制循环控制,C+语句的分类,表达式语句,在C+表达式的后面加上一个分号“;”就可以构成表达式语句,其格式为:
;例如:
a+b*c;ab?
a:
b;a+;x=a|b,较常使用的表达式语句,赋值自增/自减输入/输出无返回值的函数调用,等例如x=a+b;/赋值x+;/自增f(a);/函数调用cina;/输入coutb;/输出,复合语句,复合语句是由一对花括号括起来的一条或多条语句,又称为分程序(block)。
其格式为:
中的语句可以是任何的C+语句,其中包括数据定义语句。
复合语句一般作为函数体和结构语句的成分语句。
语法上,复合语句可看作是一个语句。
复合语句举例,inta,b;cinab;intmax;if(a=b)/选择语句max=a;elsemax=b;coutmaxendl;,选择语句,在程序中,常常需要根据不同的情况来从一组语句中选择一个来执行,这是通过选择语句来完成的。
选择语句包括:
if语句switch语句,if语句,if语句(又称条件语句)是根据一个条件满足与否来决定是否执行某条语句或从两个语句中选择一个语句执行。
if语句有两种格式:
if()if()else,if语句的含义,第一种格式,第二种格式,例子:
从键盘输入三个整数,计算其中的最大值并将其输出,#includeusingnamespacestd;intmain()inta,b,c,max;coutabc;if(ab)max=a;elsemax=b;if(cmax)max=c;cout最大者为:
maxendl;return0;,if语句的锯齿格式,为了提高程序的易读性,在写if语句时,最好采用“锯齿”格式,即把成分语句往后缩进几列。
当if语句的成分语句也是if语句时,如果嵌套层次很深,“锯齿”格式将会使得程序正文严重偏向右边,从而带来对程序编辑、查看是的困难。
为了减少文本的缩进量,可以把这样的if语句按下面的格式书写:
if(.).elseif(.).elseif(.).elseif(.).else.,例子:
从键盘输入一个三角形的三条边,判断其为何种三角形,#includeusingnamespacestd;intmain()inta,b,c;cinabc;if(a+b=c|b+c=a|c+a=b)cout不是三角形;elseif(a=b,if语句的歧义问题,下面的if语句的含义是什么?
if()if()elseif()if()elseif()if()elseC+规定:
else子句与前面最近的、没有else子句的if配对。
因此,上面的if语句解释为:
if()if()else若要按2来解释,则需要加上花括号:
if()if()else,switch语句,程序中有时需要从两个(组)以上的语句中选择一个(组)来执行。
C+提供了一条多路选择语句:
switch语句(又称开关语句),它能根据某个表达式的值在多组语句中选择一组语句来执行。
switch语句的格式,switch()case:
case:
case:
default:
例子、从键盘输入一个星期的某一天(0:
星期天;1:
星期一;.),然后输出其对应的英语单词,#includeusingnamespacestd;intmain()intday;cinday;switch(day)case0:
coutSunday;break;case1:
coutMonday;break;case2:
coutTuesday;break;case3:
coutWednesday;break;case4:
coutThursday;break;case5:
coutFriday;break;case6:
coutSaturday;break;default:
coutInputerror;coutendl;return0;,switch语句中的使用break语句,在执行switch语句的某个分支时,需要用break语句结束该分支的执行。
在switch语句的一个分支的执行中,如果没有break语句(最后一个分支除外),则该分支执行完后,将继续执行紧接着的下一个分支中的语句序列。
在其它一些语言(如:
Pascal)的多路选择语句中,一个分支执行完后将自动结束多路选择语句的执行。
C+中的switch语句比其它一些语言中的多路选择语句更具有灵活性。
当若干个分支具有部分重复功能时,C+的switch语句可以节省代码量。
循环(重复)语句,循环是根据某个条件的满足与否来决定是否重复执行一组语句。
循环一般由四个部分组成:
循环初始化循环条件循环体下一次循环准备。
C+提供了三种实现重复操作的循环语句:
while语句do-while语句for语句这三种循环语句在表达能力上是等价的,在解决某个具体问题时,用其中的一种可能会比其它两种更加自然。
while语句,while语句具有如下的格式:
while(),用while语句求n!
#includeusingnamespacestd;intmain()intn;cinn;inti=2,f=1;/循环初始化while(i=n)/循环条件f*=i;i+;/下一次循环准备coutfactorialofn=fendl;return0;,do-while语句,do-while语句的格式如下:
dowhile();,用do-while语句求n!
#includeusingnamespacestd;intmain()intn;cinn;inti=1,f=1;/循环初始化dof*=i;i+;/下一次循环的准备while(i=n);/循环条件coutfactorialofn=fendl;return0;,for语句,for语句的格式如下:
for(;),#includeusingnamespacestd;intmain()intn,i,f;cinn;for(i=2,f=1/循环初始化;i=n/循环条件;i+)/下一次循环准备f*=i;/循环体coutfactorialofn=fendl;return0;,用for语句求n!
三种循环语句的使用原则,循环可以分成两大类:
计数控制的循环事件控制的循环使用三种循环语句的一般原则是:
如果循环前能确定循环的次数,则用for语句;否则,使用while或do-while语句,其中,如果循环体至少要执行一次,则用do-while语句。
由于for语句能清晰地表示“循环初始化”、“循环条件”以及“下一次循环准备”,因此,一些非计数控制的循环也用for语句实现。
例:
计算从键盘输入的一系列整数的和,要求首先输入整数的个数。
(计数控制的循环),#includeusingnamespacestd;intmain()intn;coutn;couta;sum+=a;cout输入的n个整数的和是:
sumendl;return0;,例:
计算从键盘输入的一系列整数的和,要求输入以-1结束。
(事件控制的循环),#includeusingnamespacestd;intmain()inta,sum=0;couta;while(a!
=-1)sum+=a;cina;cout输入的整数的和是:
sumendl;return0;,例315从键盘接收字符,一直到输入了字符y(Y)或n(N)为止。
(事件控制的循环),#include#includeusingnamespacestd;intmain()charch;docoutch;ch=tolower(ch);while(ch!
=y,0,1,1,2,3,5,8,13,.#includeusingnamespacestd;intmain()intn;cinn;intfib_1=0;/用于记住前一个Fibonacci数intfib_2=1;/用于记住新的Fibonacci数for(inti=3;i=n;i+)inttemp=fib_1+fib_2;/计算新的Fibonacci数fib_1=fib_2;/记住前一个Fibonacci数fib_2=temp;/记住新的Fibonacci数cout第n个费波那契数是:
fib_2endl;return0;,例:
求第n个费波那契(Fibonacci)数,#includeusingnamespacestd;intmain()intn,count=0;coutn;/从键盘输入一个正整数for(inti=2;in;i+)/循环:
分别判断2、3、.、n-1是否为素数intj=2;while(ji,例:
编程求出小于n的所有素数(质数),转移语句,除了有条件的分支语句(if和switch)外,C+还提供了无条件的分支语句:
breakcontinuegotoreturn,break语句,break语句的格式:
break;break语句的含义有两个:
结束switch语句的某个分支的执行退出包含它的最内层循环语句(由于循环可以嵌套)在循环体中只要执行了break语句,就立即跳出(结束)循环,循环体中跟在break语句后面的语句将不再执行,程序继续执行循环之后的语句。
在循环体中,break语句一般作为某个if语句的子句,用于实现进一步的循环控制。
例如,判断i是否为素数的循环也可写成:
j=2;k=sqrt(i);while(j=k)if(i%j=0)break;/退出循环j+;或for(j=2,k=sqrt(i);j=k;j+)if(i%j=0)break;,continue语句,continue语句的格式如下:
continue;continue语句只能用在循环语句的循环体中,其含义是:
立即结束当前循环,准备进入下一次循环。
对于while和do-while语句,continue语句将使控制转到循环条件的判断;对于for语句,continue语句将使控制转到:
先计算,然后计算,并根据的计算结果来决定是进入下一次循环还是结束循环。
例:
从键盘输入一些非零整数,然后输出其中所有正数的平方根。
#include#includeusingnamespacestd;intmain()intn;doublesquare_root;coutn;n!
=0;cinn)if(n0)continue;/准备进入下一次循环square_root=sqrt(n);coutn的平方根是:
square_rootendl;return0;,goto语句,goto语句的格式如下:
goto;为标识符,其定义格式为:
在使用goto语句时,应该注意:
不能用goto语句从一个函数外部转入该函数的内部(函数体),也不能用goto语句从一个函数的内部转到该函数的外部。
C+允许用goto语句从内层复合语句转到外层复合语句或从外层复合语句转入内层复合语句,但是,goto语句不能掠过带有初始化的变量定义。
用goto语句求n!
#includeusingnamespacestd;intmain()intn;cinn;inti=1,f=1;loop:
f*=i;i+;if(i=n)gotoloop;coutfactorialofn=fendl;return0;,空语句,空语句的格式为:
;空语句不做任何事情,其作用是用于语法上需要一条语句的地方,而该地方又不需做任何事情。
空语句常常作为结构语句的子句。
在一个复合语句中,需要转向该复合语句中最后一条语句之后,这时可以采用以下的做法:
.gotoend;.end:
;用空语句和goto语句可以来实现continue语句的功能,用空语句和goto语句实现continue语句的功能,while(.).continue;.上述程序等价于:
while(.).gotoend;.end:
;,程序设计风格,程序设计风格通常是指对程序进行静态分析所能确认的程序特性,它涉及程序的易读性。
采用一致/有意义的标识符为程序实体(如:
变量、函数等)命名。
使用符号常量为程序书写注采用代码的缩进格式等除此之外,结构化程序设计就是一种良好程序设计风格的典范。
结构化程序设计,结构化程序设计(StructuredProgramming,简称SP)是指“按照一组能够提高程序易读性与易维护性的规则进行程序设计的方法”SP不仅要求所编出的程序结构良好,而且还要求程序设计过程也是结构良好的,后者是前者的基础。
对程序设计过程而言,“结构良好”是指采用分解和抽象的方法来完成程序设计任务,具体体现为:
“自顶向下、逐步精化”的程序设计过程。
对程序而言,“结构良好”是指:
每个程序单位应具有单入口、单出口的性质。
不包含不会停止执行的语句,程序在有限时间内结束。
程序中没有无用语句,程序中所有语句都有被执行的机会。
结构化程序设计(续),结构化程序设计通常可用三种基本结构来实现,(顺序),(选择),(循环),上面三种结构都具有单入口、单出口的性质。
关于goto语句,goto语句会使得程序的静态结构和动态结构不一致,导致程序难以理解、可靠性下降和不容易维护。
从结构化程序设计的角度讲,goto语句会破坏程序中的每一个结构所具有的单入口/单出口的性质。
实际上,goto语句的使用可以分成两类:
向前的转移(forward)(可用分支结构实现)往回的转移(backward)(可用循环结构实现),例子真伪问题,已知4位同学中的一位数学考了100分,当小李询问是谁考的100分时,4个人的回答如下:
A说:
不是我。
B说:
是C。
C说:
是D。
D说:
他胡说。
已知三个人说的是真话,一个人说的是假的。
请用以上信息找出考100分的人。
分析,令c=thisman表示考了100分的人。
将4个人的话用逻辑表达式表达出来。
A:
thisman!
=AB:
thisman=CC:
thisman=DD:
thisman!
=D有三个人说真话,则以上四个表达式的值有三个为1,一个为0.,voidmain()intk=0,sum=0,flag=0;charthisman=;for(k=1;k=4;k+)thisman=64+k;sum=(thisman!
=A),面向过程的求解法,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 流程 控制