C 的流程控制语句_第1页
C 的流程控制语句_第2页
C 的流程控制语句_第3页
C 的流程控制语句_第4页
C 的流程控制语句_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+的流程控制语句 第4章,C+程序是由各种语句构成的,语句可以分为两类:一类用于描述计算机执行的操作运算,称为操作运算语句;另一类用于控制操作运算的执行顺序。本章在介绍C+的各种操作运算语句的基础上,重点讲述流程控制语句,包括条件语句、switch语句、循环语句。 C+语言的语句和程序结构 选择结构语句 循环结构语句 控制执行顺序的语句 程序举例,C+ Programming,本章学习要求,熟练掌握if语句和switch语句的使用,会在程序中利用它们实现单分支或多分支控制。 熟练掌握while,do.while和for这三种循环语句的结构和执行过程,会在程序中利用它们实现单重或多重循环控制。

2、 掌握continue语句和break语句的作用。,C+ Programming,C+语言的语句和程序结构,C+语言的语句概述 程序的三种基本结构,4.1,C+ Programming,C+语言的语句概述,C+程序由数据描述和数据处理两部分构成。数据描述主要定义具有特定内涵的数据结构。数据处理的任务是对所提供的数据进行加工处理,它是通过具有各种不同功能的语句来实现的。C +中的语句可归纳如下六类: 表达式语句 函数调用语句 空语句 复合语句 注释语句 流程控制语句,4.1.1,C+ Programming,表达式语句,在表达式的后面加上一个分号,就构成表达式语句,它是程序中最常见的一种语句形式

3、。其格式为: ;比如: a=4; a=1, b=2, c=3; a+b; !a|b ; 在表达式语句”a+2;”之后的语句就是空语句。空语句可以看成是表达式语句的特殊情形,一般情况下它是不起任何作用的,因此为了程序的紧凑,不应出现不必要的空语句。,C+ Programming,复合语句,把一个语句序列用括起来,就构成了复合语句,又称为块语句或语句块。例如: sum=sum+1; i=i+1; 复合语句在语法上相当一个语句,因此它可以出现在允许语句出现的任何位置。复合语句可以嵌套,即在复合语句中还可以有其它复合语句。,C+ Programming,注释语句,注释语句在程序中的作用是对程序进行说明

4、或解释,目的是为了增加程序的可读性和可理解性。在程序编译过程中,注释语句是作为空语句处理的。 C+中,有两种类型的注释语句: 一种是用注释符“/”。从注释符“/”到它所在行的行尾之间的所有字符都被作为注释语句处理。这种注释方法在前面已出现多次。 另一种是利用一对注释符:“/*”和“*/”。在“/*”和“*/”之间的文字都被作为注释处理,这种方法一般使用于有多行注释信息的情况。,C+ Programming,流程控制语句,流程控制语句主要用来控制程序的执行过程和顺序,从而使C+语言获得更强的编程手段和编程能力。 C+语言中,除了上述六中类型的语句外,还有另一种语句说明语句,包括常量说明语句和变量

5、说明语句。,C+ Programming,程序的三种基本结构,C+语言在按顺序执行的基础之上,采用了一些可以改变执行顺序的结构,主要包括:分支结构、循环结构,另外还定义了一些语句,如break、continue等。 顺序结构 分支结构 循环结构,4.1.2,C+ Programming,顺序结构,C+ Programming,分支结构,C+ Programming,循环结构,C+ Programming,选择(分支)结构语句,构成分支结构的分支结构语句有两种:一种是条件语句,另一种是switch语句。这类语句的共同特点是:根据给定的条件决定下一步的行为。 条件语句 switch语句,4.2,C

6、+ Programming,条件语句,单选条件语句 二中择一条件语句 嵌套条件语句 If条件语句的几点说明 If语句的嵌套,4.2.1,C+ Programming,单选条件语句,格式: if () 其中可为任一合法的表达式,该表达式为条件语句的判断条件,其值决定了是否执行其后的部分。注意,该表达式必须用括号括起来。可以是六种语句中的任一语句,通常称之为内嵌语句,它与if一起构成了单选条件语句。 【例4.1】输出两个数中较大者,C+ Programming,【例4.1】输出两个数中较大者,#include void main() int x=3, y=2; couty) coutx; /A i

7、f (x=y) couty;/B ,C+ Programming,二中择一条件语句,格式: if () else 其中、的要求与含义与单选条件语句一样 其执行流程为:先计算的值,如果不等于0,则执行;否则,执行。因此,不管的值如何,两个内嵌语句和中有一个而且只有一个得到执行。 例如可将例4.1改为: if(xy) cout x;/A else couty;/B,C+ Programming,嵌套条件语句,格式: if () else if() else if else 语义:从上到下依次计算的值,直到某个的值不等于0,则执行相应的;如果所有表达式都等于0,则执行。它在、选择一条且只选择一条执行

