第六章 循环《C语言程序设计现代方法(第2版)》读书笔记(二)

简介: 第六章 循环《C语言程序设计现代方法(第2版)》读书笔记(二)

6.4 退出循环 🚀


6.4.1 break 语句 🚀

当这些语句出现嵌套时,break语句只能跳出一层嵌套。


image.png


6.4.2 continue 语句 🚀


用break语句会使程序控制跳出循环,而continue语句会把程序控制留在循环内。break语句和continue语句的另外一个区别是:break语句可以用于switch语句和循环(while、do和for),而continue语句只能用于循环。


6.4.3 goto 语句 🚀


break语句和continue语句都是跳转语句:它们把控制从程序中的一个位置转移到另一个位置。这两者都是受限制的:break语句的目标是包含该语句的循环结束之后的那一点,而continue语句的目标是循环结束之前的那一点。goto语句则可以跳转到函数中任何有标号的语句处。(C99增加了一条限制:goto语句不可以用于绕过变长数组( 8.3节)的声明。)


image.png


image.png


注意,return语句后面没有break语句。紧跟在return语句后的break语句永远不会执行,

许多编译器还将显示警告消息。


6.5 空语句 🚀

语句可以为空,也就是除了末尾处的分号以外什么符号也没有。


空语句主要有一个好处:编写空循环体的循环。


image.png


       把普通循环转化成带空循环体的循环不会带来很大的好处:新循环往往更简洁,但通常不会提高效率。但是在一些情况下,带空循环体的循环比其他循环更高效。例如,这些带空循环体的循环更便于读取字符( 7.3节)数据。


如果不小心在if、while或for语句的圆括号后放置分号会创建空语句,从而造成if、

while或for语句提前结束。

 

1. if语句中,如果在圆括号后边放置分号,无论控制表达式的值是什么,if语句执行的动作显然 都是一样的


image.png


image.png


这种写法的循环会在i达到0值时停止,所以它应该和原始版本一样好。(p.70)


答: 新写法确实更加简洁,许多C程序员也都这样写循环。 但是,它也有缺点。

首先,新循环不像原始版本那样容易阅读。新循环可以清楚地显示出在i达到0值时循环终止,但是不能清楚地表示是向上计数还是向下计数。而在原始的循环中,根据控制表达式i > 0可以推断出这一信息。

其次,如果循环开始执行时i碰巧为负值,那么新循环的行为会不同于原始版本。原始循环会立刻终止,而新循环则不会。


问:6.3节提到,大多数 for循环可以利用标准模式转换成 while循环。能给出一个反例吗?(p.74)

答:当for循环体中含有continue语句时,6.3节给出的while模式将不再有效。思考下面这个来自6.4节的示例:


image.png


但是,这个循环并不等价于原始循环。当i等于0时,原始循环并没有对n进行自增操作,但是新循环却做了。


问:哪个无限循环格式更可取,while(1)还是for(;;)?(p.75)

答:C程序员传统上喜欢for(;;)的高效性;因为早期的编译器经常强制程序在每次执行while循环体时测试条件1。但是, 对于现代编译器来说,在性能上两种无限循环应该没有差别。


问:听说程序员应该永不使用continue语句。这种说法对吗?


答:continue语句的确很少使用。尽管如此,continue语句有时还是非常方便的。假设我们编写的循 环要读入一些输入数据并测试其有效性,如果有效则以某种方法进行处理。如果有许多有效性测试,或者如果它们都很复杂,那么continue语句就非常有用了。循环将类似于下面这样:


image.png


问:goto语句有什么不好?(p.79)


答:goto语句不是天生的魔鬼,只是通常它有更好的替代方式。使用过多goto语句的程序会迅速退化成“垃圾代码”,因为控制可以随意地跳来跳去。垃圾代码是非常难于理解和修改的。

由于goto语句既可以往前跳又可以往后跳,所以使得程序难于阅读。(break语句和 continue语句只是往前跳。)含有goto语句的程序经常要求阅读者来回跳转以理解代码的控制流。goto语句使程序难于修改,因为它可能会使某段代码用于多种不同的目的。例如,对于前面有标号的语句,既可以在执行完其前一条语句后到达,也可以通过多条goto语句中的一条到达。


问:除了说明循环体为空外,空语句还有其他用途吗?(p.82)


答: 非常少。空语句可以放在任何允许放语句的地方,所以有许多潜在的用途。 但在实际中,空语句只有一种别的用途,而且极少使用。

假设需要在复合语句的末尾放置标号。标号不能独立存在,它后面必须有语句。在标号后放置空语句就可以解决这个问题:


image.png

相关文章
|
2月前
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
78 5
|
28天前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
46 6
|
3月前
|
安全 C语言
C语言循环的使用注意点
在C语言中,合理使用循环对于编写高效、安全的代码至关重要。以下是几点建议:确保循环条件正确以避免无限循环;每次迭代时正确更新循环变量;恰当使用`break`和`continue`控制执行流程;注意嵌套循环中的变量作用域;简化循环体内逻辑;根据需求选择合适的循环类型;注意数据类型以避免溢出;保持良好的缩进和注释习惯;减少重复计算以提升性能;确保循环终止条件明确。遵循这些建议,可以提高代码质量和可维护性。
241 88
|
2月前
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
53 6
|
2月前
|
Java 编译器 C语言
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
32 3
|
2月前
|
Serverless C语言
C语言控制语句:分支、循环和转向
C语言控制语句:分支、循环和转向
|
2月前
|
算法 编译器 C语言
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
|
2月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
20 0
|
2月前
|
小程序 C语言
初识C语言:走近循环
初识C语言:走近循环
|
3月前
|
C语言
【C语言基础考研向】08判断语句与循环语句
本文介绍了C语言中的关键编程概念:首先解析了关系表达式与逻辑表达式的优先级及计算过程;接着详细说明了`if-else`语句的使用方法及其多分支和嵌套应用;然后讲解了`while`循环与`for`循环的语法和注意事项;最后介绍了`continue`和`break`语句在控制循环中的作用和示例代码。