《C程序的流程控制.pptx》由会员分享,可在线阅读,更多相关《C程序的流程控制.pptx(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+程序的流程控制程序的流程控制 第三章第三章程序或程序模块的三种基本结构程序或程序模块的三种基本结构 顺序结构顺序结构条件分支结构条件分支结构循环结构循环结构通过安排语句的排列顺序来决定程序流程由特定的条件决定执行哪个语句的程序结构由特定的条件决定某个语句重复执行次数的控制方式顺序结构顺序结构 按语句的先后顺序依次执行每一条语句语句1语句2顺序结构示意X=3;Y=4Z=X;X=YY=Z;程序段完成的功能是:交换程序段完成的功能是:交换X和和Y的值的值例:条件语句1语句2falsetrue语句格式:If(If(条件条件)语句语句1 1 else else 语句语句2 2 含义:如果条件成立,执
2、行语句1,否则执行语句2流程示意:If多分支结构一多分支结构一条件分支结构条件分支结构 条件语句truefalse语句格式:If(If(条件条件)语句语句含义:如果条件成立,执行语句1,否则什么也不做(即跳出if语句的执行,到下一第语句)流程示意:(无else子句)If多分支结构二多分支结构二条件分支结构条件分支结构 例1:输入2个数,找出其中最大的一个并显示出来。#includevoid main()int i,j;coutij;cout=j)coutiendl;else coutjendl;条件分支结构例2:输入3个数,找出其中最大的一个并显示出来。#includevoid main()i
3、nt i,j,k;coutijk;cout“3个数中最大的是:”;if(ij)i=j;if(ik)i=j;coutiendl;两条无else分支的语句例3:输入3个数,然后按从大到小的顺序把它们显示出来。#includevoid main()int i,j,k,p;coutijk;if(ij)p=i;i=j;j=p;if(ik)p=i;i=k;k=p;if(jk)p=j;j=k;k=p;coutendlijk;例4:P58,例3.5,请对照书本自主学习If 语句的嵌套语句的嵌套语句中出现多个if和多个else时,首先必须进行配对,配对原则:从遇见的第一个else开始,else总与离它最近的if
4、配对。在if语句的else前嵌套另一个if语句容易使所表达的逻辑关系难于理解,应加以避免,必要时把嵌套位置改为else之后条件分支结构条件分支结构 If多分支结构多分支结构If多分支结构是一种通过规范化的if嵌套所构成的条件分支结构,在这种结构中if语句嵌套在else之后使用格式:if(if(条件条件1 1)语句语句1 1else ifelse if(条件条件2 2)语句语句2 2else ifelse if(条件条件3 3)语句语句3 3else ifelse if(条件条件n n)语句语句n nelse else 语句语句n+1n+1条件分支结构条件分支结构 例:输入一个0100分范围内的
5、一个成绩,显示相应的等级:90100优8089良 7079中6069及格60分以下不及格#includevoid main()float score;coutscore;if(score100)cout“成绩必须在0100之间”;else if(score60)cout“不及格”endl:else if(score70)cout“及格”endl;else if(score80)cout“中”endl;else if(score90)cout“良”endl;else cout“优”endl;switch switch 多分支结构多分支结构 switchswitch(整型表达式整型表达式)case
6、 case 整型常量表达式整型常量表达式1 1:语句序列语句序列1 1 case case 整型常量表达式整型常量表达式2 2:语句序列语句序列2 2 case case 整型常量表达式整型常量表达式k k:语句序列语句序列k k default:default:语句序列语句序列k+1k+1 条件分支结构条件分支结构 switch语句格式:switch语句的含义:通过判断整型表达式整型表达式的值,决定程序的去向:若整型表达式整型表达式的值与整型常量表达式整型常量表达式1 1的值相同,则依次执行语句序列语句序列1 1开始的各个语句序列,即执行语句语句序列序列1 1,语句序列语句序列2 2,语句序
7、列语句序列k k,语句序列语句序列k+1k+1 若整型表达式整型表达式的值与整型常量表达式整型常量表达式2 2的值相同,则依次执行开始的各个语句序列,即执行语句序列语句序列2 2,语句序列语句序列k k,语句序列语句序列k+1k+1 依此类推 若整型表达式整型表达式的值不等于任何列出的整型常量表达式的值,则执行从defaultdefault开始的语句序列 若没有defaultdefault语句,则什么也不做。在依次执行语句序列的过程中,如遇见break语句,则立即停止语句序列的执行,跳出switch分支结构因此,若要让分支结构只执行与整型表达式整型表达式匹配的整型整型常量表达式常量表达式后的语
8、句序列,而不往下执行下面的语句序列,应在该语句序列后加一条break语句在每一个整型常量表达式整型常量表达式后的语句序列后加break语句的switch分支结构,等同于if多分支结构。break语句在switch分支结构中的应用例1:输入一个表示星期的数字(0表示星期日,1表示星期二,6表示星期六),显示对应的英文单词。#includevoid main()int weekday;coutweekday;switch(weekday)case 0:cout“Sunday”endl;break;case 1:cout“Monday”endl;break;case 2:cout“Tuesday”e
9、ndl;break;case 3:cout“Wednesday”endl;break;case 4:cout“Thursday”endl;break;case 5:cout“Friday”endl;break;case 6:cout“Saturday”endl;break;/weekday的值为0时,显示Sunday,break语句阻止了往下执行输出语句例2:输入一个0100分范围内的一个成绩,显示相应的等级:90100优8089良 7079中6069及格60分以下不及格(用switch多分支结构实现)#includevoid main()float score;coutscore;switc
10、h(int(score/10)case 0:case 1:case 2:case 3:case 4:case 5:cout“不及格”endl;break;case 6:cout“及格”endl;break;case 7:cout“中”endl;break;case 8:cout“良”endl;break;case 9:case 10:cout“优”endl;break;default:cout“成绩必须在0100分之间”;例2说明:int(score/10)的值为0、1、2、3、4时分别执行case0、case1、case2、case3、case4后的语句序列是空的,程序从这些入口点进入后,直
11、接往下走,并在执行完case 5后的语句并遇见break语句时跳出switch分支。因此当值为05时均显示“不及格”。case 9后的语句为空,从case 9进入后,直接往下执行case 10后的语句序列,遇见break语句时跳出switch分支。因此,值为9和10时均显示“优”。循环结构循环结构 forfor(循环初始化循环初始化;循环条件循环条件;循环参数调整循环参数调整)循环体循环体for 语句循环初始化循环初始化循环条件循环条件循环参数调整循环参数调整循环体循环体falsetruefor 循环结构示意for 循环含义首先进行循环初始化循环初始化,然后判断循环循环条件条件,若循环循环条件
12、条件成立则执行循环体循环体;(若不成立,则结束循环)循环体循环体执行完后,再进行循环参数的调整循环参数的调整,然后再进行循循环环条件条件判断,若循环循环条件条件成立,则继续执行循环体循环体(否则跳出循环),循环体循环体执行完进行循环参数的调整循环参数的调整,然后再进行条件判断条件判断,条件成立继续执行循环体循环体,(否则跳出循环),直到跳出循环关于for 循环语句的几点说明 循环条件循环条件是一个逻辑表达式 循环初始化循环初始化和循环参数的调整循环参数的调整都应当具有副作用 循环体循环体可以是复合语句,也可以是基本语句典型的for循环实例:for(int i=0;i100;i+=5)couti
13、;如果循环条件循环条件一开始就不成立,则循环体循环体一次也不执行 循环初始化循环初始化和循环参数的调整循环参数的调整可以为空,相当于while循环 循环条件循环条件为空意味着永真条件 循环体循环体为空,可用于延迟一段时间例:分析以下程序段的执行结果for(int I=0;I=20;I+)cout*;分析:第1次:循环初始化I=0,判断条件I=20成立,第一次执行循环体,输出第一个*;第2次:进行参数调整,I增1,I的值为1,条件成立,执行第二次循环,输出第二个*第20次:I为19,循环条件成立,执行循环体,输出第20个*号,然后I调整为20;第21次:I为20,循环条件成立,执行循环体,输出第
14、21个*,然后I调整为21;跳出循环:I的值为21,循环条件I=20不成立,跳出循环执行结果:输出21个*号例1:输入10个数,计算并显示它们的合计#include void main()double x,s=0;/x用于临时保存输入的数据,s用于 保存累加结果,称s为累加器 cout“请输入10个数:”;for(int i=0;ix;s+=x;cout“合计:”s;例2:显示并输出如下所示的三角形:*第0行:5空、1*第1行:4空、3*第2行:3空、5*第3行:2空、7*第4行:1空、9*第5行:0空、11*由以上得出:若行号为i,则应输出的空格数为5-i,应输出的*数为i+i+1程序如下页
15、:#include void main()for(int i=0;i6;i+)/循环6次,输出6行 coutendl;/每次循环换行,换6次,显示6行 int j;for(j=0;j5-i;j+)cout /每行输出若干空格 for(j=0;ji+i+1;j+)cout*/然后输出若干*cout“合计:”s;书本70页例3.11显示输出99乘法表。请看书本自主学习注:setw(2)功能是为下一个要输出的数据设置输出宽度,该设置只对下一个数据输出有效。例如,cout1setw(8)20)cout0 循环体是一个基本语句:coutI-;分析:分析:第一次:I=20时,执行第一次循环,输出I的值20
16、,同时在cout0不成立,不执行循环体,跳出循环。因此循环共执行了20次。do while 语句do do 循环体循环体 while while(循环条件循环条件)循环结构循环结构 do while 循环结构示意循环条件循环条件循环体循环体falsetruedo while 循环含义不判断条件直接执行一次循环体,循环体执行完后,再判断循环条件,若条件为真,则再次执行循环体,(若条件不成立,则跳出循环),在第二次循环体执行完后,继续先判断循环条件,条件满足,则执行循环体,直到条件不满足,跳出循环。do while 循环和while 循环的区别do while 循环无论循环条件是否满足,循环体至少
17、执行一次;然后再根据循环条件决定是否继续执行循环体;while 循环循环条件不满足则循环体一次也不执行I=1;While(I=5)CoutI+;I=1;DoCoutI+;While(I=5)用do while 循环实现用while 循环实现用两种循环输出相同的内容:输出:12345用While循环与dowhile循环等效:I=6;While(I=5)CoutI+;/循环体一次也没执行,因此无任何内容输出I=6;DoCoutI+;While(I0;I-)s+=I;/for循环8次实现s=8+7+1,且I的值为0循环结束时,s的值为36While(+I5)s+=I;/while循环4次,把14再加
18、到s中,I的值为5时循环结束,s的值为46后,s的值是()答案:46#include#includevoid main()double A,B,C;do coutendl ABC;while(A=0.0)/输入3个系数,当系数A为0时重新输入 coutendl;double Delta=B*B-4*A*C;/以下程序段根据Delta的值求方程的解 If(Delta0.0)cout0.0)cout“此方程有两个不同的实数解”;cout(-B+sqrt(Delta)/(A+A);cout“和”(-B-sqrt(Delta)/(A+A);else cout“此方程有两个相同的实数解”-B/(A+A)
19、;break:continue:强制退出循环,执行下一条语句强制退出循环,执行下一条语句提前结束本轮循环体的执行,判断循环条件,提前结束本轮循环体的执行,判断循环条件,提前进入下一轮循环提前进入下一轮循环说明:这两个语句通常与if语句同时使用,形如:if()break;if()continue当if条件成立时,退出循环或提前结束本轮循环体的执行循环特殊控制语句循环特殊控制语句 例:允许反复地输入半径,计算并显示圆面积,直到输入的半径是0时为止(即输入0是终止程序运行的信号);若发现是输入的半径是负数,提示操作者重新输入。#include#define PI 3.1416 void main()double radius,area;while(ture)/永真条件,允许反复输入半径 coutendlradius;if(radius=0.0)break;/半径为0,则结束永真条件的循环的执行 if(radius0.0)coutendl“输入错:半径不能为负!”continue;/半径为负,提前结束本次循环,回到循环条件判断,重新执行循环体,即重新输入半径 area=PI*radius*radius;/半径为正数时不执行以上两条if语句,直接求面积并输出 coutendl“圆的面积:”area;