ImageVerifierCode 换一换
格式:DOCX , 页数:43 ,大小:103.37KB ,
资源ID:10138257      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10138257.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++程序设计第四章 基本语句.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++程序设计第四章 基本语句.docx

1、C+程序设计 第四章 基本语句C+程序设计第4章 基本语句一个C+程序可以由若干个源程序文件组成,一个源程序文件由编译预处理指令、自定义类型说明和函数组成,一个函数由若干条语句组成。语句是组成程序的基本单位。本章介绍C+基本语句的分类、程序结构,详细介绍其中的流程控制语句,包括选择语句、循环语句和跳转语句等。4.1 语句分类程序是由语句构成的。每一条语句都用一个分号结尾。根据MSDN C+规范,C+语句可分为以下9大类。4.1.1 说明语句程序中往往要引入新的名称,来表示某个类型的变量或命名常量,也可能表示用户自定义的某种类型,如结构类型、枚举类型、类等。所有这些引入新名字的语句统称为说明语句

2、(也称为声明语句)。也可以将说明语句再详细划分为类型说明语句、变量或对象说明语句。说明语句在程序执行过程中并没有对数据进行任何操作,仅是向编译器提供一些说明性信息。说明语句可出现在函数中,也可以出现在函数之外。变量说明语句就是最常见的说明语句。例如:int i = 3;这是一条说明语句。变量i是前面不曾出现的变量。该语句说明了一个新变量i,后面的代码就能对这个变量i进行操作。在后面章节还将看到,说明语句可用于说明函数原型、结构、类等。注意编程中的说明与定义的区别。说明可以是笼统的,比如说明一个函数原型、一个类原型,说明可以不包含具体内容,比如不包含函数体,不包含类中的成员。说明也可以是具体的,

3、而定义必须是具体的,当我们说定义一个函数时,不仅要确定函数原型,也要确定函数体。4.1.2 表达式语句在任一表达式后面加上一个分号就构成一条表达式语句。表达式语句的作用是执行计算。变量说明语句和表达式语句相结合,完成计算过程。例如:int i = 3; /这是说明语句,而不是赋值语句i = 4; /这是赋值语句,是一种表达式语句赋值语句、逗号语句、自增自减语句都是常见的表达式语句。一个函数调用可作为一个操作数,是表达式的一部分,所以函数调用语句也是一种表达式语句。后面章节将详细介绍。4.1.3 选择语句程序中往往要根据某个条件来执行不同的代码。选择语句就是先计算一个条件,如果为真就执行特定的一

4、段代码,如果条件为假,还可以执行另一段代码。有两种选择语句:if-else和switch语句。4.1.4 循环语句编程中还经常要重复执行一段代码,直到满足特定的停止条件为止。有三种循环语句:while、do-while和for语句。4.1.5 跳转语句 一般情况下,程序自上向下逐条语句执行,形成一条控制流。但有时需要在一个函数中将控制流跳转到另一个地方开始执行,或者从一个函数中将控制流返回到调用方。跳转语句有break、continue、return、goto语句。C+扩充的throw语句用来引发异常,导致控制流跳转到异常处理语句,也属于一种跳转语句,将在后面章节详细介绍。 选择语句、循环语句

5、和跳转语句也被统称为流程控制语句。本章后面将详细介绍这三类语句。4.1.6 空语句只由一个分号“;”构成的语句称为空语句,它不执行任何动作,主要用于满足特殊语法要求。例如,循环语句中需要一条语句作为循环体,但你又不想做任何事情,就可用一个空语句。本章后面将会用到空语句。4.1.7 复合语句复合语句(也称块语句block或者分程序),是用一对花括号把一条或多条语句括起来构成的一条语句。一条复合语句可包含多条语句,但在逻辑上被看作一条语句,可以出现在任何需要一条语句的地方。花括号是一种标点符号,左花括号表示复合语句的开始,右花括号表示复合语句的结束。复合语句不需要分号来结束。复合语句主要用在流程控

6、制语句中。一个函数体的开始和结束也需要一对花括号,但一般不能把一个函数体作为一条复合语句。复合语句的花括号区间构成一个作用域,其中可以定义变量,将在下一章介绍。显然,一条复合语句内部可嵌套多条复合语句,嵌套层次的数目没有明确限制。4.1.8 异常处理语句在执行代码过程中,可能会引发某些类型的异常(用throw语句引发异常,或者因某种错误引发异常),就需要捕获这些异常类型并加以适当处理,这样的语句就是异常处理语句。这是C+扩充的一种新语句,主要是try-catch语句,将在第15章详细介绍。4.1.9 标号语句前面介绍的goto跳转语句需要对函数中的某一条语句添加标号,这样使goto语句能根据标

