hello,大家好,今天承接上篇博客,我们继续来讲一讲c语言中的循环语句。
注:文中图片均取自于比特就业课。
3.循环语句
3.1 while循环
我们已经学了if语句,条件满足,语句执行,否则不执行。但是这个语句只会执行一次。但生活中大多的例子是需要我们执行多次,即,同一件事我们需要完成多次。这时候显然if的功能就不太够用了,C语言中引入了while语句,可多次重复执行,达到循环的效果。
3.1.1 while的语法结构
while语句的执行流程
浅浅的解读一下,程序进来,首先判断表达式,此时会有两种结果,一种是表达式为真,一种是表达式为假。若表达式为真,则进入while,执行while中的语句,执行完后,此时可能选择程序break跳出程序,或者continue继续循环,重新回到while的判断语句中进行判断。若判断表达式判断为假,则不进入while循环,直接执行while下面的语句。
例如:在屏幕上打印1-10的数字
#include<stdio.h> int main() { int n = 1; while (n <= 10) { printf("%d ", n); n++; } return 0; }
上面的代码已经帮助我们了解了while的基本语法,那么我们现在学习一下
3.1.2 while中的break和continue
3.1.2.1break
先来看看以下代码:
#include<stdio.h> int main() { int n = 1; while (n <= 10) { if (n == 5) break; printf("%d ", n); n++; } return 0; }这里的输出结果是什么呐?
结果是1 2 3 4
这里就不得不介绍一下break的作用了
在循环中遇到break,直接停止后期所有的循环,直接跳出循环。
所以,while中的break是用于永久终止循环的。
3.1.2.2 continue
代码示例:
#include<stdio.h> int main() { int n = 1; while (n <= 10) { if (n == 5) break; printf("%d ", n); n++; } return 0; }此时会是什么结果呐?
结果是 1 2 3 4 _ (光标一直闪,程序一直不停止。)
为什么会是这样的结果呐,因为continue的作用是终止本次循环,直接跳回到while判断语句。那么此时代码中的n会一直等于5,陷入死循环。
故,continue在while中的作用:continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
3.2 for循环
话不多说直接上干货,直接来看for循环的语法。
3.2.1 语法
其中,
表达式1为初始化部分,用于初始化循环变量。
表达式2为条件判断部分,用于判断循环时候终止。
表达式3为调整部分,用于循环条件的调整。
来一起看个代码示例,还是上面那个示例。
使用for循环,在屏幕上打印1-10的数字。
#include<stdio.h> int main() { int n = 0; for (n = 1; n <= 10; n++) { printf("%d ", n); } return 0; }运行结果依然可以在屏幕上打印1-10的数字。
那么我们此时再来看一下for循环的执行流程图。
(转自比特就业课)
关于for循环,我们也来浅浅的解读一下吧。首先执行表达式1的语句,执行结束后,判断表达式2,那么到了判断这一步也就意味着有两种不同的结果,一种是判断结果为真,一种是判断结果为假。若此时表达式2判断结果为真,则进入循环,执行循环语句,执行完循环语句,要么continue继续进入表达式3,要么break跳出循环,继续表达式3,调整数值,再进行表达式2的判断,再进入循环,……,一直下去,直到break跳出循环,或者表达式2判断结果为假,跳出循环。若一开始表达式2的判断结果就为假,则不进入循环。
现在我们来比较一下while循环和for循环。
可以看出while循环也存在三个必要条件,只是因为风格的原因使得三个部分偏离太远了,导致了查改信息不够集中和方便,所以,for循环的风格更胜一筹,for循环的使用频率也较高一点。
3.2.2 for循环中的break和continue
3.2.2.1 break
观察以下代码:
#include<stdio.h> int main() { int n = 0; for (n = 1; n <= 10; n++) { if (n == 5) break; printf("%d ", n); } return 0; }运行结果依然只是打印 1 2 3 4。
在for循环中break的作用依然是直接终止循环。
3.2.2.2 continue
#include<stdio.h> int main() { int n = 0; for (n = 1; n <= 10; n++) { if (n == 5) continue; printf("%d ", n); } return 0; }大家可以思考一下,此时程序运行的结果是什么呐?
程序运行的结果为 1 2 3 4 6 7 8 9 10,唯独没有数字5。
为什么会这样呐?
因为当n=5时满足if的条件,进入if,执行continue,continue的作用是终止本次循环,故程序直接跳到表达式3(调整表达式),故不会打印数字5。
3.2.3 for循环中的循环控制变量
在for循环使用过程中,一般不可在for循环体内修改循环变量,防止for循环失去控制。
建议for语句的循环控制变量的取值采用“前闭后开区间”写法。如:
3.2.4 一些for循环的变种
代码1
#include<stdio.h> int main() { for (;;) { printf("hehe\n"); } return 0; }for循环中的初始化部分,判断部分,调整部分都是可以省略的,但是不建议初学时省略。
代码2
#include<stdio.h> int main() { int i = 0; int j = 0; for (i = 1; i < 10; i++) { for (j = 1; j < 10; j++) printf("hehe\n"); } return 0; }for循环的嵌套使用。
代码3
#include<stdio.h> int main() { int i = 0; int j = 0; for (; i < 10; i++) { for (; j < 10; j++) printf("hehe\n"); } return 0; }省略初始化部分
大家可以思考一下代码3和代码2的运行结果相同吗?
显然是不同的,代码3打印的hehe比代码2少很多,因为i=0进入循环之后,j的数值会随着循环增加到10,但是i=0循环结束,当i=1时,大家想想此时的j等于多少,因为j没有初始化的原因j变成了10就一直会是10,不会再变回0,所以j的for循环判断部分一直为假,也就是不会进入j的循环了。所以打印的hehe就会少很多。
代码4
#include<stdio.h> int main() { int x, y; for (x = 0, y = 0; x < 2 && y < 5; x++, y++) { printf("hehe\n"); } return 0; }使用不止一个变量来控制循环。
到此,关于for循环的所有知识点我们都学习的差不多了。那我们便进入下一个循环语句的学习。
3.3 do....while循环
3.3.1语法结构
3.3.2 执行流程
do...while语句,先do,就是先执行语句,执行完了再到表达式中去判断。
3.3.3 do语句的特点
循环至少执行一次,使用的场景有限,所以不是经常使用。
3.3.4 do...while语句中的break和continue
3.3.4.1 break
#include<stdio.h> int main() { int i = 10; do { if (5 == i) break; printf("%d\n",i); } while (i < 10); return 0; }
3.3.4.2 continue
#include<stdio.h> int main() { int i = 10; do { if (5 == i) continue; printf("%d\n",i); } while (i < 10); return 0; }
4.goto语句
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
例如:一次跳出两层或多层代码
跳出多层循环,仅仅只使用一个break是达不到效果的,break只能只能从一层循环跳出到上一层。
适合goto语言的从场景如下:
至此,我们就学习完了循环语句,外加一个goto语句。
大家都有所收获嘛,哈哈,再过两天就要放国庆了,呜呜呜,可恶的异地,不能去见女朋友,那就只能猛猛学编程了,冲冲冲。
提前祝读者朋友们国庆快乐哦!!!









&spm=1001.2101.3001.5002&articleId=142565828&d=1&t=3&u=4cd3860febac4aec821d0bcbd1865124)
1261

被折叠的 条评论
为什么被折叠?



