第3章程序的流程控制PPT讲稿.ppt
《第3章程序的流程控制PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第3章程序的流程控制PPT讲稿.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章程序的流程控制第1页,共65页,编辑于2022年,星期一本章内容n n流程控制概述n n顺序控制n n选择控制n n循环控制n n无条件转移控制n n程序设计风格第2页,共65页,编辑于2022年,星期一流程控制概述n n表达式构成了数据处理的基本单位。n n当程序中有多个表达式时,就会面临:先计算哪一个表达式根据不同的情况计算不同的表达式一个或几个表达式需要重复计算多次n n语句实现对程序执行流程的控制,包括:顺序控制:按书写次序执行。选择控制:根据条件选择执行。循环控制:重复执行。第3页,共65页,编辑于2022年,星期一C+语句的分类第4页,共65页,编辑于2022年,星期一顺序控
2、制n n按书写次序,从左到右、从上到下顺序执行。n n实现顺序控制的C+语句有:表达式语句复合语句空语句第5页,共65页,编辑于2022年,星期一 表达式语句n n在在C+C+表达式的后面加上一个分号“;”就可以构成表达式语句,其格式为:;例如:例如:例如:例如:a+b*c;a b?a:b;a+;x=a|b&c;n n连续的多个表达式语句按它们的书写次序依次执行。第6页,共65页,编辑于2022年,星期一较常使用的表达式语句 n n赋值n n自增/自减n n函数调用n n输入/输出例如x=a+b;/赋值x+;/自增f(a);/函数调用cin a;/输入cout b;/输出 表达式语句程序例1表
3、达式语句程序例2例1:编写一个程序,从键盘输入一个数,计算该数的平方、立方及平方根并输出 例2:编写一个程序计算a+2a+3a+的前n项的和第7页,共65页,编辑于2022年,星期一复合语句n n复合语句是由一对花括号括起来的一条或多条语句,又称为块(block)。语法上,复合语句可看作是一个语句。其格式为:中的语句可以是任何的C+语句,其中包括数据定义和声明语句。n n复合语句中的语句序列一般按照书写次序执行。n n复合语句一般作为函数体和结构语句的成分语句。第8页,共65页,编辑于2022年,星期一复合语句举例 int a,b;cin a b;cin a b;int max;if(a=b)
4、/if(a=b)/选择语句选择语句选择语句选择语句max=a;else else max=b;cout max a b;cin a b;int max;int max;max=ab?a:b;max=ab?a:b;cout max cout max endl;endl;将选择语句用一个语句完成将选择语句用一个语句完成第9页,共65页,编辑于2022年,星期一空语句 n n根据程序设计的需要,在程序中的某些地方有时需要加上一些空操作,以方便其它流程控制的实现。n n空语句的格式为:;n n空语句不做任何事情,其作用是用于语法上需要一条语句的地方,而该地方又不需做任何事情。空语句常常作为结构语句的子
5、句。第10页,共65页,编辑于2022年,星期一n n例如:例如:.goto end;/.goto end;/转向下面由语句标号转向下面由语句标号endend标识的空语句标识的空语句.end:end:;/空语句空语句 其中,在其中,在“end:;end:;”中,中,endend是一个语句标号,是一个语句标号,“;”是一个空语句。是一个空语句。n n再例如:int i,sum;int i,sum;for(sum=0,i=1;i=100;sum+=i,i+)for(sum=0,i=1;i=100;sum+=i,i+);其中,循环体为一条空语句其中,循环体为一条空语句第11页,共65页,编辑于202
6、2年,星期一选择控制n n在程序中,常常需要根据不同的情况来从一组语句中选择一个来执行(分支),这是通过选择语句来完成的。n n选择语句包括:if语句switch语句第12页,共65页,编辑于2022年,星期一 if 语句n nif语句(又称条件语句)是根据一个条件满足与否来决定是否执行某个语句或从两个语句中选择一个语句执行。n nif语句有两种格式:if()if()else 其中的、必须是一个语句!(复合语句算一个语句。)第13页,共65页,编辑于2022年,星期一 if语句的含义第一种格式第二种格式第14页,共65页,编辑于2022年,星期一例3.3:从键盘输入三个整数,计算其中的最大值并
7、将其输出#include#include using namespace std;using namespace std;int main()int main()int a,b,c,max;int a,b,c,max;cout cout 请输入三个整数:请输入三个整数:请输入三个整数:请输入三个整数:endl;a b c;cin a b c;if(a b)if(a b)max=a;max=a;elseelsemax=b;max=b;if(c max)max=c;if(c max)max=c;cout cout 最大者为:最大者为:最大者为:最大者为:max endl;max b?a:b;max
8、=ab?a:b;max=maxc?max:c;max=maxc?max:c;将选择语句其它语句替换将选择语句其它语句替换第15页,共65页,编辑于2022年,星期一例3.4:求一元二次方程ax2+bx+c=0的实解分析:写程序不等同于做数学题目,一定要考虑清楚各种可能的情况,这样才能保证程序的健壮性健壮性。在写该程序时,由于a a、b、c是由键盘输入,应该考虑情况有:是由键盘输入,应该考虑情况有:(1)a=0,一元二次方程变成线性方程,一元二次方程变成线性方程(2)00,方程有两个实数解具体程序如下:具体程序如下:程序一程序一求出方程所有解的程序如下:程序二程序二第16页,共65页,编辑于20
9、22年,星期一if语句的锯齿格式n n为了提高程序的易读性,在写ifif语语句句时时,最最好好采采用用“锯齿”格式。如格式。如格式一n n如如果果if语语句句嵌嵌套套层层次次很很深深,“锯锯齿齿”格格式式将将会会使使得得程程序序正正文文严严重重偏偏向向右右边边,给给查查看看程程序序带带来来困困难难。可可以以把把ifif语句写成格式二:格式二:格式二:格式二:格式二:if(.)if(.).else if(.)else if(.).else if(.)else if(.).elseelse .格式一:格式一:格式一:格式一:锯齿形锯齿形锯齿形锯齿形if(.)if(.).else else if(.
10、)if(.).else else if(.)if(.).else else .n注意:Ifelse嵌套时,else与最近的if保持匹配第17页,共65页,编辑于2022年,星期一例例5 5:从键盘输入一个三角形的三条边,判断其为何种三角形从键盘输入一个三角形的三条边,判断其为何种三角形#include#include using namespace std;using namespace std;int main()int main()int a,b,c;int a,b,c;cin a b c;cin a b c;if(a+b=c|b+c=a|c+a=b)if(a+b=c|b+c=a|c+a=
11、b)cout cout 不是三角形不是三角形不是三角形不是三角形;else if(a=b&b=c)else if(a=b&b=c)cout cout 等边三角形等边三角形等边三角形等边三角形;else if(a=b|b=c|c=a)else if(a=b|b=c|c=a)cout cout 等腰三角形等腰三角形等腰三角形等腰三角形;else if(a*a+b*b=c*c|b*b+c*c=a*a|c*c+a*a=b*b)else if(a*a+b*b=c*c|b*b+c*c=a*a|c*c+a*a=b*b)cout cout 直角三角形(非等腰)直角三角形(非等腰)直角三角形(非等腰)直角三角形
12、(非等腰);elseelsecout cout 其它三角形其它三角形其它三角形其它三角形;cout endl;cout endl;return 0;return 0;思考:思考:如何在程序中增加判断如何在程序中增加判断 等腰直角三角形的语句?等腰直角三角形的语句?第18页,共65页,编辑于2022年,星期一方法一:方法一:else if(a*a+b*b=c*c|b*b+c*c=a*a|c*c+a*a=b*b)else if(a*a+b*b=c*c|b*b+c*c=a*a|c*c+a*a=b*b)if if(a=b|b=c|c=a a=b|b=c|c=a)cout cout 等腰直角三角形等腰直
13、角三角形等腰直角三角形等腰直角三角形;else else cout cout 直角三角形(非等腰)直角三角形(非等腰)直角三角形(非等腰)直角三角形(非等腰);方法二:方法二:else if(a*a+b*b=c*c)&(a=b)|(b*b+c*c=else if(a*a+b*b=c*c)&(a=b)|(b*b+c*c=a*a)&(b=c)|(c*c+a*a=b*b)&(c=a)a*a)&(b=c)|(c*c+a*a=b*b)&(c=a)cout cout 等腰直角三角形等腰直角三角形等腰直角三角形等腰直角三角形;方法三:方法三:else if(a*a+b*b=c*c|b*b+c*c=a*a|c
14、*c+a*a=else if(a*a+b*b=c*c|b*b+c*c=a*a|c*c+a*a=b*b)&b*b)&(a=b|b=c|c=a)a=b|b=c|c=a)cout cout h2h1h2,时间,时间2在前;时在前;时h1h2,h1m2,时间2在前;m1s2s1s2,时间2在前;s1s2s1=90)cout cout=80&score=80&score 90)cout=70&score=70&score 80)cout cout=60&score=60&score 70)cout cout 及格及格及格及格;if(score 60)cout cout=90)cout cout=80&s
15、core=80&score 90)cout cout=70&score=70&score 80)cout=60&score=60&score 70)cout 及格及格及格及格;elsecout cout 不及格不及格不及格不及格;说明:只会运行第一条说明:只会运行第一条if语句语句第21页,共65页,编辑于2022年,星期一if 语句的歧义问题n nif(if()if()if()else else 的含义的含义1.1.if(if(表达式表达式1)1)if(if(表达式表达式2)2)else else 22.2.if(if(表达式表达式1)1)if(if(表达式表达式)1 else else 2
16、n nC+C+规定:else子句与它前面最近的、没有子句与它前面最近的、没有else子句的子句的if配对。因此,上面的配对。因此,上面的if if语句解释为:if(if(表达式表达式1)1)if(if(表达式表达式2)2)else else 2 n n若要按2 2来解释,则需要加上花括号(复合语句):来解释,则需要加上花括号(复合语句):if(if(表达式表达式1)if(1)if(表达式表达式2)2)else else 2第22页,共65页,编辑于2022年,星期一switch 语句n n程序中有时需要从两个(组)以上的语句中选择一个(组)来执行。n nC+提供了一条多路选择语句:switch
17、语句(又称开关语句),它能根据某个表达式的值在多组语句中选择一组语句来执行。每一组语句的最后一个语句往往是break语句。第23页,共65页,编辑于2022年,星期一例7、从键盘输入一个星期的某一天(0:星期天;1 1:星期一;.),输出对应的英语单词(),输出对应的英语单词(if语句实现)语句实现)采用if语句实现:语句实现:程序程序缺陷:缺陷:多次对day的值进行比较书写麻烦,可读性差解决:解决:采用采用switchswitch语句实现,具体格式如下:语句实现,具体格式如下:switch(switch()case case:1 :case case:ndefault:default:n+1
18、 注意:注意:switchswitch中的整型表达式可以是中的整型表达式可以是整型、字符型字符型和和枚举型,case语句中的常量表达式也必须相语句中的常量表达式也必须相比配比配第24页,共65页,编辑于2022年,星期一例8、从键盘输入一个星期的某一天(0:星期天;1:星期一;.),然后输出其对应的英语单词#include#include using namespace std;using namespace std;int main()int main()int day;int day;cin day;cin day;switch(day)switch(day)case 0:cout Sun
19、day;break;case 0:cout Sunday;break;case 1:cout Monday;break;case 1:cout Monday;break;case 2:cout Tuesday;break;case 2:cout Tuesday;break;case 3:cout Wednesday;break;case 3:cout Wednesday;break;case 4:cout Thursday;break;case 4:cout Thursday;break;case 5:cout Friday;break;case 5:cout Friday;break;cas
20、e 6:cout Saturday;break;case 6:cout Saturday;break;default:cout Input error;default:cout Input error;cout endl;cout endl;return 0;return 0;思考:思考:思考:思考:如何用字符串实现上述结果?如何用字符串实现上述结果?程序程序第25页,共65页,编辑于2022年,星期一switch语句中使用break语句n n在执行switch语句的某个分支时,需要用break语句结束该分支的执行。n n在switch语句的一个分支的执行中,如果没有break语句(最后一个分
21、支除外),则该分支执行完后,将继续执行紧接着的下一个分支中的语句序列。n nC+中的switch语句比其它一些语言中的多路选择语句更具有灵活性。当若干个分支具有部分重复功能时,C+的switch语句可以节省代码量。第26页,共65页,编辑于2022年,星期一switch(.)switch(.).case case 1:A Acase case 2:B Bcase case 3:C C;break;break;.n n上面的语句假设上面的语句假设A、B中没有breakbreak语句,则语句,则分支分支1执行A A、B和C;分支分支2执行执行B B和和C C;分支分支3 3执行C C。例9 9:计
22、算某年某月的天数分析:每年的1、3 3、5 5、7 7、8 8、10、1212各有3131天,天,4 4、6、9、11各有各有3030天,2月闰年2929天,其它年尾为28天。闰年判断:年份能被4 4整除不能被整除不能被100整除 程序第27页,共65页,编辑于2022年,星期一循环控制 n n如何编程计算如何编程计算n!n!(n n是变量)?是变量)?n!=n*(n-1)*(n-2)*n!=n*(n-1)*(n-2)*.*2*1*2*1 表达式中不允许有表达式中不允许有“.”n n上面的问题需要用重复操作控制来解决:对相同的操作重复上面的问题需要用重复操作控制来解决:对相同的操作重复执行多次
23、,每一次操作的数据有所不同。执行多次,每一次操作的数据有所不同。f=1,f=1,对对i=2n,i=2n,重复执行:重复执行:f=f*i;f=f*i;n n循环循环语句为解决重复操作提供了一种途径。n n循环一般由四个部分组成:循环一般由四个部分组成:循环初始化循环初始化 循环条件循环条件 循环体循环体 下一次循环准备。下一次循环准备。第28页,共65页,编辑于2022年,星期一n nC+提供了三种实现重复操作的循环语句:while语句do-while语句for语句第29页,共65页,编辑于2022年,星期一while 语句n nwhilewhile语句具有如下的格式:语句具有如下的格式:whi
24、le(while()第30页,共65页,编辑于2022年,星期一用while语句求n!#include using namespace std;using namespace std;int main()int n;cin n;int i=2,f=1;/循环初始化循环初始化while(i=n)/while(i=n)/循环条件循环条件 f*=i;f*=i;i+;/下一次循环准备下一次循环准备下一次循环准备下一次循环准备 /循循环环体体cout factorial of n =f endl;cout factorial of n =f endl;return 0;第31页,共65页,编辑于2022
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章程 流程 控制 PPT 讲稿
限制150内