the c programming language second edition 第三章控制流总结知识点
3.1语句与程序块
- 在C语言中分号是语句结束符而Pascal等语言把分号用作语句之间的分隔符
- 用一对花括号把一组声明和语句括在一起就构成了复合语句,在语法上等价于单条语句
- 右花括号用于结束程序块其后不需要分号
3.2if-else语句
- 语法如下所示
if(表达式)
语句1
else
语句2
- 该语句执行时先计算表达式的值若值为真执行语句1若假并且包含else部分便执行语句2
- 由于if语句只是简单测试表达式的数值因此可以对某些代码编写进行简化
if(表达式)来代替 if(表达式!=0)
- 注意由于else部分是可选的所以在嵌套的if语句中省略它的else部分将导致歧义解决的方法是将每一个else部分与最近的前一个没有else配对的if进行匹配
3.3else-if语句
- 语法如下所示
if(表达式)
语句
else if(表达式)
语句
else
语句
(这里的if语句序列是编写多路判定的最常用方法)
- 一旦某个表达式为真则执行与之相关的语句并且终止整个语句序列的执行(既可以是单条语句也可以是用花括号执行的复合语句)
- 其中末尾的else有时候可以省略但有时候可以用来检查错误来捕获“不可能”的条件
3.4switch语句
- switch与具有是一种多路判定语句,它测试表达式是否与一些常量整数值中的某一个值匹配并执行相应的分支动作
switch(表达式)
{
case 常量表达式: 语句序列
default : 语句序列(可选部分如果没有default分支也没有其他分支匹配则该语句不执行任何动作)
}
- break语句导致程序的执行立即从switch语句中退出同样return语句可以
- 好的一面是可以把若干个分支组合一起完成一个任务,但是正常情况下为了防止直接进入下一个分支执行,每个分支后必须以一个break语句结束
- -作为一种良好的程序设计风格,在switch语句最后一个分支的后面也加上一个break语句
3.5while循环与for循环
- 语法如下所示
while(表达式)
语句
首先求表达式的值若值为真则执行语句并再次求该表达式的值,这一循环过程一直进行下去直到该表达式为0
for(表达式1;表达式2;表达式3)
语句
等价于下列while语句:
表达式1;
while(表达式2)
{
语句
表达式 3;
}
但出现contine语句时就不一定等价了
- 从语法角度看for循环语句的3个组成部分都是表达式最常见的情况时,表达式1与表达式3是赋值表达式或函数调用
表达式2是关系表达式(这3组成部分任何部分都可以生虐但分号必须保留,若省略1和3就退化成了while循环,若省略2则认为其值永远为真便是死循环) - 若其中没有初始化或重新初始化的操作其使用while更自然一些
若其中需要执行简单的初始化和变量递增其使用for更自然一些 - 因为for语句的各组成部分可以是任何表达式所以for语句不限于通过算术级数进行循环控制。尽管如此,牵强地把一些无关的计算放到for语句的初始化和变量递增是一种不好的程序设计风格该部分放置循环控制运算更合适
- 逗号运算符“,”也是C语言优先级较低的运算符在for循环中经常用到它。被都好分隔的表达式将按照从左到右的循序进行求值。这样可以将多个表达式放在各个语句成分中比如同时处理两个循环控制变量(也要慎用都好运算符它最适用于无关紧要的结构中)
3.6do-while循环
- while与for在循环执行前对终止条件进行测试。与此相反do-while循环则在循环体执行后测试终止条件
- 语法形式如下
do
{
语句
}while(表达式);
在这一结构中先执行循环体中的语句部分然后再求表达式的值如果表达式的值为真则再次执行语句,依此类推
3.7break语句与continue语句
- 不通过循环头部或尾部的条件测试而跳出循环,有时很方便的
- break语句能使程序从switch语句或最内层循环中立即跳出
- continue语句与break语句是相关联的,但它没有break语句常用。
continue语句用于使for,while或while语句开始下一次循环的执行。(在while与do-while语句中执行意味着立即执行测试部分,在for循环中则意味着时控制转移递增变量部分) - continue语句只用于循环语句不用于switch语句(某个循环包含switch语句中的continue语句将导致进入下一次循环)
3.8goto语句与标号
- C语言提供了可随意滥用的goto语句以及标记跳转位置的符号(从理论上来讲goto语句是没有必要的)
- 最常用的用法是终止程序在某一些深度嵌套的结构中的处理过程列如一次跳出两层或多层循环。这种情况下break只能用从最内层循环退出到上一级的循环
- 大多数情况下使用goto语句的程序段比不适用goto语句的程序段要难以理解和维护,建议尽可能少用goto语句