您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第3章C++程序的流程控制
第三章程序的流程控制——语句C++语句的分类表达式语句•在C++表达式的后面加上一个分号“;”就可以构成表达式语句,其格式为:表达式;例如:–a++;–x=a||b&&c;–a+b*c;//无实际意义–ab?a:b;//无实际意义注:表达式即可构成语句是C++的特点较常使用的表达式语句•赋值–x=a+b;//赋值•自增/自减–x++;//自增•输入/输出–cina;//输入–coutb;//输出•无返回值的函数调用–f(a);//函数调用复合语句•复合语句是由一对花括号括起来的一条或多条语句,又称为分程序(block)。其格式为:{语句序列}•语句序列中的语句可以是任何的C++语句,其中包括数据定义语句。•用途:–将多条语句视作一条语句。–复合语句一般作为函数体和结构语句的成分语句。复合语句举例1Voidmax()//函数体{inta,b;cinab;intmax;if(a=b)//选择语句max=a;elsemax=b;coutmaxendl;}复合语句举例2{inta,b,c;cinab;if(ab){c=a;//多条语句组成结构语句的成分语句a=b;b=c;}cout“Themaxis”a“,Theminis”bendl;}选择语句•作为人脑智能的替代,程序常常需要根据不同的情况来从一组语句中选择一个执行•选择语句是计算机智能的实现手段•选择语句包括:–if语句–switch语句if语句•if语句(又称条件语句)是根据一个条件满足与否来决定是否执行某条语句或从两个语句中选择一个语句执行。•if语句有两种格式:–if(表达式)语句–if(表达式)语句1else语句2if语句的含义第一种格式第二种格式例子:从键盘输入三个整数,计算其中的最大值并将其输出#includeiostreamusingnamespacestd;intmain(){inta,b,c,max;cout请输入三个整数:endl;cinabc;if(ab)max=a;elsemax=b;if(cmax)max=c;cout最大者为:maxendl;return0;}if语句的锯齿格式•为了提高程序的易读性,在写if语句时,最好采用“锯齿”格式,即把成分语句往后缩进几列。•当if语句的成分语句也是if语句时,如果嵌套层次很深,“锯齿”格式将会使得程序正文严重偏向右边,从而对程序编辑、查看带来困难。为了减少文本的缩进量,可以把这样的if语句按下面的格式书写:if语句的锯齿格式if(...)...elseif(...)...elseif(...)...elseif(...)...else...例子:从键盘输入一个三角形的三条边,判断其为何种三角形#includeiostreamusingnamespacestd;intmain(){inta,b,c;cinabc;if(a+b=c||b+c=a||c+a=b)cout不是三角形;elseif(a==b&&b==c)cout等边三角形;elseif(a==b||b==c||c==a)cout等腰三角形;(接下页)例子:从键盘输入一个三角形的三条边,判断其为何种三角形elseif(a*a+b*b==c*c||b*b+c*c==a*a||c*c+a*a==b*b)cout直角三角形(非等腰);elsecout其它三角形;coutendl;return0;}if语句的歧义问题if(表达式1)if(表达式2)语句1else语句2•解释1if(表达式1)if(表达式2)语句1else语句2解释2if(表达式1)if(表达式2)语句1else语句2if语句的歧义问题•C++规定:else子句与前面最近的、没有else子句的if配对。上面的if语句按解释1执行•若要按解释2执行,则需要在第二个if前加上花括号,分割其与else的关系,使之独立成句:if(表达式1){if(表达式2)语句1}else语句2P48例switch语句•程序中有时需要从两个(组)以上的语句中进入一个(组)来执行。•P49例3-7•C++提供了一条多路选择语句:switch语句(又称开关语句),它能根据某个表达式的值在多组语句中进入一组语句来执行。switch语句的格式switch(整型表达式){case整型常量表达式1:语句序列1case整型常量表达式2:语句序列2:case整型常量表达式n:语句序列n[default:语句序列n+1]}例子、从键盘输入一个星期的某一天(0:星期天;1:星期一;...),然后输出其对应的英语单词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;}switch语句中的break语句•其它一些语言(如:Pascal)的多路选择语句中,一个分支执行完后将自动结束多路选择语句的执行。•C++的switch语句的一个分支执行完后,将象瀑布一样自上而下顺序执行以后的各分支语句序列。•优点:当若干个分支具有部分重复功能时,可以节省代码量。(与汇编语言十分相似)•缺点:中途结束,需要增加break语句结束该分支的执行。Switch语句又一例cinday;switch(day){case1:case2:case3:case4:case5:cout“WorkingDay;break;case6:case0:cout“Weekends;break;default:coutInputerror;}P50例3-9,p51例循环(重复)语句•电脑重复执行既准确又快速,是唯一胜过人脑的地方。•找出计算过程中重复执行的操作是算法设计的核心和难点。•循环语句四要素–循环初始化–终止条件/循环条件。–重复操作步–下一次循环准备循环体循环(重复)语句•循环可以分成两大类:–计数控制的循环,对应于数学中向量的下标–事件控制的循环,需要设计适当的结束条件•C++提供了三种实现重复操作的循环语句:–while语句–do-while语句–for语句•这三种循环语句在表达能力上是等价的,在解决某个具体问题时,用其中的一种可能会比其它两种更加自然。while语句格式:while(表达式)语句循环体while语句例1—求n!{intn;cinn;inti=1,f=1;//循环初始化while(i=n)//循环条件{f*=i;//重复操作步i++;//下一次循环准备}coutfactorialofn=fendl;return0;}while语句例2—若干整数求和解法1{intn;cinn;//先确定整数个数inti=1,f=0;//初始化while(i=n)//循环条件{inta;cina;//重复操作1f+=a;//重复操作2i++;//下一次循环准备}coutsum=fendl;}while语句例2—若干整数求和解法2{inta,sum=0;cout请输入若干个整数(以-1结束):;cina;while(a!=-1){sum+=a;cina;}cout输入的整数的和是:sumendl;}do-while语句do-while语句的格式如下:do语句while(表达式);用do-while语句求n!cinn;inti=1,f=1;//循环初始化do{f*=i;//重复操作i++;//下一次循环的准备}while(i=n);//循环条件coutfactorialofn=fendl;whileVSdo-whileinti=1,f=1;do{f*=i;i++;}while(i=n);inti=1,f=1;while(i=n){f*=i;i++;}•用while编写的语句也可以改写为do-while语句•差别在于执行效率和初始值和循环条件上,没有孰优孰劣之别例:从键盘接收字符,直到输入字符y(Y)或n(N)为止。{charch;do{cout请输入Yes或No(y/n):;cinch;ch=tolower(ch);//转为小写字母}while(ch!='y'&&ch!='n');if(ch=='y')......else......return0;}例:判断输入整数是否为素数{intn=1,a;//注意n的初值cina;do{n++;}while((a%n!=0)&&(na));if(n==a)couta是素数;elsecouta不是素数;}•计数控制和条件控制的组合例:用牛顿迭代公式计算#includecmath…{constdoubleeps=1e-6;doublea,x1,x2;cout”请输入一个数”;cina;x1=a;do{x2=x1;x1=(2*x1+a/x1/x1)/3;}while(fabs(x1-x2)eps);couta“的立方根是“x1;})2(3121nnnxaxx3a例(习题3.6):统计字符串中“=”个数intcount=0;//计数器charch1=‘\0’,//上一个字符,注意初值ch2;//当前字符cout“输入表达式,以#结束:”endl;//必要的提示cinch2;While(ch2!=‘#‘)//完成字符串输入{if(ch2==‘=’&&ch1==‘’)//关键count++;ch1=ch2;cinch2;//准备下一次}for语句for(表达式1;表达式2;表达式3)语句初始化修改控制变量循环体用for语句求n!{intn,i,f;cinn;for(i=2,f=1;//循环初始化i=n;//循环条件i++)//下一次循环准备f*=i;//关键操作coutfactorialofn=fendl;return0;}例:求第n个费波那契数{intn;cinn;for(intfib_1=1,//前一个数fib_2=1,//当前数i=3;i=n;i++){inttemp=fib_1+fib_2;//计算新的fib_1=fib_2;//当前数为前一个fib_2=temp;//新的数为当前数}}3,,1,12121nxxxxxnnn三种循环语句的使用原则•如果循环前能确定循环的次数,则用for语句;•否则,使用while或do-while语句,其中,如果循环体至少要执行一次,则用do-while语句。•由于for语句能清晰地表示循环的四个要素,因此,一些非计数控制的循环也可以用for语句实现例:判断输入整数是否为素数(for语句版)intn,a;cina;for(n=2;(a%n!=0)&&(na);n++);if(n==a)couta是素数;elsecouta不是素数;若干整数求和(for语句版)intsum=0;cout请输入若干个整数(以-1结束):;for(cina;a!=-1;cina)sum+=a;cout输入的整数的和是:sumendl;例:编程求出小于n的所有素数(循环嵌套)intn,count=0;cout“请输入一个正整数:”;cinn;for(inti=2;in;i++)//外循环,找遍所有的数{intj=2;while(ji&&i%j!=0)j++
本文标题:第3章C++程序的流程控制
链接地址:https://www.777doc.com/doc-654926 .html