7、号的名称跳转到该语句开始执行。4.2 程序的基本结构结构化编程有3种基本结构:顺序结构、选择结构和循环结构。每一种基本结构都由若干模块组成,一个模块是一条复合语句的抽象。一个函数就是一个模块,下一章介绍函数。每一种结构都是一个模块,而且每个模块都能在内部嵌套更小的多个模块。每个模块的设计应遵循以下原则: 每个模块都应该是单入口、单出口。 每个模块都有机会执行,即不能让一些模块永远都不能执行。 模块中不能有死循环,即不能只进不出。4.2.1 顺序结构图4.1 顺序结构顺序结构的程序是按从上到下的顺序依次执行各个模块。如图4.1所示,一个模块中嵌套了两个模块,先执行A模块,再执行B模块。单入口要求

8、,若A模块执行,B模块就一定执行。即不允许在两个模块之间插入另一个入口,只执行B模块而不执行A模块。这样保证B模块执行之前,A模块一定执行完毕。单出口要求,当退出顺序结构时,A模块和B模块都执行完毕。如果在A模块中有一条goto语句,就可能导致B模块不能执行。如果在B模块中有标号语句,就可能使外部goto语句能跳转进入B模块执行,而A模块不能执行。这样就违背了单入口、单出口的原则。在A模块和B模块中,并非禁止所有的跳转。在任何模块中都允许执行以下两种跳转语句: return语句:将当前函数的执行返回到调用方。 throw语句:引发异常到外层的异常捕获处理语句。以上两种跳转语句都有确定的目标,而

9、且一般情况下只有在满足特定条件时,才使用这两种跳转语句,而不是无条件跳转,所以经常会用到这两种跳转语句。顺序结构在逻辑上比较简单,容易理解,往往用来描述高层的执行顺序。例如,输入数据、计算结果、输出结果,三个模块按次序执行。每个模块都可以递归地嵌套内部子模块,而每个模块都应该是三种基本结构之一。4.2.2 选择结构选择结构是根据条件的不同结果做出不同的选择,从而执行不同的语句。如图4.2所示。先计算一个条件,如果为真就执行A模块,否则就执行B模块(或者什么都不执行,图右面一种情形)。图4.2 选择结构单入口要求,如果A模块能执行,条件就一定为真。不允许出现这样的情形,执行了A模块,而没有执行条

10、件判断,或者条件判断不为真。单出口要求,在退出选择结构时,要么A模块执行,要么B模块执行。如果A模块中有一条goto语句跳转到B模块中,或者跳转到其它地方,就会破坏单入口单出口的原则。两个模块都应有机会执行,即该条件不应恒为真或恒为假。实现选择结构的语句有if-else语句和switch语句。4.2.3 循环结构图4.3 循环结构循环结构就是按照一个条件对某些语句重复执行多次。一个循环结构由一个条件和一个循环体(表示为模块A)构成。如图4.3所示。有左右两种情形:情形1。先判断条件,若为真就执行模块A,然后再转去判断条件,直到条件为假,退出循环结构。这种情形对应while语句和for语句。单入

11、口要求,模块A执行,条件必须满足。即不允许外部直接跳转到模块A开始执行。单出口要求,当退出循环结构时,条件一定为假。即不允许在退出循环结构时,条件没有判断或者条件为真的情形。条件如果恒为真,而且模块A中没有跳转语句,就形成了死循环,不能退出循环结构。反之,条件如果恒为假,模块A将没有机会执行。这样都将违背模块设计的原则。情形2。先执行模块A,然后再判断条件,如果为真,就再执行模块A,直到条件为假,退出循环结构。这种情形对应do-while语句。模块A至少执行一次。单入口要求,模块A再次执行,条件必须满足。单出口要求,当退出循环结构时,条件一定为假。条件如果恒为真,而且模块A中没有跳转语句,此时

12、形成死循环,不能退出循环结构。反之,条件如果恒为假,模块A将执行一次。对于以上两种情形,如果在模块A中有goto语句跳转到结构之外,或者模块A中有标号语句使外部goto语句能跳转到模块A中执行,都会破坏单入口单出口原则。循环结构是最强有力的结构。可以让程序按条件自动执行,以得到预期结果。同时循环结构也是最复杂的结构,它可能导致死循环、甚至系统崩溃。循环结构可以嵌套,即A模块中可包含更小的循环结构或者其它结构。循环结构中,模块A中允许执行除goto之外的其它跳转语句。例如: break语句:结束循环,退出当前循环结构。 continue语句:结束本轮循环,跳转到当前循环结构的条件判断,尝试下一轮

