第六章 循环《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

相关文章
|
人工智能 Java 程序员
一文彻底搞清楚C语言的循环语句
本文介绍了C语言中的三种循环语句:`while`、`do-while`和`for`,并详细解释了它们的语法格式、执行流程及应用场景。此外,还讲解了循环控制语句`break`和`continue`的使用方法。希望这些内容能帮助你在编程道路上不断进步,共同成长!
1347 0
一文彻底搞清楚C语言的循环语句
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
710 16
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
377 18
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
602 3
|
存储 算法 安全
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
539 2
|
存储 编译器 C语言
【C语言程序设计——函数】回文数判定(头歌实践教学平台习题)【合集】
算术运算于 C 语言仿若精密 “齿轮组”,驱动着数值处理流程。编写函数求区间[100,500]中所有的回文数,要求每行打印10个数。根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。如果操作数是浮点数,在 C 语言中是不允许直接进行。的结果是 -1,因为 -7 除以 3 商为 -2,余数为 -1;注意:每一个数据输出格式为 printf("%4d", i);的结果是 1,因为 7 除以 -3 商为 -2,余数为 1。取余运算要求两个操作数必须是整数类型,包括。开始你的任务吧,祝你成功!
352 1
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
784 23
|
6月前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
1172 0
|
8月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
381 15
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
526 1
一文彻底搞清楚C语言的函数