8、。 【例4.2】嵌套条件语句的应用,C+ Programming,【例4.2】嵌套条件语句的应用,#include void main() int x, y; coutx; if(x800) y=500; else if(x700) y=600; else if(x600) y=700; else if(x500) y=800; else y=0; cout”相应的y为:”yendl; /A ,C+ Programming,If条件语句的几点说明,if后面的通常为逻辑表达式或关系表达式。表达式必须放在括号中。例如: if(a=b 如果有多个语句的话,则必须用大括号 括起来,构成复合语句。例如

9、else语句不能单独使用,必须与if语句配对使用。,C+ Programming,if (a0) a+; cout0) a+; couta;,C+ Programming,If语句的嵌套,if和else两个关键字后的“语句”可以是任何合法语句,当然也可以是if语句,称这种情形为if语句的嵌套。 对于嵌套的if语句,必须注意if和else的匹配问题,为了不引起混乱,在C+中规定else总是与它前面最近的if配对。 如果if数目与else数目不一样,程序设计者最好加上适当的花括弧“”来确定配对关系。例如 【例4.3】读入3个数,输出绝对值最大者 【例4.4】计算分段函数,C+ Programmin

10、g,if(a2) if(a2) if(a10) /B cout ”a在210之间!”endl; else cout”a不小于2!”endl; / C 这时else与第二个if配对,从B行到C行之间的二择一条件语句为第一个if语句的内嵌条件语句。,C+ Programming,【例4.3】读入3个数,输出绝对值最大者,#include #include void main() float a,b,c,max; cinabc; cout=fabs(b) ,C+ Programming,【例4.4】计算分段函数,方法一:利用嵌套条件语句 方法二:利用条件语句的嵌套,C+ Programming,方法

11、一:利用嵌套条件语句,#include void main() int x,y; cinx; if(x0) y=1; else if(x= =0) y=0; else y=1l cout“x=“ x“, y=“ yendl; ,C+ Programming,方法二:利用条件语句的嵌套,if(x=0) if(x0) y=1; else y=0; else y=1;,C+ Programming,switch语句,switch语句为分支结构语句的另一种形式,在功能上与嵌套条件语句类似,都是多选择(多分支)语句,即根据给定的条件,选择执行其中某一个分支中的语句序列。 switch语句的一般格式 sw

12、itch语句语义 【例4.6】switch语句的应用 使用switch语句时应注意的几点 【例4.7】输入的年、月,判断该月的天数,4.2.2,C+ Programming,switch语句的一般格式,switch() case : 语句序列1 break; case : 语句序列2 break; case : 语句序列n break; default: ,C+ Programming,switch语句语义,先计算switch控制表达式的值,将该值与每个case分支中的常量表达式的值进行比较,如果相等,则执行该分支后面的语句序列,当执行到break语句时退出该switch语句,否则一直执行下去

13、;如果控制表达式的值与每个case分支中的常量表达式的值都不相等,则执行default分支中的语句序列;如果既没有匹配的case,又没有default分支,则不执行该switch结构中的任何语句。,C+ Programming,【例4.6】switch语句的应用,对学生成绩进行如下分类: A或a等:90-100分; B或a等:80-89分; C或a等:70-79分; D或a等:60-69分; E或a等:60分以下。 程序代码,C+ Programming,使用switch语句应注意的几点,每个case常量表达式值必须互不相同,否则就会出现错误,例如 switch后控制表达式必须是整数、字符或枚

14、举类型的变量或常量,每个case分支后的常量表达式必须是由字面常量、宏定义的常量、const常量构成的表达式,其值必须是整数、字符或枚举类型的常量。每个case分支只能判别一个常量。例如 switch结构的执行部分为由多个case分支及可缺省的default分支组成的复合语句,因此应放在大括号内,即switch语句下面的大括号不能省。 Switch语句允许嵌套,即各分支语句中可以有其它的分支语句。,C+ Programming,【例4.7】输入的年、月,判断该月的天数,分析:根据历法,闰年2月的天数为29天,其它年份2月为28天。闰年是指:年份能被4且不能被100整除,或者年份能被400整除

15、程序代码,C+ Programming,循环结构语句,循环是解决重复性操作的结构。几乎所有的实用的程序都包含循环结构。 循环结构一般由两部分组成: 进入或退出循环的条件:该条件决定是否继续下一轮循环。当该条件满足时,进入下一轮循环,否则退出循环 循环体:为每一轮循环所进行的操作,通常由一个语句序列构成 while()语句 dowhile()语句 for()语句,4.3,C+ Programming,while()语句,while()语句属于当型循环结构,其一般格式为: while() 可以是任一合法的表达式,它的值决定了是否进行下一次循环,因此称之为循环条件表达式;可以是任一语句。 while

