第三章摘抄笔记The C Programming Lanuage

本文详细介绍了程序设计中的控制流概念,包括语句与程序块、if-else与else-if语句、switch语句、while与for循环、do-while循环、break与continue语句、goto语句及其使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第三章 控制流

3.1 语句与程序块

在表达式之后加上一个分号(;),它们就变成了语句,分号是语句结束符。

用一对花括号“{”与“}”把一组声明和语句括在一起就构成了一个复合语句(也叫作程序块),复合语句在语法上等价于单条语句。(在任何程序块中都可以声明变量)右花括号用于结束程序块,其后不需要分号。

3.2 if-else语句

if-else语句用于条件判定,其语法如下所示:

if {表达式}
    语句1
else
    语句2

其中else部分是可选的。该语句执行时,先计算表达式的值,如果其值为真(即表达式的值为非0),则执行语句1;如果其值为假(即表达式的值为0),并且该语句包含else 部分,则执行语句2。

3.3 else-if语句

在 C语言中我们会经常用到下列结构:

if (表达式)
    语句
else if (表达式)
    语句
else if (表达式)
    语句
else if (表达式)
    语句
else
    语句

这种语句常用于多路判定最常用的方法。其中的各表达式将被依次求值一旦某个表达式结果为真,则执行与之相关的语句,并终止整个语句序列的执行。最后一个else部分用于处理“上述条件均不成立”的情况或默认情况,也就是当上面各条件都不满足时的情形。

3.4 switch语句

switch (表达式) {
    case 常量表达式: 语句序列
    case 常量表达式: 语句序列
    default: 语句序列

每一个分支都由一个或多个整数值常量或常量表达式标记。如果某个分支与表达式的值匹配,则从该分支开始执行。

break 语句将导致程序的执行立即从switch 语句中退出。在switch 语句中,case的作用只是一个标号,因此,某个分支中的代码执行完后,程序将进入下一分支继续执行,除非在程序中显式地跳转。跳出switch语句最常用的方法是使用break语句与return语句。

依次执行各分支的做法有优点也有缺点。好的一面是它可以把若干个分支组合在一起完成一个任务,如上例中对数字的处理。但是,正常情况下为了防止直接进入下一个分支执行,每个分支后必须以一个break语句结束。从一个分支直接进入下一个分支执行的做法并不健全,这样做在程序修改时很容易出错。除了一个计算需要多个标号的情况外,应尽量减少从一个分支直接进入下一个分支执行这种用法,在不得不使用的情况下应该加上适当的程序注释。

作为一种良好的程序设计风格,在switch语句最后一个分支(即default分支)的后面也加上一个break语句。这样做在逻辑上没有必要,但当我们需要向该switch语句后添加其它分支时,这种防范措施会降低犯错误的可能性。

3.5 while循环和for循环

while (表达式)
    语句

首先求表达式的值。如果其值非0,则执行语句,并再次求该表达式的值。这一循环过程一直进行下去,直到该表达式的值为0为止,随后继续执行语句后面的部分。

for (表达式1; 表达式2; 表达式3)
    语句

它等价于下列while语句:

表达式 1;
while (表达式2) {
    语句
    表达式 3;
}

表达式1与表达式3 是赋值表达式或函数调用,表达式2 是关系表达式。这3 个组成部分中的任何部分都可以省略,但分号必须保留。如果在for 语句中省略表达式1 与表达式3,它就退化成了while 循环语句。

3.6 do-while循环

while与for这两种循环在循环体执行前对终止条件进行测试。与此相反,C语言中的第三种循环——do-while循环则在循环体执行后测试终止条件,这样循环体至少被执行一次。

do
    语句
while (表达式);

在这一结构中,先执行循环体中的语句部分,然后再求表达式的值。如果表达式的值为真,则再次执行语句,依此类推。

3.7 break语句和continue语句

break 语句可用于从for、while与do-while等循环中提前退出,就如同从switch语句中提前退出一样。break语句能使程序从switch语句或最内层循环中立即跳出。

continue 语句用于使for、while 或do-while 语句开始下一次循环的执行。

在while 与do-while语句中,continue 语句的执行意味着立即执行测试部分;在for 循环中,则意味着使控制转移到递增循环变量部分。continue 语句只用于循环语句,不用于switch 语句。某个循环包含的switch语句中的continue语句,将导致进入下一次循环。

3.8 goto语句与标号

最常见的用法是终止程序在某些深度嵌套的结构中的处理过程,例如一次跳出两层或多层循环。这种情况下使用break语句是不能达到目的的,它只能从最内层循环退出到上一级的循环。

标号的命名同变量命名的形式相同,标号的后面要紧跟一个冒号。标号可以位于对应的goto语句所在函数的任何语句的前面。标号的作用域是整个函数。

所有使用了goto语句的程序代码都能改写成不带goto语句的程序,但可能会增加一些额外的重复测试或变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值