C++语句和流程控制.ppt

上传人:wuy****n92 文档编号:66803754 上传时间:2022-12-21 格式:PPT 页数:48 大小:304.99KB
返回 下载 相关 举报
C++语句和流程控制.ppt_第1页
第1页 / 共48页
C++语句和流程控制.ppt_第2页
第2页 / 共48页
点击查看更多>>
资源描述

《C++语句和流程控制.ppt》由会员分享,可在线阅读,更多相关《C++语句和流程控制.ppt(48页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第3章语句和流程控制1本章学习要求:pC+语句的类型pC+选择结构程序的设计pC+循环结构程序的设计23.1C+语句C+程序是由若干C+语句组成的,而且每个语句以分号(;)作为结束符。C+语言的语句可以分为5类,分别是:定义语句、表达式语句、流程控制语句、空语句和复合语句。31定义语句定义语句定义语句用于定义一个或多个变量。如:inta,b;floatf=0;当执行到定义语句时,系统将在内存中为被定义的变量分配存储单元。2表达式语句表达式语句由表达式后加上分号构成的语句称为表达式语句。表达式语句是C+语言中最基本的语句,表达式语句的一般形式为:表达式;例如:d=2*3.1415*r*r;a/c

2、;a=b,b=2+c;43流程控制语句流程控制语句控制语句用于完成一定的控制功能,例如程序的选择控制、循环控制等。C+语言中一共有9种控制语句。语句种类语句形式功能说明选择控制语句if()else分支语句switch()多分支语句循环控制语句for()循环语句while()循环语句dowhile()循环语句跳转控制语句break终止循环语句的执行continue结束本次循环体语句goto无条件转向语句return返回语句54复合语句复合语句复合语句是由一对大括号()括起来的任意条语句组成的,在语法上视为一条语句。复合语句又可称为“语句块”,复合语句的语句形式如下:语句1;语句2;语句n;如:i

3、ntnumber=1;cout这是是一个数字number;charc=1+;cout这是一个字符c;65空语句空语句空语句用一个分号表示,其一般表示形式为:;即只有一个分号的语句,它什么也不做。如:intmain();return1;这里的分号也是一条语句,程序执行时不产生任何动作。程序设计中有时需要加一个空语句来表示存在一条空语句,空语句常用于循环语句的循环体中,用来构成空循环。73.2结构化程序设计结构化程序设计(StructuredProgramming,SP)是指按照一组能够提高程序易读性和维护性的规则进行程序设计的方法,它不仅要求所编写出的程序结构良好,而且要求程序设计过程也是结构良

4、好的,后者是前者的基础。对程序设计过程而言,“结构良好”是指采用分解和细化的方法来进行程序设计,对于一个复杂的问题,它采用“自顶向下,逐步细化”的方法对问题进行分解,通过问题的分解来逐步降低复杂度,这个分解过程一直到分解出的子问题足够简单、能够容易写出它的程序为止。采用这种方法的好处是:程序易于设计、程序结构易于理解、易于编写、易于调试、易于维护、易于保证和验证程序的正确性。对程序代码而言,“结构良好结构良好”是指:每个实现子问题功能的程序单元应有单个入口、单个出口的性质。每个程序单元所实现的功能都尽量的相对独立,这样,即使某程序单元的代码需要修改,也不会造成其他无关程序单元修改代码。8结构化

5、程序中,各执行语句的执行顺序存在三种基本的关系:顺序关系、选择关系和循环关系。顺序关系是指:各语句从上到下顺序执行,先执行第1个语句,再执行第2语句,再执行第3个语句,直到最后一个语句,如图3-1(a)所示。选择关系是指:在执行过程中,根据某个条件决定是否执行某条语句,有可能某条语句不被执行,如图3-1(b)所示。循环关系是指:在某个条件满足的情况下,某条语句可能会被反复多次执行,如图3-1(c)所示。利用这三种关系编写的程序的结构通常称为:顺序结构、选择结构和循环结构。在设计和编写程序的过程中,往往是混合采用这三种基本结构,理论上已经证明:程序中的任何流程结构都可以用图3-1的三种基本结构组

6、合表达出来。Tiaojian (a)(b)(c)条件条件语句n语句n+1语句语句语句真假真93.3顺序结构程序设计顺序结构程序是最简单的程序。程序顺序执行,无分支、无转移、无循环。顺序结构程序主要由定义语句、表达式语句、复合语句和空语句等语句构成。顺序结构由计算机硬件直接支持,因为目前计算机基本都采用冯.诺依曼体系结构,CPU在执行完当前指令后,默认情况下将会执行当前指令的下条指令。例例输入三角形的三个顶点,用海伦公式求三角形面积。解:求三角形面积的海伦公式为:式中10#include#includeusingnamespacestd;intmain()floatx0,y0,x1,y1,x2,

7、y2;/分别保存三个顶点的坐标cout输入三角形三个顶点的坐标endl;coutx0y0;coutx1y1;coutx2y2;floatlen0,len1,len2;/求3条边的边长len0=sqrt(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1);len1=sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);len2=sqrt(x2-x0)*(x2-x0)+(y2-y0)*(y2-y0);/计算三角形面积floatarea=0;floats=0;s=(len0+len1+len2)/2;area=sqrt(s*(s-len0)*(s-len1)*(s-len

8、2);cout三角形的面积为:area;return0;113.3选择结构程序设计C+提供了if和switch语句来支持选择结构。选择结构中要判断某些条件是否成立,而程序中的条件通常是使用关系运算符、逻辑运算符以及条件运算符的表达式构成的。123.3.1关系运算符关系运算符通俗讲就是比较运算,即将两个数据进行比较,判定两个数据是否符合给定的关系,所有关系运算符都为双目操作符。C+中关系运算符及含义如表所示。运算符运算操作数个数小于,如:4大于,如:ab双目=等于,如:a=b双目=小于等于,如:i=大于等于,如:v=120双目!=不等于,如:rate!=1双目如:a+bc-dx3/2a+1(bc

9、)a!=(c=d)等。13例例关系运算符的运算规则。#includeusingnamespacestd;intmain()charc=k;inti=1,j=2,k=3;floatx=3e+5,y=0.85;/算术运算符的优先级比关系运算符高coutboolalpha;/以true,false形式输出布尔值cout=k+1)endl;/falsecout(j5)endl;/truecout(x-5.25=x+y)endl;/truecout(i+j+k=-2*j)endl;/falsecout(j=i+5);/falsereturn0;14在使用关系运算符时要注意以下几点:=(等于)、=(大于等

10、于)、!=(不等于)由两个符组成,中间不能有空格。使用关系运算符比较浮点数时,最好只用,而不要使用其它关系运算符。这是因为,目前浮点数在计算机中的表示存在误差,可能导致两个本应相等的浮点数在计算机中却表现为不相等。如果非要比较两个浮点数是否相等,常用的办法是比较它们的差的绝对值是否小于某个较小的数(如0.00001),也就是比较它们是否大致相等。如判断两个浮点数a、b是否相等,可采用如下形式的运算:fabs(a-b)3&b175|sal8000双目!逻辑非,如:!(flag=0)单目如:ab&aci3|j100)16(1)&(逻辑与)。当两个操作数(或者称为条件)都为true时,结果才为tru