16、()语句的语义 【例4.8】求自然数1100总和 在应用while()语句时要注意的几点 【例4.9】键入一个整数按相反顺序输出各位数字,4.3.1,C+ Programming,while()语句的语义,先计算循环条件表达式的值,若不等于0,则执行循环体中的语句。循环体执行完毕后,再计算循环条件表达式的值,重复以上过程,直到条件循环表达式的值等于0时,退出循环。,C+ Programming,【例4.8】求自然数1100总和,#include void main() int i=0, sum=0; while(i+100) sum+=i; cout“sum=“sumendl; ,C+ Pro

17、gramming,在应用while()语句时要注意的几点,while后的“条件表达式”一定要用一对圆括弧“( )”括起来 如果循环体中的语句多于一条时,应该用大括号“”括起来,以复合语句形式出现 在循环体中应有改变“循环条件表达式”值的语句。否则,如果不采用其它方法退出循环,将不能退出循环,成为死循环 while循环可以嵌套。即一个while循环体内可以嵌套另一个while循环 留心边界值(循环次数)。在设置循环条件时,要仔细分析边界值,以免多执行一次,或少执行一次。特别是用+和-运算符时尤其要注意,C+ Programming,【例4.9】键入一个整数按相反顺序输出各位数字,分析:要将一个整

18、数按相反的次序输出各位数字,必须获得该整数的各位数字,由于n%10为n的个位数,因此可以考虑用循环语句来解决该问题。 程序代码,C+ Programming,dowhile()语句,dowhile()语句的结构属于直到型循环结构,其一般格式为: do while(); dowhile()语句的语义 特别注意的是while()后的分号不能少 用dowhile()结构来求自然数1100总和 dowhile()语句与while()语句的主要区别 【例4.10】,4.3.2,C+ Programming,dowhile()语句的语义,当程序运行到do时,立即执行循环体,然后计算循环条件表达式进行,如果

19、循环条件表达式的值不为0,则执行循环体,如此反复,直到循环条件表达式的值为0,结束循环。,C+ Programming,用dowhile()结构来求自然数1100总和,#include void main() int i=1, sum=0; do sum+=i; /循环体 while(i+100); cout“sum=“sumendl; ,C+ Programming,dowhile()语句与while()语句的主要区别,dowhile()语句与while()语句的主要区别在于循环条件的判断与循环体的执行顺序不同:while()语句是先判断后执行,而dowhile()语句是先执行后判断。因此,

20、while()语句中的循环体可以一次也不执行,而dowhile()语句中的循环体至少要执行一次。 在一般情况下,用while()语句和dowhile()语句处理同一个问题时,如果两者的循环体和条件表达式都相同,则他们的结果也一样。但是当while后面的条件表达式一开始就为0时,两种循环的结果是不一样的。,C+ Programming,【例4.10】,输入数据(包括空格和换行符),并将这些数据按输入的顺序输出,直到输入数字0时停止输入,用两种方法实现 用dowhile()语句 用while()语句,C+ Programming,用dowhile()语句,#include void main()

21、char ch; cout请输入(输入0时停止):n; cin.get(ch); do coutch; cin.get(ch); while(ch!=0); coutendl; ,C+ Programming,用while()语句,#include void main() char ch; cout请输入(输入0时停止):n; cin.get(ch); while(ch!=0) coutch; cin.get(ch); coutendl; ,C+ Programming,for()语句,for()语句也属于当型循环结构。其一般格式为: for(;) for()语句的语义 对于for()语句的几

22、点说明 【例4.11】,4.3.3,C+ Programming,for()语句的语义,计算; 计算,若其值不等于0,则转(3);否则,转(5); 执行; 计算,转(2); 结束循环,执行for()语句的后继语句。,0,C+ Programming,对于for()语句的几点说明,中可以声明一个或几个同类型的变量,其语法与声明变量的语法基本一样。示例1 for()语句一般形式中的都可以省略,但两个分号不可省略。循环体可为空,此时可用两种方法表示,或在for()后加,或在for()后加空语句”;”。示例2 三个表达式可以任意的合法表达式,当然也可以是逗号表达式,逗号表达式与for()语句联合使用,

23、可以大大提高for()语句的功能和灵活性,示例3 for循环可以嵌套,即在一个for循环体内包含另一个for循环结构。在C+中这种循环嵌套的层次并没有限制。,C+ Programming,示例1,for(int i=0,j=0 ;i100;i+,j+) 这里,i, j为新声明的整型变量,在声明的同时对它们进行初始化。 再如: for(int i, double j ; ; ) 在定义变量时,这种写法是不允许的,但这里编译时将只出现一个警告信息。其实此时关键字double并不起任何作用,j还是一个整型变量。 在其它表达式中不能进行变量声明。,C+ Programming,示例2,下列语句都是合法