13、循环。 return语句:当前函数的执行返回到调用方。 throw语句:引发异常到外层的异常处理语句。顺序结构、选择结构和循环结构都是基本结构。一个程序应该仅由这三种基本结构嵌套形成,不允许出现goto语句。这是结构化编程的最基本要求。结构化方法还强调“自顶向下,逐步求精”的设计过程。就是先从大处着眼,根据需求先描述一个抽象的过程框架,然后再对其中每一步进行分解、细化,逐步得到编码。另外,结构化设计还有“高内聚、低耦合”的设计原则,在后面介绍。4.3 选择语句选择语句又称为分支语句,如果在程序中需要根据不同的条件来决定执行何种操作,就要使用选择结构。C+语言提供了两种选择结构语句:条件语句(i

14、f语句)和开关语句(switch语句)。4.2.1 条件语句条件语句又称为if语句,根据一个条件来决定是否执行某条语句,或者从两条语句中选择一个执行。1. if语句if语句的语法格式为:if()图4.4 if语句的执行过程其中,的值作为条件,如果计算值为非0,即为逻辑真,就执行,否则就执行下一条语句。执行过程如图4.4所示。条件表达式可以是任何表达式,但常用的是关系表达式或逻辑表达式;作为循环体的语句可以是单条语句,也可以是一条复合语句,即用花括号括起来的多条语句。例如:int a = 1, b = 2, c = 0;if (a b) c = a - b;cout c b 这个表达式的运算结果

15、是否为逻辑真,若是,则执行c = a-b语句。如果结果为逻辑假,则会跳过语句c = a-b,转而执行下面的cout c endl语句。所以输出的c值是1,而不是0。当条件满足时所执行的一条语句可以是复合语句。例如:float score = 0;cout score;if (score 100 | score 0) coutscore is invalid. 0-100 is valid!endl; return;上面代码检查输入的分数,合理的分数假设为0到100之间。如果输入的分数score不在合理范围之内,就要执行下面的复合语句中的2条语句。为了使程序方便阅读,在书写条件语句时,满足条件所

16、执行的语句都缩进一个tab位置,只有在语句很短时才与if条件写在同一行上。2. if-else语句if-else语句的语法格式为:if() else图4.5 if-else语句的执行过程其中,的值作为条件,如果计算为非0,即为逻辑真,就执行,否则就执行。它们可以是一条语句,也可以是一条复合语句。执行过程如图4.5所示。例如:int x;cout x;if (x % 2 = 0)coutx is even!endl; /能被2整除,则为偶数else coutx is odd!endl; /否则,为奇数程序中条件语句判断x的值是奇数还是偶数。若x的值能被2整除,输出x是偶数(even);否则输出x

17、是奇数(odd)。在进行条件判断时,往往使用C语句的一个潜规则:“非0为真”。例如上面if语句等价于下面写法:if (x % 2) /等价于x % 2 != 0coutx is odd!endl; /不能被2整除,x为奇数elsecoutx is even!endl; /能被2整除,x为偶数上面直接把算术表达式作为条件,就是将所有非0值都看作逻辑真。我们建议还是用关系表达式或逻辑表达式作为条件比较直接、清晰可读。if-else是最常用的条件语句,用一个条件形成了两个分支。为了使程序方便阅读,一般将“else”与“if”书写在同一列上,在垂直方向对齐,而且将语句1和语句2缩进一个tab位置。3.

18、 if语句的嵌套对于if-else语句,语句1或语句2又可以是一条if-else语句,这就形成嵌套的if语句。例如:if (表达式1) else if(表达式2) else图4.6 一种嵌套的if-else语句形式上面是一条if-else语句的结构,只是其中else部分嵌套了一条if-else语句。这种结构的执行过程如图4.6所示。这种结构用两个条件形成了三个分支。多次使用这样的嵌套方式可用n个条件形成n+1个分支。例4-1实现一个函数,任意给定自变量x的值,求函数y的值。#include void main(void) float x, y; cout x; if (x 0) /条件1y =

19、 1; /语句1 else if(x = 0) /条件2y = 0; /语句2 elsey = -1; /语句3,此时, x 0 coutx=x y=y 0的情形if (x = 0) if (x = 0) y = 0; /x = 0的情形 else y = -1; /此时,x 0在书写if语句嵌套形式时要特别注意else与if的配对问题。一定要确保else与if的对应关系不存在歧义性。对于上面代码,可能将“else”与第一个if垂直对齐,但仍然没有改变程序的功能,如下所示:if (x = 0) if (x = 0) y = 0; /x = 0的情形else y = -1; /此时,x 0C+中

