前言
我们前面讲解了C语言的分支结构,本文将正式讲解C语言的最后一个结构,循环结构
正文
while语句
C语言提供了三种循环语句(while ,for , do while),while是其中的一种,while语句的结构和if语句很相似
while和if
#include<stdio.h> int main() { if(表达式) 语句; while(表达式) 语句; return 0; }
具体对比
代码一
#include<stdio.h> int main() { if (1) { printf("hh\n");//判断为真,仅执行一次 } return 0; }
代码二
#include<stdio.h> int main() { while (1) { printf("hehe\n");//判断为真,进入循环,因为表达式恒为真,所以该循环成了死循环 } return 0; }
这里的hehe会一直打印
这就是while和if的对比,while是可以实现循环的。
while的执行流程
首先先判断表达式是否为真,如果为假,循环语句直接结束,如果为真,执行循环语句,语句执行完后,再进行判断表达式是否为真
while循环的实践
例 打印1~10的值
int main() { int i = 1; while (i <= 10) { printf("%d ", i); i++; } return 0; }
运行结果
for语句
for循环语句是三种循环语句中用的最多的。
for语句形式如下
for(表达式1; 表达式2; 表达式3) 语句;
表达式1:循环变量的初始化
表达式2:循环条件的判断
表达式3:循环变量的调整
for循环的执行流程如下
首先先选择表达式一,对循环变量进行初始化,再执行表达式二,对循环变量进行判断,,如果表达式二的结果为假,那么循环直接结束;表达式二结果为真,执行语句,语句执行完后再去执行表达式三,对循环变量进行调整,然后再去执行表达式二来判断表达式是否为假,决定循环是否进行
在整个for循环流程中
表达式一只会被执行一次,接下来就是(表达式二 --> 语句 --> 表达式三 --> 表达式二 -->……)循环。
for循环的实践
例 打印1~10的值
int main() { for (int i = 1; i <= 10; i++) { printf("%d ", i); } return 0; }
int main() { int i= 0; for ( i = 1; i <= 10; i++) { printf("%d ", i); } return 0; }//两种方法都可以
运行结果
for和while的对比
while
int main() { int i = 1;//1.初始化 while (i <= 10)//2.判断 { printf("%d ", i); i++;//3.调整 } return 0; }
for
int main() { // 1.初始化 2.判断 3.调整 for (int i = 1; i <= 10; i++) { printf("%d ", i); } return 0; }
while和for都有初始化-->判断-->调整的过程,但是while的三部分是散开的,当代码较多的时候优化会麻烦一点;而for的三部分是集中在一起的,更便于代码的优化。
所以在形式上for循环会更加优良一些。
do while语句
do while循环是三种循环中使用频率最低的
因为它和while、for不一样,while和for是先判断在执行,而do while是先执行在判断是否进行下一次循环
语法如下
do { 语句; }while(表达式);
do while流程如下
先执行语句,执行完语句后再去执行表达式,如果表达式为真,则继续循环;如果为假,循环结束,选择后面的语句
使用do while循环的循环体会至少执行一次,这是do while循环特别的地方
do while循环的实践
例 打印1~10的值
#include<stdio.h> int main() { int i = 1; do { printf("%d ", i); i++; } while (i <= 10); return 0; }
运行结果
break和continue语句
在前面的for、while、do while流程图中,大家都看到了虚线上的break和continue吧,那么它们有什么作用呢?
break
用于永久的终止循环,只要break语句被执行,那么就直接跳出循环,继续往后执行代码
continue
用于跳过本次循环continue后面的代码,continue在for和while循环中使用情况是有所差异的
while循环的break和continue
while的break
int main() { int i = 0; while (i < 10) { if (i == 5)//当i == 5 时进入 { break;//跳出循环 } printf("%d ", i); i++; } return 0; }
因为当 i 等于 5 时,执行 if 语句的 break 语句,就会直接跳出 while循环语句,执行下面的代码
while的continue
int main() { int i = 0; while (i < 10) { if (i == 5) { continue; } printf("%d ", i); i++; } return 0; }
运行结果会是一个死循环
这是为什么呢?
因为 continue语句的作用是跳过本次循环后面的语句,再进行一次循环。 这也就导致了while循环语句经过了continue语句后跳过了调整阶段(i++),但while的表达式 i 一直为5,就进入了死循环
for循环的break和continue
那么for循环的break和continue是怎么样的呢?下面我们一起来看吧
for的break
其实for循环的break和while循环的作用是一样的,都是为了永久的终止循环,不管该循环要执行多少次,一但执行到break语句,就会终止该循环,上代码!
int main() { int i = 0; for(i = 1;i < 10; i++) { if (i == 5) { break; } printf("%d ", i); } return 0; }
运行结果:
所以break的作用就是永久的跳出循环,如果未来我们在某个条件成立而想跳出循环的时候,就可以使用break语句啦~
for的continue
下面我们来看如果把break替换成continue会怎么样
int main() { int i = 0; for(i = 1;i < 10; i++) { if (i == 5) { continue; } printf("%d ", i); } return 0; }
运行结果:
所以在for循环中continue的作用是达成某条件,跳过该循环后的语句,直接到调整部分。
如果未来我们在某个条件成立而不想这次循环后面的语句被执行时,就可以用continue语句啦~
do while循环的break和continue
其实do while的break和continue和while循环的几乎是一模一样的
给大家看代码感受下
int main() { int i = 0; do { printf("%d ", i); i++; } while (i); return 0; }
int main() { int i = 0; do { if (i == 5) { continue; } printf("%d ", i); i++; } while (i); return 0; }
运行结果:
循环的嵌套
循环语句是可以和选择语句一样,进行嵌套
下面我们用学过的while,for,do while循环来做一道例题
例题 打印100~200之间的素数
注:素数⼜称质数,只能被1和本⾝整除的数字。
题目解析
1. 要想打印100~200之间的素数,就需要有100~200之间的数字,这可以用循环来解决
2.假设判断 x 是素数,就需要用2~x-1的数字来试除它,那么这就需要有2~x-1的数字,这也可以用循环来解决
3.判断x,如果x能被2~x-1之间的数字整除,就代表 x 不是素数;反之如果x不能被2~x-1之间的数字整除,就代表 x 是素数,这用什么语句就不用多说了吧 :)
参考代码
int main() { int x = 0; for (x = 100; x <= 200; x++)//产生100~200之间的数 { int y = 0; int flag = 1;//假设x为素数 // < x 就是 <= x-1 for (y = 2; y < x; y++)//产生2~x-1之间的数 { if (x % y == 0) { flag = 0; } } if (flag == 1) { printf("%d ", x); } } return 0; }
运行结果:
结尾
以上就是循环语句的全部知识啦,下一篇文章我会基于分支和循环语句制作一个小游戏,敬请期待
如果文中有问题,欢迎大家指出,我会及时改正!