11、e,否则结果为false。如:(age30)/表示年龄大于10岁,并且体重超过30公斤(temperature36)&(temperature37.5)/表示温度在36度和37.5度之间(a=b)&(b=c)/表示a,b,c同时相等17例例从键盘输入一个字符,判断该字符是否为大写字母,则输出”这是一个大写字母”。#includeusingnamespacestd;intmain()charletter=0;coutletter;cout输入的是一个大写字母吗?;coutboolalpha;cout=A&letter=a&letter=A&letter=A&letter=a&letter=z)2

12、0(3)!(逻辑非)。逻辑非为单目逻辑运算符,用于实现与操作数表示的条件相反的条件,操作数结果truefalsefalsetrue如,要判断“a不小于b”是否成立,则可以表示为:!(a=b如果要判断输入的字符是否为非字母的字符,如何编写判断的表达式呢?可以先写出字符为字母的条件,然后采用取反的逻辑运算,即:!(letter=A&letter=a&letterb)?a:b233.3.4if语句if语句又称为条件语句,其根据条件是否满足来决定是否执行某条语句或者从两个语句中选择一个语句执行。if语句有两种基本格式:(1)if()(2)if()else的值必须是bool型或者可以转换成bool型。、

13、可以是一条简单的表达式语句、一个复合语句、一个控制语句、一个空语句,总之要注意:只能是一条语句。241.if()例例 输入一个温度值,若温度高于某个指定的阀值时,进行报警。#includeusingnamespacestd;intmain()floattemperature=0;cintemperature;if(temperature99)/温度超过99度,则报警cout报警,温度超过规定温度;return0;执行流程为:若返回值为true,则执行.25if()else例例编制程序计算方程的根,a、b、c由键盘输入,假设。解:根据一元二次方程的求根公式:式中:a0,b2-4ac0执行流程:若

14、返回值为true,则执行,否则执行.26#include#include/用来引入sqrt函数usingnamespacestd;intmain()doublea,b,c,x1,x2;coutabc;if(a=0)cout不是一个一元二次方程endl;return0;doubledelt=b*b-4*a*c;if(delt0)cout方程没有实根endl;return0;if(delt=0)x1=x2=-b/(2*a);elsex1=(-b+sqrt(delt)/(2*a);x2=(-b-sqrt(delt)/(2*a);cout方程两个根为:x1,x2;return0;27if语句的嵌套在i

15、f语句中的和本身也可以是一个if语句,这种情况称为嵌套的if语句。嵌套在一个if语句中的if语句也可以包含另一个嵌套的if语句。一般情况下,可以像这样继续嵌套if语句,嵌套的次数也可以是任意多次,比较典型的嵌套语法为:if()elseif()elseif()elseif()else28例输入一个三角形的三条边长,判断其为何种三角形。#includeusingnamespacestd;intmain()inta,b,c;cout请输入三角形三条边长:abc;if(a+b=c)|(b+c=a)|(c+a=b)cout不是三角形;elseif(a=b&b=c)cout等边三角形;elseif(a=b

16、)&(a*a+b*b=c*c)|(b=c)&(b*b+c*c=a*a)|(c=a)&(c*c+a*a=b*b)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其他三角形;return0;293.3.5switch语句switch语句又叫开关语句,它能根据某个表达式的值在多组语句中选择一组来执行,switch语句的格式如下:switch()case:case:case:default:30#includeusingnames