20、规定else与其前边最近的未配对的if相配。因此上面代码仍然完成原先功能。如果真的要使else与第一个if配对,就要用复合语句花括号来改变配对关系,如下所示:y = 1; /if (x 0这样仅添加了一对花括号就改变所实现的函数。当x 0时,y=-1;当x 0时,y =1。例4-2输入一个分数,输出相应的五分制成绩。设90分以上为“A”,8089分为“B”,7079分为“C”, 6069分为“D”,60分以下为“E”。#includevoid main(void) int iScore = 0; cout iScore; if (iScore = 90) cout =90 else if (i

21、Score = 80) cout = 70) cout = 60) cout D; /60-69 else cout E; /60上面程序用4个条件划分了5个分支。注意,在嵌套的if语句中,后一个if条件判断以前一个if条件不满足为前提,因此if条件的次序很重要。4.2.2 开关语句开关语句也称为switch语句,或者多选择语句、或者多分支语句。它可以根据给定的表达式,从多个分支语句序列中选择执行一个分支。该语句的一般格式为:switch()case :break;case :break; .case 常量表达式n:break;default: 其中,的类型只能是整型,即char、short或

22、int型。的类型也只能char、short或int型,通常是字面常量。每个可由一条或多条语句组成,也可以是空。每个case常量及其后的语句序列构成一个case子句。一条switch语句可包含一个以上的case子句。多个case子句的常量之间不应重复。如果有break语句的话,它应该是语句序列中的最后一条语句。其中break语句和最后的default子句都是任选的。一条完整的switch语句涉及到4个关键字:switch、case、break、default。图4.7 switch语句的执行过程假设一条switch语句包含default子句,它的执行过程如图4.7所示。先计算表达式的值,设为x,

23、再依次与下面case常量进行比较。若x与某个case常量相等,则以此为入口,转去执行该case子句的语句序列,一直执行下去,直到遇到break语句或switch语句结束的右花括号为止。如果x与所有的case常量都不相等,而且有default子句,就执行default子句,然后结束switch语句的执行。应该注意的是,每个case常量只是一个入口标号,而不能确定前一个case子句的终点。所以如果要使每个case子句作为一个条件分支,就应将break语句作为每个case子句的最后一条语句,这样每次执行只能执行其中一个分支。这是switch语句的习惯用法。default子句可以放在switch语句中

24、的任何位置,但习惯上作为最后一个子句,此时不需要再将break作为它的最后一条语句。例4-3输入一个分数,输出相应的五分制成绩。设90分以上为“A”,8089分为“B”,7079分为“C”, 6069分为“D”,60分以下为“E”。#include void main() float score = 0; cout score; if (score 100 | score 0) coutscore is invalid. 0-100 is valid!endl; return; switch (int(score/10) case 10: case 9: coutA; break; case

25、8: coutB; break; case 7: coutC; break; case 6: coutD; break; default:coutE; 上面程序允许输入浮点数成绩,而且假定合理的分数范围应该在0到100之间,并用if语句检查。对表达式score/10进行强制类型转换为int,这是必要的。第一个case子句的语句序列为空,这样就与第二个case子句公用一个入口。当省略case后面的语句序列时,则可实现多个入口,执行同一个语句序列。例4-4 任意给定一个月份数,输出它属于哪个季节(12月、1月、2月是冬季;3月、4月、5月是春季;6月、7月、8月是夏季;9月、10月、11月是秋季)

26、。#include void main(void) int month; coutmonth; switch(month) case 12: case 1: case 2: coutwinterendl; /12、1、2月是冬季 break; case 3: case 4: case 5: coutspringendl; /3、4、5月是春季 break; case 6: case 7: case 8: coutsummerendl; /6、7、8月是夏季 break; case 9: case 10: case 11: coutautumnendl; /9、10、11月是秋季 break;

27、default: coutinput month error!endl; switch语句能实现的功能,用嵌套的if语句同样能实现。在一些情况下用switch语句可能具有较好的可读性。但switch语句在使用中有许多限制和注意点。例如,条件表达式不能是浮点数,而且只能判断是否相等来确定入口,break容易忘记等。4.3 循环语句编程中经常要反复执行同一语句序列,直至满足某个停止条件为止,这种重复执行过程称为循环。C+提供了3种循环语句:while、do-while()和for语句。每一种循环都具有三要素:1、初始条件,主要用于设置启动循环的一些变量;2、终止条件,用于设置循环的出口点;3、循环变量的修改,在循环过程中修改循环变量以达到终止条件,避免死循环。4.3.1 while语句while语句的语法格式为:while()图4.8 while语句的执行过程其中,确定了执行循环的条件,可以是任意合法表达式,但通常是一个关系表达式或逻辑表达式。如果表达式的值为非0(即逻辑真),就执行,然后再计算再判断,直到的值为0(即逻辑假)。是一条语句,也可以是一条复合语句。图4.8描述了while语句的执行过程。如果在一开始表达式的值为0,即为逻辑假,则直接退出循环,而不执行循环体语句。下面代码计算sum=1+2+3+100。当然你可以不用循环,只

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1