24、的 int i; for( ; i,且循环体为空 for( ; +i的值始终不等于0,C+ Programming,示例3,for(int sum=0,i=100,j=1;i ;sum+=i,i-) ; 注意,在逗号表达式内按自左向右顺序求解,整个逗号表达式的值为其中最右边的表达式的值。例如: for(sum=0,i=1;sum+=i,i中的sum+=i和i100的次序不能颠倒,否则将是死循环。,C+ Programming,【例4.11】,输入整数n,计算1!+2!+ +n!的值(n!表示n的阶乘) 程序代码 该例也可以用一种更简单的形式实现,只要将A行的循环体改为: for(int i=1

25、,fac=1;in;i+) fac*=i; sum+=fac; ,C+ Programming,【例4.11】程序代码,#include void main() int n; long fac,sum=0; coutn; for(int i=1;i=n;i+) /A fac=1; for(int j=1;j=i;j+) /嵌套循环,计算i的阶乘 fac*=j; sum+=fac; cout1!+2!+.+n!=sum; ,C+ Programming,控制执行顺序的语句,C+程序的运行是从主函数(main()开始,按代码或各语句在程序中的先后次序依次执行。为了处理一些特殊的问题,如循环语句中的

26、死循环问题,同时也为了增加程序的灵活性,需要一些能够改变执行顺序的操作。 break语句 continue语句 goto语句 exit()和abort()函数,4.4,C+ Programming,break语句,break语句的一般格式为: break; 该语句通常用于以下两种情况: 用于switch语句的语句序列中,作用是退出switch语句 用在循环体中,其功能是用来退出循环结构。即当运行到循环体中的break语句时,就立即退出循环,执行该循环语句的后继语句。通常和if语句结合使用 【例4.12】,4.4.1,C+ Programming,【例4.12】,从键盘上输入若干个整数,若输入0

27、则终止输入,输出输入整数的个数以及它们的总和。 分析:要输入多个整数,可用循环语句实现,但由于输入整数的个数不确定,即循环的次数不确定,对这类情况可用if语句和break语句来决定何时退出循环。 程序代码,C+ Programming,#include void main() int num; coutnum; if(num= =0) break; /当输入0时,退出循环 sum+=num; cout”输入整数(非0)的个数为:”countert ”输入整数的总和为:”sumendl; ,C+ Programming,continue语句,continue语句的一般格式如下:continue;

28、 该语句的只能用在循环体中。语义是:结束本次循环。对while()语句,转而计算循环条件表达式,判断是否继续下次循环;对for()语句,转而计算和的值,判断是否继续下次循环。 continue语句和break语句的区别是:continue语句只结束本次循环,然后判断是否继续循环;break语句则是结束循环,直接转入其后继语句,不再进行循环条件判断。 【例4.13】输出1100之间不能被3整除的数,4.4.2,C+ Programming,【例4.13】输出1100之间不能被3整除的数,#include void main() int outCounter=0; for(int n=1;n=10

29、0;n+) if(n%3= =0) continue;/ A若n能被3整除,则退出本次循环 coutnt; if( ! (+outCounter % 6) ) /使每行输出6个数 coutn; coutn; ,C+ Programming,goto语句,goto语句的一般格式如下: goto ; /A : /B 如果A行中goto后的与B行中的相同的话,则当运行到A行时,程序将无条件地跳转到B行,并执行其后继语句。示例 标号在程序中只具有标识程序入口的作用,它本身并没有其它的作用 使用goto语句时要注意的几点,4.4.3,C+ Programming,loop: i+; /A s=s+i;

30、if (i=50) goto loop; 当运行到A行时,计算i+,并向下运行程序。当运行到B行时,则跳转到A行,继续执行程序。其实该例用goto语句实现了一个循环语句。,C+ Programming,使用goto语句时要注意的几点,goto语句可以从条件语句或循环语句的内部跳转到外部,但不能从条件语句或循环语句的外部跳转到内部。一个函数体内的goto语句不能跳转到函数体外,也不能跳转到另一个函数。示例 与变量的说明类似,在同一个函数体内,一个标号名只能定义一次,但可以用goto语句调用多次。 由于goto语句会破坏程序的逻辑结构,使程序变得难于理解和阅读,对程序的调试也带来很大的麻烦,如果使用不当,它会给程序带来一些致命的错误,因此要尽量限制使用goto语句。,C+ Programming,exit()和abort()函数,若想退出整个程序,即终止程序的执行,就要使用exit()函数和abort()函数。 exit()函数和abort()函数的作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论