17、pacestd;intmain()intticket_number=0;coutticket_number;switch(ticket_number)case888:cout恭喜你,你中了一等奖!;break;case188:cout恭喜你,你中了二等奖!;break;case105:cout恭喜你,你中了三等奖!;break;default:cout抱歉,你没有中奖!;return0;例测试你的彩票号码是否中奖,若号码为888则中一等奖,188二等奖,105三等奖,其它号码不中奖。313.3.6选择结构程序设计举例32#includeusingnamespacestd;intmain()in

18、tx=0,y=0;boolvalidx=true;/标记x是否在有效的范围内,如果不在,则不输出计算结果coutx;if(x2)&(x-1)&(x=2)y=2*x;elseif(x=-1)y=x-1;elsecout你输入的值不在有效的范围内;validx=false;if(validx)cout根据公式计算出的y值为:y;return0;例例根据以下函数关系,对输入的每个x值,求y的值。请编制此程序。y=x*(x+2)2x=10y=2*x-1x=2y=x1x=-133例例编写一个简单的计算器程序,实现用户输入操作数和四则运算符,输出计算结果。#includeusingnamespacestd

19、;intmain()floata,b;charc;coutacb;switch(c)case+:cout(a+b);break;case-:cout(a-b);break;case*:cout(a*b);break;case/:cout(a/b);break;default:coutinputerrorn”;return0;343.4循环结构程序设计c+中提供的循环语句有:whiledo-whilefor353.4.1while语句while语句的执行流程为:(1)判断的返回值,若为true,执行第(2)步;若为false,则执行第(3)步。(2)执行,结束后返回(1)步。(3)继续执行whi

