C++程序的流程控制第三章程序或程序模块的三种基本结构顺序结构条件分支结构循环结构通过安排语句的排列顺序来决定程序流程由特定的条件决定执行哪个语句的程序结构由特定的条件决定某个语句重复执行次数的控制方式顺序结构按语句的先后顺序依次执行每一条语句语句1语句2顺序结构示意X=3;Y=4Z=X;X=YY=Z;程序段完成的功能是:交换X和Y的值例:条件语句1语句2falsetrue语句格式:If(条件)语句1else语句2含义:如果条件成立,执行语句1,否则执行语句2流程示意:—If多分支结构一条件分支结构条件语句truefalse语句格式:If(条件)语句含义:如果条件成立,执行语句1,否则什么也不做(即跳出if语句的执行,到下一第语句)流程示意:(无else子句)—If多分支结构二条件分支结构例1:输入2个数,找出其中最大的一个并显示出来。#includeiostream.hvoidmain(){inti,j;cout“请输入2个整数”;cinij;cout“2个数中最大的是:”;if(i=j)coutiendl;elsecoutjendl;}条件分支结构例2:输入3个数,找出其中最大的一个并显示出来。#includeiostream.hvoidmain(){inti,j,k;cout“请输入3个整数”;cinijk;cout“3个数中最大的是:”;if(ij)i=j;if(ik)i=j;coutiendl;}两条无else分支的语句例3:输入3个数,然后按从大到小的顺序把它们显示出来。#includeiostream.hvoidmain(){inti,j,k,p;cout“请输入3个整数”;cinijk;if(ij){p=i;i=j;j=p;}if(ik){p=i;i=k;k=p;}if(jk){p=j;j=k;k=p;}coutendli‘’j‘’k;}例4:P58,例3.5,请对照书本自主学习If语句的嵌套语句中出现多个if和多个else时,首先必须进行配对,配对原则:从遇见的第一个else开始,else总与离它最近的if配对。在if语句的else前嵌套另一个if语句容易使所表达的逻辑关系难于理解,应加以避免,必要时把嵌套位置改为else之后条件分支结构If多分支结构If多分支结构是一种通过规范化的if嵌套所构成的条件分支结构,在这种结构中if语句嵌套在else之后使用格式:if(条件1)语句1elseif(条件2)语句2elseif(条件3)语句3……elseif(条件n)语句nelse语句n+1条件分支结构例:输入一个0~100分范围内的一个成绩,显示相应的等级:90~100——优80~89——良70~79——中60~69——及格60分以下——不及格#includeiostream.hvoidmain(){floatscore;cout“请输入成绩”;cinscore;if(score0||score100)cout“成绩必须在0~100之间”;elseif(score60)cout“不及格”endl:elseif(score70)cout“及格”endl;elseif(score80)cout“中”endl;elseif(score90)cout“良”endl;elsecout“优”endl;}switch多分支结构switch(整型表达式){case整型常量表达式1:语句序列1case整型常量表达式2:语句序列2…case整型常量表达式k:语句序列k〖default:语句序列k+1〗}条件分支结构switch语句格式:switch语句的含义:通过判断整型表达式的值,决定程序的去向:若整型表达式的值与整型常量表达式1的值相同,则依次执行语句序列1开始的各个语句序列,即执行语句序列1,语句序列2,……语句序列k,语句序列k+1若整型表达式的值与整型常量表达式2的值相同,则依次执行开始的各个语句序列,即执行语句序列2,……语句序列k,语句序列k+1依此类推……若整型表达式的值不等于任何列出的整型常量表达式的值,则执行从default开始的语句序列若没有default语句,则什么也不做。在依次执行语句序列的过程中,如遇见break语句,则立即停止语句序列的执行,跳出switch分支结构因此,若要让分支结构只执行与整型表达式匹配的整型常量表达式后的语句序列,而不往下执行下面的语句序列,应在该语句序列后加一条break语句在每一个整型常量表达式后的语句序列后加break语句的switch分支结构,等同于if多分支结构。break语句在switch分支结构中的应用例1:输入一个表示星期的数字(0表示星期日,1表示星期二,……6表示星期六),显示对应的英文单词。#includeiostream.hvoidmain(){intweekday;cout“今天星期几?”;cinweekday;switch(weekday){case0:cout“Sunday”endl;break;case1:cout“Monday”endl;break;case2:cout“Tuesday”endl;break;case3:cout“Wednesday”endl;break;case4:cout“Thursday”endl;break;case5:cout“Friday”endl;break;case6:cout“Saturday”endl;break;}//weekday的值为0时,显示Sunday,break语句阻止了往下执行输出语句例2:输入一个0~100分范围内的一个成绩,显示相应的等级:90~100——优80~89——良70~79——中60~69——及格60分以下——不及格(用switch多分支结构实现)#includeiostream.hvoidmain(){floatscore;cout“请输入成绩”;cinscore;switch(int(score/10)){case0:case1:case2:case3:case4:case5:cout“不及格”endl;break;case6:cout“及格”endl;break;case7:cout“中”endl;break;case8:cout“良”endl;break;case9:case10:cout“优”endl;break;default:cout“成绩必须在0~100分之间”;}}例2说明:int(score/10)的值为0、1、2、3、4时分别执行case0、case1、case2、case3、case4后的语句序列是空的,程序从这些入口点进入后,直接往下走,并在执行完case5后的语句并遇见break语句时跳出switch分支。因此当值为0~5时均显示“不及格”。case9后的语句为空,从case9进入后,直接往下执行case10后的语句序列,遇见break语句时跳出switch分支。因此,值为9和10时均显示“优”。循环结构for(循环初始化;循环条件;循环参数调整)循环体for语句循环初始化循环条件循环参数调整循环体falsetruefor循环结构示意for循环含义首先进行循环初始化,然后判断循环条件,若循环条件成立则执行循环体;(若不成立,则结束循环)循环体执行完后,再进行循环参数的调整,然后再进行循环条件判断,若循环条件成立,则继续执行循环体(否则跳出循环),循环体执行完进行循环参数的调整,然后再进行条件判断,条件成立继续执行循环体,(否则跳出循环),……,直到跳出循环关于for循环语句的几点说明•循环条件是一个逻辑表达式•循环初始化和循环参数的调整都应当具有副作用•循环体可以是复合语句,也可以是基本语句•典型的for循环实例:for(inti=0;i100;i+=5)couti‘’;•如果循环条件一开始就不成立,则循环体一次也不执行•循环初始化和循环参数的调整可以为空,相当于while循环•循环条件为空意味着永真条件•循环体为空,可用于延迟一段时间例:分析以下程序段的执行结果for(intI=0;I=20;I++)cout‘*’;分析:第1次:循环初始化I=0,判断条件I=20成立,第一次执行循环体,输出第一个*;第2次:进行参数调整,I增1,I的值为1,条件成立,执行第二次循环,输出第二个*……第20次:I为19,循环条件成立,执行循环体,输出第20个*号,然后I调整为20;第21次:I为20,循环条件成立,执行循环体,输出第21个*,然后I调整为21;跳出循环:I的值为21,循环条件I=20不成立,跳出循环执行结果:输出21个*号例1:输入10个数,计算并显示它们的合计#includeiostream.hvoidmain(){doublex,s=0;//x用于临时保存输入的数据,s用于保存累加结果,称s为累加器cout“请输入10个数:”;for(inti=0;i10;i++){//循环10次,计算并累加10个数据cinx;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程序如下页:#includeiostream.hvoidmain(){for(inti=0;i6;i++){//循环6次,输出6行coutendl;//每次循环换行,换6次,显示6行intj;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)23;输出:123setw(8)只对数据2有效,数据2占据8个字符宽度,且数据靠右显示。while语句while(循环条件)循环体循环结构while循环结构示意循环条件循环体falsetruewhile循环含义先判断循环条件,若条件成立,则执行,循环体执行完后往回判断循环条件,若循环条件成立再执行循环体,否则不执行循环体,跳出循环,循环体执行完后再判断循环条件,循环条件成立继续执行循环体,……直到跳出循环。循环条件中的参数的调整则通常在循环体或循环条件中进行例:分析以下循环语句执行了几次循环I=20;While(I0)coutI--;//循环条件是:I0循环体是一个基本语句:coutI--;分析:第一次:I=20时,执行第一次循环,输出I的值20,同时在coutI--时I的后减,调整成19,再判断条件是否成立第二次:I=19时,条件成立,执行循环体,同时I调整成18……第20次:I=1时,条件成立,执行循环体,同时I调整成0,此时再判断条件I0不成立,不执行循环体,跳出循环。因此循环共执行了20次。do…while语句do循环体while(循环条件)循环结构do…while循环结构示意循环条件循环体falsetruedo…while循环含义不判断条件直接执行一次循环体,循环体执行完后,再判断循环条件,若条件为真,则再次执行循环体,(若条件不成立,则跳出循环),在第二次循环体执行完后,继续先判断循环条件,条件满足,则执行循环体,……直到条件不满足,跳出循环。do…while循