一、什么是循环?
一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环语句是由循环体及循环的终止条件两部分组成的。
二、循环语句的分类
1.while 循环
1.1 while语句与if语句的区别
while 循环和if 语句非常相似
if (条件) 语句;
//while 语法结构 while (表达式) 循环语句;
请看下面的if语句:
为什么打印呢?
1为真,成功进来打印,但if语句条件成立只执行一次
可是我们生活中有很多例子是:同一件事我们需要完成很多次,那我们怎么做呢?
C语言中给我们引入了:while语句,可以实现循环。
while循环语句如下面所示:
while会一直打印hehe,为什么呢?
原因很简单:
while(1)判断为真,打印hehe,又返回while(1)判断,为真,再打印,再判断,再打印······hehe一直被打印,当然这个例子有点极端,死循环了。
1.2 while语句怎么用
举一个例子:
如何在屏幕上打印1~10
#include<stdio.h> int main() { int n = 1; while (n<=10) { printf("%d ", n); n++; } return 0; }
打印结果如下:
执行过程如下:
n=1,判断1<10,满足条件,进{}里打印1,n++,
n=2,回到while,2<10,满足条件,进{}里打印2,n++
n=3,回到while,3<10,满足条件,{}里打印3,n++
n=4·····
n=11,回到while,11>10,不满足,停止执行
最后总结一下while语句执行的流程
1.3 break在while循环的作用
如果在语句中遇到break是怎么回事呢?
举一个小栗子:
#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呢
运行思路如下:
当n=1,判断1<10,进入while循环,n!=5,所以打印n的值1,n++→n=2
当n=2,又回到判断,2<10,进入while循环,n!=5,break不执行,打印n的值2,n++→n=3
当n=3,又回到判断,3<10,进入while循环,n!=5,break不执行,打印n的值3,n++→n=4
当n=4,又回到判断,4<10,进入while循环n!=5,break不执行,打印n的值4,n++→n=5
当n=5,又回到判断,5<10,进入while循环,n=5,break执行,循环终止
所以,5以及后面的数都不会再进入while循环了
总结:break的作用是(跳出)终止循环,可能后面还有几个循环,但我们不执行了,就此打住
所以:while中的break是用于永久终止循环的
1.4 continue在while循环的作用
把break换成continue我们可以看到,运行的结果依然是1,2,3,4,但区别的是4后面的光标依然在闪烁,我们知道正常程序结束,后面会出现什么按任意键关闭此窗口,但这里只有四个数字,这说明什么,说明代码没有结束,死循环了,它一直再跑。
举例1:
思路如下:
当n=1,2,3,4的时候,都不满足if(n==5)这个条件,所以跳过了continu,到下一步打印,n++,加到n=5时,满足条件,continue执行,后面的步骤不执行了,又回到了if判断,结果判断n=5,又执行continue,略过了打印和n++,又回到判断,代码就这样死循环了
举例2:
如果把n++放到if前面,结果又是什么呢?
#include<stdio.h> int main() { int n = 1; while (n <= 10) { n++; if (n == 5) continue; printf("%d ", n); } return 0; }
思路如下:
n=1→n++→n=2,n!=5,continue不执行,打印2,
n=2→n++→n=3,n!=5,continue不执行,打印3,
n=3→n++→n=4,n!=5,continue不执行,打印4,
n=4→n++→n=5,n=5,continue执行,跳过
后面的代码,回到if判断
n=5→n++→n=6,continue不执行,打印6
······
n=10→n++→n=11,continue不执行,打印11
n=11→不符合判断条件,结束判断
总结:continue的作用是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
2.for 循环
2.1 for 循环的语法
2.2 for循环和while循环的区别
有人会疑惑,while循环已经能解决问题了,为什么还要用for循环呢?这跟while循环有什么区别呢?
举一个例子来说明答案
在屏幕上打印1~10,我们来看while循环和for循环各自是怎么打印的
while循环
int main() { int i = 1;//1.初始化 while (i <= 10)//2.判断 { printf("%d ", i); i++;//3.调整 } return 0; }
for循环
int main() { int i = 0; for (i = 1; i <= 10; i++)//(初始化;判断;调整) { printf("%d ", i); } return 0; }
很明显,两者之间有非常相像的地方
但区别就在于while循环中的初始化,判断,调整是分开的,而在for循环中都整合在了一起,如果要修改某一部分代码的时候,for循环是不是要比while循环更好找呢,而且形式也更加好一些,更加简洁,这就大大提高我们写代码的效率了。
2.3 for循环要注意的地方
当我们这样写,会不会打印一个数字,打印一个hehe呢
int main() { int i = 0; for (i = 1; i <= 10; i++) printf("%d ", i); printf("hehe\n"); return 0; }
结果是不会
我们要注意的是:循环体默认只能控制一条语句,如果想控制多条语句的话,要加上大括号
如下所示:
int main() { int i = 0; for (i = 1; i <= 10; i++) { printf("%d ", i); printf("hehe\n"); } return 0; }
**另一个需要注意的是:**这两个代码代表的意思是一样的,但第二个代码是在c99标准里才支持的写法,不保证所有编译器都支持第二种写法
代码1
//任何一个编译器都会支持的 int main() { for (int i = 0; i < 4; i++) { printf("hehe\n"); } return 0; }
代码2
//c99支持的 int main() { int i = 0; for (i = 0; i < 4; i++) { printf("hehe\n"); } return 0; }
2.4 for语句的循环控制变量的建议
1.不可在for循环体内修改循环变量,防止for循环失去控制
举例子:
int main() { int i = 0; for (i = 1; i <= 10; i++) { if(i==5) continue; printf("%d ", i); i = 5;//在循环体内改变i的值 } return 0; }
像这个代码得出的结果是无限地打印6,感兴趣的同学可以去试着敲一下。
2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法
2.5 一些for循环的变种
变种1:
下面举例子说明:
例子1
int main() { int i = 0; int j = 0; for (i=0; i < 4; i++) { for (j=0; j < 4; j++) { printf("hehe\n"); } } return 0; }
例子2
int main() { int i = 0; int j = 0; for (; i < 4; i++) { for (; j < 4; j++) { printf("hehe\n"); } } return 0; }
可见省略与不省略的结果的差异是非常大的,还是强调不要随便乱省略。
变种2
使用多余一个变量控制循环
int main() { int x, y; for (x = 0, y = 0; x < 2 && y < 5; ++x, y++) { printf("hehe\n"); } return 0; }
3.do…while() 循环
3.1 do 循环的语法
我们依然使用do while循环打印1~10
int main() { int i = 1; do { printf("%d ", i); i++; } while (i <= 10); return 0; }
由此我们可知,用while循环,for循环,do while循环打印1~10都是可以的
3.2 break和continue在do while循环的作用
break
int main() { int i = 1; do { if (i == 5) break; printf("%d ", i); i++; } while (i <= 10); return 0; }
可以看到,依旧是打印了1,2,3,4
continue
int main() { int i = 1; do { if (i == 5) continue; printf("%d ", i); i++; } while (i <= 10); return 0; }
continue打印出来依旧是死循环
以上就是我对循环语句的理解与说明,如有不足的地方,请您指正!您的点赞,评论和收藏都是对我最大的鼓励,感谢!