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