20、le语句后面的其他语句。while循环语句语法为:while()36#includeusingnamespacestd;intmain()intmin,max;cout请输入累计和的开始和结束数:minmax;intsum=0,temp=0;temp=min;while(temp=max)sum+=temp;temp+;coutmin和max之间所有整数和为:sumendl;return0;例例 利用while循环计算从键盘输入的两个整数之间的所有整数和,并输出373.4.2do-while语句do-while语句的执行流程为:(1)执行。(2)计算并判断的值,若为true,则转第(1)步,否

21、则,执行第(3)步。(3)继续执行do-while语句后面的其他语句。do-while语句写成:dowhile();38#includeusingnamespacestd;intmain()charch=0;/为循环控制变量intcount=0;/温度的个数doubletemperature=0.0;doubletempsum=0;/温度总和doubleaverage=0.0;docouttemperature;tempsum+=temperature;/建议多用个变量,看起来正规点count+;coutch;while(ch=y);average=tempsum/count;cout平均温度

22、为:averageendl;return0;例例 输入在某个时间段内采集来的未知个数的温度,统计这些温度的平均值,并输出。利用do-while语句实现。393.4.3for语句for语句的语法如下:for(;)for语句的执行流程为:(1)执行。(2)计算,若结果为true,则执行第(3)步;否则转第(4)步。(3)执行,执行;转第(2)步。(4)继续执行for语句后面的其他语句。40#includeusingnamespacestd;intmain()intcount=0;coutcount;for(longn=1,f=1;n=count;n+)f*=n;coutcount的阶乘=f;ret

23、urn0;例例输入一个整数n,计算n!,并输出。413.4.5循环结构程序设计举例例例 一球从100米高度落下,每次落地后反跳回原高度的一半,再落下。编程求它在第10次落地时,共经过多少米?第10次反弹多高?#includeusingnamespacestd;intmain(void)inti,n;doubles=100,h=s/2;for(i=2;i=10;i+)s=2*h+s;h*=0.5;/球下次的高度cout第10反弹hm,共经过smn;return0;42例例编程计算斐波那契数列第n列。解:若一个数列首两项等于1,而从第三项开始每项都等于前两项的和,则称该数列为斐波那契数列。如:1、

24、1、2、3、5、8、13、21、。#includeusingnamespacestd;intmain()intn;coutn;intx1,x2;x1=x2=1;intf,tmp;inti=3;dox1=x1+x2;tmp=x2;x2=x1;x1=tmp;i+;while(i=n);f=x2;cout斐波那契数列第n项为:f;return0;433.5转移语句转移语句用来实现执行流程的跳转,C+中的转移语句除了有条件的分支语句(if和switch)外,还有:break、continue、goto。下面分别介绍这三个语句。443.5.1break语句break语句有两个作用:结束switch语句的

25、某个case分支的执行。退出包含它的最内层的循环语句(因为循环语句可以嵌套的)。除此两种情况之外,不能使用break语句。中介绍了break在switch中的使用,下面只介绍在循环中使用break。45例例输入任意个温度,计算并输出它们的平均值。使用for和break语句实现.#includeusingnamespacestd;intmain()charch=0;intcount=0;doubletemperature=0.0;doubleaverage=0.0;for(;)/无限循环couttemperature;average+=temperature;count+;coutch;if(c

26、h=n|ch=N)break;/条件满足时,跳出循环cout平均温度为:average/countendl;return0;463.5.2continue语句在循环语句中执行到continue时,程序会立即跳到当前循环语句的末尾,继续进行下次循环的判断。三种循环的循环体中遇到continue时的跳转如下图所显示:while(表达式).continue;.for(;).continue;.do.continue;.while(表达式);47例例求300以内能被17整除的所有整数#includeusingnamespacestd;intmain()intx,k;intcunt=0;for(x=1;x=300;x+)if(x%17!=0)continue;/直接到x+处执行coutx;cunt+;if(cunt=8)/每行打印8个coutendl;cunt=0;return0;48

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com