C++程序设计(第2版).ppt
第4章,C+的基本语句,本章主要内容,4.1 C+语言的语句和程序结构4.2 选择结构语句4.3 循环结构语句4.4 控制执行顺序的语句4.5 编程规范和编程风格,4.1 C+语言的语句和程序结构,4.1.1 C+语句分类4.1.2 程序的基本结构,4.1.1 C+语句分类,1.变量和对象声明语句 在C+中,把完成对数据结构的定义和描述、对变量的定义性说明统称为声明语句。声明语句在程序的执行过程中,并没有完成对数据进行操作的执行体,而仅是向编译程序提供一些说明性的信息。它可放在函数中允许出现语句的任何位置,也可以放在函数定义之外。2.流程控制语句 控制语句是用来完成对程序的执行顺序进行一定控制的语句,如程序的选择控制、循环控制、程序的跳转等。3.表达式语句 表达式语句就是指在任一表达式的后面加上一个分号而构成的语句。4.函数调用语句 函数调用语句是在一次函数的调用后加上一个分号所构成的语句,它完成一次函数的调用。,5.空语句 只由一个分号所构成的语句称为空语句,它不执行任何动作,主要用于指明被转向的控制点或在特殊情况下作为循环语句的循环体。6.复合语句 复合语句(也称块语句)是指用花括号把一个或多个语句括起来后构成一个语句。在C+中,复合语句从逻辑上被作为一个语句来处理,它可以出现在只允许出现一个语句的任何位置。花括号是C+中的一个标点符号,左花括号标明复合语句的开始位置,右花括号标明复合语句的结束位置。复合语句不需要分号来结束。复合语句主要是用在控制语句中。,4.1.2 程序的基本结构,在C+语言中,有结构化程序设计的3种基本结构:顺序结构、选择结构和循环结构,如图4.1所示。这3种基本结构都有以下两个共同特点:(1)只有一个入口点,一个出口点。(2)对于要执行的操作都有一条路径,即从入口到出口要执行的每一个操作。,图4.1 3种基本控制结构,1.顺序结构 顺序结构的程序是按从上到下的顺序依次执行各个语句。实现顺序结构的语句有说明语句和表达式语句等。2.选择结构 选择结构是根据不同的条件执行结果做出不同的选择,从而执行不同的语句。实现选择结构的语句有if语句、ifelse语句和switch语句等。3.循环结构 循环结构就是对程序中某些语句重复执行多次。实现循环结构的语句有for语句、while语句和dowhile语句等。,4.2 选择结构语句,4.2.1 条件语句4.2.2 条件运算符“?:”4.2.3 开关语句,4.2.1 条件语句,条件语句又称为if语句,其根据条件是否满足来决定是否执行某条语句或者从两个语句中选择一个语句执行。它有3种基本格式。1.if语句 If语句的语法格式为:if()if语句的执行过程如图4.2所示。,图4.2 if语句的执行过程,2.ifelse语句 if.else 的语句格式为:if(表达式)语句序列1;else 语句序列2;ifelse语句执行过程如图4.3所示。,图4.3 ifelse语句的执行过程,3.if语句的嵌套 if语句的嵌套是指在if语句的内嵌语句仍是if语句。例如,下面两个使用了if语句的嵌套形式的结构。语句格式为:if(表达式 e1)语句S1 else if(表达式e2)语句S2 else if(表达式e3)语句S3.else 语句Sn,4.2.2 条件运算符“?:”,使用条件运算符(?:)可以实现ifelse的功能,其一般形式为:exp1?exp2:exp3 条件运算符有三个操作数,故我们将其称为三目运算符。条件运算符是C+语言中唯一一个三目运算符。我们把上面这个表达式称为条件表达式。这个条件表达式的意思是,如果exp1为真,则运算exp2,整个条件表达式的值为exp2的值;反之,则运算exp3,整个条件表达式的值为exp3的值。,4.2.3 开关语句,开关语句是指switch语句,它也称为多选择语句或者多分支语句。它可以根据给定的条件,从多个分支语句序列中选择执行一个分支的语句序列。该语句的一般格式为:switch(表达式)case常量表达式1:语句序列1;break;case常量表达式2:语句序列2;break;case常量表达式n:语句序列n;default:语句序列n;,(1)表达式:可以控制程序的执行过程,表达式的结果必须是整数、字符或枚举量值。(2)case后面的常量标号,其类型应与表达式的数据类型相同。(3)语句序列是switch语句的执行部分。(4)break是中断跳转语句,表示在完成相应的case标号规定的操作之后,不继续执行switch语句的剩余部分而直接跳出switch语句之外,继而执行switch结构后面的第一条语句,如果不在switch结构的case中使用break语句。执行过程如图4.4所示。,图4.4 switch语句的执行过程,4.3 循环结构语句,4.3.1 while()语句4.3.2 dowhile()语句4.3.3 for()语句4.3.4 3种循环语句的比较4.3.5 循环的嵌套及其应用,4.3.1 while()语句,while()语句用于首先判断循环条件,当条件为真时,程序重复执行某些操作。其语句格式:while(条件表达式)循环体语句;while()语句的执行过程如图4.5所示。,图4.5 while语句的执行过程,4.3.2 dowhile()语句,dowhile语句的一般语法格式为:dowhile();执行过程:先执行语句,后判断表达式的值;若表达式的值不为0,则继续执行循环体,直到表达式的值为0时为止。流程图为如图4.6所示。,图4.6 dowhile语句的执行过程,4.3.3 for()语句,语句格式:for(表达式1;表达式2;表达式3)语句序列;其中的组成部分说明如下。表达式1:通常为赋值表达式,用来确定循环结构中的控制循环次数的变量的初始值,实现循环控制变量的初始化。表达式2:通常为关系表达式或逻辑表达式,用来判断循环是否继续进行的条件,将循环控制变量与某一值进行比较,以决定是否退出循环。表达式3:通常为表达式语句,用来描述循环控制变量的变化,多数情况下为自增/自减表达式(复合加/减语句),实现对循环控制变量的修改。循环体(语句序列):当循环条件满足时应该执行的语句序列。可以是简单语句、复合语句。若只有一条语句,则可以省略。,for语句的执行过程可以用如图4.7所示的流程图来描述。,图4.7 for语句的执行过程,4.3.4 3种循环语句的比较,(1)for和while语句都是先判断循环条件,循环体可能一次也不执行。而dowhile语句是先执行循环体,后判断循环条件,所以循环体至少要执行一次。(2)由于for语句有三个表达式,可分别用于循环变量初始化、循环结束条件和循环控制变量的更新,所以用得最多的是for语句,其次是while语句,而dowhile语句相对于前两种语句用得少一些。在实际应用中,通常根据具体情况来选用不同的循环语句,选用的一般原则是:(1)如果循环次数在执行循环体之前就已确定,一般用for语句;如果循环次数是由循环体的执行情况来确定,则采用while语句或dowhile语句。(2)当循环体至少要执行一次时,采用dowhile语句;反之如果循环体可能一次也不执行,则选用while或for语句。,4.3.5 循环的嵌套及其应用,一个循环语句的循环体内包含另一个完整的循环结构,称为循环的嵌套。这种嵌套的过程可以有很多重,一个循环的外面包围一层循环叫双重循环,如果一个循环的外面包围二层循环叫三重循环,一个循环的外面包围三层或三层以上的循环叫多重循环。这种嵌套在理论上来说可以是无限的。正常情况下:应先执行内层的循环体操作,然后是外层循环。例如:对于双重循环,内层循环被执行的次数应为:内层次数外层次数。三种循环语句while、dowhile、for可以互相嵌套,自由组合。外层循环体中可以包含一个或多个内层循环结构,但要注意的是,各循环必须完整包含,相互之间绝对不允许有交叉现象。因此每一层循环体都应用括起来。,4.4 控制执行顺序的语句,4.4.1 break语句4.4.2 continue语句4.4.3 goto语句4.4.4 exit和abort函数,4.4.1 break语句,中断处理语句break语句有两个功能,第一个功能是在switch语句中终止case的判断,退出switch语句。第二个功能是在循环结构中终止本层循环,退出循环结构。break的语法格式为:break;在循环结构和switch语句中使用break语句,当程序执行到break 时会跳出break 所在的循环和switch结构,使程序立即退出该语句结构转而执行该语句后面的下一条语句,其作用是用来中断这四种语句的执行。因此,如果执行程序的某一点后,不需要等到正常结束就退出循环体或跳出switch结构的剩余语句,可以用break语句实现。,4.4.2 continue语句,continue 语句它仅能用于循环结构中,其作用是终止循环体的本次执行,返回循环首部,检查循环条件,以决定是否进行下一次的循环体的处理。continue语句也称为继续语句。其一般语法格式为:continue;在循环体的任何位置,当执行到continue 语句时,程序被强迫跳过循环体剩余语句的执行而直接返回循环的开头重新进行循环条件的判断,根据判断的结果决定是否继续执行循环。即一旦执行了continue 语句,程序就会跳过循环体中位于该continue 语句后面的所有语句,提前结束本次循环周期并开始新的一轮循环。,4.4.3 goto语句,goto语句即无条件转移语句。其功能是改变程序控制的流程,无条件地将控制转移到语句标号所在处。1.语句标号 语句标号是为了指示语句在程序中的位置,常常作为转移语句(goto语句)的转移目标。其格式如下::2.goto语句 goto语句改变程序的流程,无条件地转移到指定语句标号的语句处去执行。其格式为:goto;3.goto语句使用说明(1)不能用goto语句转移到其他函数中。,(2)goto语句可从条件语句或循环语句里面转移到条件语句或循环语句外面;但不允许从条件语句或循环语句外面转移到条件语句或循环语句里面。从循环体内转移到循环体外作用可由break或continue替代。(3)goto语句可从多层循环的内层跳到外层循环外。从结构化程序设计的角度出发,在程序设计时应尽量避免使用goto语句。(4)goto语句一般用来与if语句一起构成循环结构。但可由while、dowhile和for取代,不提倡这样使用。(5)goto语句的大量使用会破坏程序的结构化,使程序的流程控制混乱,可读性降低,调试困难。一般不提倡使用goto语句。,4.4.4 exit和abort函数,exit函数和abort函数都是+的库函数,其功能都是终止程序的执行,将控制返回给操作系统。当使用这两个函数中的任一个函数时,都应包含头文件stdlib.h。1.exit函数 exit函数的作用是无条件正常终止程序的执行,并将控制返回给操作系统。原型为:void exit(int status);2.abort函数 abort函数用于异常终止程序的执行。原型为:void abort(void);,4.5 编程规范和编程风格,1.源程序文件组织 每个程序文件单元通常都应由.h 文件和.cpp 文件组成,并将单元的公共声明部分放在.h 文件中。2.源程序文件结构 每个程序文件应由标题、内容和附加说明3部分组成。(1)标题:文件最前面的注释说明,其内容主要包括程序名、作者、版权信息、简要说明等,必要时应有更详尽的说明(将此部分以空行隔开单独注释)。(2)内容:为文件源代码部分基本上按预处理语句、类型定义、变量定义、函数原型、函数实现(仅对.cpp文件)的顺序。(3)附加说明:文件末尾的补充说明,如参考资料等,若内容不多也可放在标题部分的最后。,3.编辑风格(1)缩进:缩进以Tab为单位,一个Tab为4个空格大小。(2)空格:数据和函数在其类型、修饰(如_fastcall 等)名称之间适当空格并根据情况对齐。(3)对齐:原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。(4)空行:程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行,由于BCB会自动产生一行“/-”做分隔,另因每个函数还要有函数说明注释,故通常只需空一行或不空,但对于没有函数说明的情况至少应再空一行。(5)注释:对注释有以下3点要求:必须是有意义的。必须正确地描述了程序。必须是最新的。,4.命名规范 坚持采用匈牙利变量命名惯例,所有标识符一律用英文或英文缩写,杜绝采用拼音,标识符中每个单词首字母大写,缩写词汇一般全部大写,只在必要时加“_”间隔词汇,用#define定义的宏一般全部大写,其他具体细节待定。,本章习题,教材第54页的第2、3题教材第62页的第7题教材第69页的第8、9、10题教材第73页的第11题,实验4 选择与循环,时间:10月13日3-4节要求:掌握选择与循环结构用法了解控制程序执行顺序的方法需要检查4个程序代码(教材79页三个编程项目和自测题14),如果不能当场完成,可在下次实验时提交纸质的代码。内容:上机运行教材第57页例4-5以及79页的例4-12的程序代码,体会if语句嵌套与switch语句多分支控制的方法。上机运行教材第64页例4-8、4-9,体会while与do-while语句的区别。并用for语句进行改写。按照教材第79页自测题14的要求编写程序,注意选择与循环结构的用法。上机运行教材第60页例4-7的程序代码,在此基础上按照教材第79页第1题要求编写程序,体会选择与循环嵌套用法。按照教材第79页第2题要求编写程序,体会选择与循环结构的用法。按照教材第79页第3题要求编写程序,体会选择与循环结构的用法。,