1第2章程序控制结构2.1顺序结构2.2选择结构2.3循环结构2.4控制转向语句2.5程序实例2按照语句出现的先后顺序依次执行。2.1顺序结构语句1语句2图2.1顺序结构流程图32.1.1定义语句说明语句在C++程序中,一个标识符(变量名、常量名、函数名、对象名等)在使用之前必须先定义,通知编译器为其分配存储空间,或告诉编译器它的存在及其特征。例如:inta=0,b=3;constdoublepi=3.14159;intsum(int,int);floatscore[50][3];42.1.2表达式语句形式:表达式;可以进行的操作通常包括赋值操作,复合赋值操作,增量、减量操作,函数调用操作和输入输出操作。例如:i++;--j;abs(x);couta+b;cinij;sum=a+b;a=b=c;i=1,j=2;b*=c;52.1.3复合语句形式:{语句1语句2……语句n}作用:当程序中某个位置在语法上只允许一条语句,而在语义上要执行多条语句才能完成某个操作时,需要使用复合语句。例如:if(x==0){couta;coutb;}62.1.4空语句形式:;作用:当程序中某个位置在语法上需要一条语句,而在语义上又不要求执行任何动作时,可放上一条空语句。一般适用于在循环语句中做空循环体例如:for(m=0;m1000;m++);72.1.5基本输入输出在C++中,所有输入输出是通过输入输出流来实现的。在C++中,将数据从一个对象到另一个对象的流动抽象为“流”。在iostream库中包含一个标准输入流对象cin和一个标准输出流对象cout,分别用来实现从键盘读取数据,以及将数据在屏幕上输出。要使用cin和cout,需要在C++程序开头加上如下包含命令:#includeiostream//新标准中的头文件名usingnamespacestd;//引入std名字空间中的标识符81.标准输入流cincin负责从键盘读取数据,使用提取运算符“”就可以将键盘键入的数据读入到变量中。语法格式:cin变量1变量2…变量n;变量可以是任意数据类型,输入时各个数据之间用空格键、Tab键或Enter键分隔。例如:inta,b;cinab;键盘上输入:93↙a9键盘b3键盘92.标准输出流cout负责将数据输出到屏幕上,使用插入运算符“”就可以将数据显示在屏幕上当前光标所在位置。语法格式:cout表达式1表达式2…表达式n;表达式可以是任意类型的,数据输出的格式由系统自动决定。10表2.1常用格式控制符格式控制符说明示例语句结果endl输出换行符cout120endl240;120240dec十进制表示coutdec120;120hex十六进制表示couthex120;78oct八进制表示coutoct120;170setw(intn)设置数据输出的宽度cout'x'setw(3)'y';xy(中间有2个空格)11表2.1常用格式控制符格式控制符说明示例语句结果setfill(charc)设置填充字符coutsetfill('')setw(6)120;120setprecision(intn)设置浮点数的精度(有效数字位数或小数位数)coutsetprecision(5)12.3456;12.346setiosflags(ios::fixed)定点格式输出coutsetiosflags(ios::fixed)12.3456789;12.345679setiosflags(ios::scientific)指数格式输出coutsetiosflags(ios::scientific)12.3456789;1.234568e+00112【例2.1】cout应用示例#includeiostreamusingnamespacestd;intmain(){intm=2,n=8;doublepai_1=3.14159265;floatpai_2=3.141f;charch1='A',ch2='B';boolok=true;coutm=mendl;coutn=nendl;coutpai_1=pai_1,pai_2=pai_2endl;coutch1=ch1,ch2=ch2endl;coutok=okendl;cout!ok=!okendl;return0;}图2.2cout应用示例13【例2.2】使用格式控制符输出数据#includeiostream#includeiomanipusingnamespacestd;intmain(){inta=35;doubleb=12.3456789;cout1234567890123endl;coutdeca‘’hexa‘’octaendl;coutbendl;coutsetprecision(4)bendl;coutsetw(10)bendl;coutsetw(10)setfill('#')bendl;coutsetiosflags(ios::scientific)bendl;coutsetprecision(3)bendl;coutsetprecision(2)bendl;return0;}142.2选择结构按照给定条件有选择地执行程序中的语句C++中:if语句:实现n分支,要求n个表达式。switch语句:实现多分支,只用1个表达式。152.2.1if语句1.if语句(单分支)语法格式:if(表达式)语句说明:(1)表达式是任意的数值、字符、关系、逻辑表达式,它表示条件,以true(非0)表示真,false(0)表示假。表达式必须用圆括号括起来。(2)内嵌语句,可以是单条语句,或复合语句。执行顺序表达式语句falsetrue16bat73773【例2.3】输入两个整数a和b,按从小到大的顺序输出这两个数。分析若ab,则将a、b交换,否则不交换。两数交换可采用借助于第三个变量间接交换的方法if(ab){t=a;a=b;b=t;}17#includeiostreamusingnamespacestd;intmain(){inta,b,t;cout请输入两个整数a,b:endl;cinab;if(ab){t=a;a=b;b=t;}couta''bendl;return0;}{a=a+b;b=a-b;a=a-b;}{a=a+b;b=a-b;a=a-b;}182.if-else语句(双分支)if(表达式)语句1else语句2true表达式语句1false语句2图2.7双分支if语句流程图19【例2.4】输入一个年份,判断是否为闰年。分析闰年的年份可以被4整除而不能被100整除,或者能被400整除。#includeiostreamusingnamespacestd;intmain(){intyear;cout请输入年份:;cinyear;if((year%4==0&&year%100!=0)||(year%400==0))coutyear年是闰年endl;elsecoutyear年不是闰年endl;return0;}203.if-elseif语句(多分支)if(表达式1)语句1elseif(表达式2)语句2……elseif(表达式n)语句nelse语句n+1falsefalse…falsetruetrue表达式1表达式2表达式n语句n语句n+1语句2语句1true21【例2.5】根据x的值,计算分段函数y的值。y的计算公式为:)()()()(20ln)23(2010100sin03xxxxxxxxexxy22#includeiostream#includecmathusingnamespacestd;intmain(){doublex,y;cout请输入x:;cinx;if(x0)y=fabs(x);elseif(x10)y=exp(x)*sin(x);elseif(x20)y=pow(x,3);elsey=(3+2*x)*log(x);couty=yendl;return0;}图2.10计算分段函数234.if语句的嵌套形式if或else后面的内嵌语句本身又是一个if语句例如:if(表达式1)if(表达式2)语句1else语句2elseif(表达式3)语句3else语句424(1)为了增强程序的可读性,建议采用锯齿型的书写形式。(2)if语句嵌套时,else子句总是与在它前面、距它最近、且尚未匹配的if配对。(3)为明确匹配关系,避免匹配错误,建议将内嵌的if语句一律用“{}”括起来。if(x0)if(y0)coutx与y均大于0;elsecoutx大于0,y小于等于0;注意:如何使之与第一个if配对?25【例2.6】从键盘上输入两个字符,比较其大小,输出大于、等于和小于的判断结果。#includeiostreamusingnamespacestd;intmain(){charch1,ch2;cout请输入两个字符:;cinch1ch2;if(ch1!=ch2)if(ch1ch2)coutch1大于ch2endl;elsecoutch1小于ch2endl;elsecoutch1等于ch2endl;return0;}262.2.2switch语句switch(表达式){case常量表达式1:语句1case常量表达式2:语句2…case常量表达式n:语句n[default:语句序列n+1]}注意:表达式只能是整型、字符型或枚举型注意:常量表达式1~n的值必须各不相同。27有无无false有无falsetrue计算表达式的值常量表达式1语句1break常量表达式2语句2break无有false常量表达式ntrue语句nbreakdefault语句n+1true有图2.12switch语句执行流程28【例2.7】将输入的百分制成绩按以下规定转换成相应的等级:成绩等级100~90优秀89~80良好79~70中等69~60及格59~0不及格29#includeiostreamusingnamespacestd;intmain(){floatscore;cout请输入成绩:;cinscore;if(score=0&&score=100)switch(int(score)/10){case10:case9:coutscore分:优秀endl;break;case8:coutscore分:良好endl;break;case7:coutscore分:中等endl;break;case6:coutscore分:及格endl;break;default:coutscore“分:不及格”endl;}elsecout输入数据有误!endl;return0;}共用同一个语句组思考:若省去break语句,情况会怎样?302.3循环结构按照给定规则重复地执行程序中的语句2.3.1while语句while(表达式)语句falsetrue表达式语句图2.14while语句流程图循环条件,其值为true(非0)、false(0)循环体31【例2.8】求1+2+3+……+100#includeiostreamusingnamespacestd;intmain(){inti(1),sum(0);