我们之前已经讲过了C语言中的三种结构的顺序结构和分支结构,今天我们再来介绍C语言中的循环结构。分别是while、for和do while三种循环。
首先while语句的语法结构和if语句非常相似。
-
while循环
-
if和while的对比
if(表达式)
语句;
while(表达式)
语句;
//使用if的代码
#include <stdio.h>
int main()
{
if(1)
printf("hehe\n");
return 0;
}
//使用while循环的代码
#include <stdio.h>
int main()
{
while(1);
printf("hehe\n");
return 0;
}
我们之前讲过,if()中的表达式成立,即为真。便会执行下面的语句,而上面代码中if(1)便是为真,执行下面的代码一次
而while()中也是一个表达式,和if同样的用法,而不同的是,if执行一次,而while会一直执行。而什么时候退出呢?首先是在条件不成立的情况下退出。
我们今天慢慢讲解。
我们先来一个例子:
在屏幕上打印1~100的值
#include <stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
printf("%d ",i);
i = i + 1;
}
return 0;
}
如上面的代码所示,i = 1,while后的表达式是i<=10,成立是显而易见的,所以执行下面的语句,先输出1,然后将i+1的值赋给i,即自己给自己+1,这个时候要注意,我们要再回到while(i<=10)这里再次判断,这时候,i=2,2<=10成立继续执行,输出2,然后再给自己+1,以此类推……直到11<=10不成立退出循环。
最后的结果便是:
1 2 3 4 5 6 7 8 9 10
然后是今天的第二个内容,for循环,也是我们最常用的循环语句。
-
for循环
-
语法形式
for(表达式1;表达式2;表达式3)
语句;
表达式1:用于循环变量的初始化
表达式2:用于循环结束条件的判断
表达式3:用于循环变量的调整
在使用时,这三个表达式都是可以省略的,但是省略后,可能会出现我们无法预料到的结果,所以,最好不要省略。
我们用for循环来输出刚刚的1~10的值
#include <stdio.h>
int main()
{
int i = 0;
for(i = 1;i <= 10; i++)
{
printf("%d ",i);
}
return 0;
}
上面的代码中,一开始i=0,但是在for()的第一个表达式又重新赋值了i=1,所以这里用到了C语言的局部变量。
如果有需要,可以移步我们之前的内容。
https://mp.csdn.net/mp_blog/creation/editor/133976967
这时i=1,然后第二个表达式是循环语句是否可以结束的判断,i<=10,即1<=10成立,所以先去执行下面的语句,注意,先运行for的前两个表达式,第三个表达式是在for语句下面的语句当前执行结束后,再执行。然后输出1,最后i++对自己进行加+1,这里无论是++i还是i++都可以直接加1,因为这里就是一条语句。第二次循环就不再执行第一个表达式了,直接执行第二个表达式,判断是否符号运行的条件,2<=10成立,所以继续执行,输出2,然后i++,i变成3,以此类推……直到11<=10不成立退出循环。
最后结果为:
1 2 3 4 5 6 7 8 9 10
然后我们再来对for循环的执行顺序做个总结:
- 进入for循环后,第一个表达式->第二个表达式->for下面的执行语句->第三个表达式->第二个表达式->for下面的执行语句->第三个表达式->第二个表达式……直到第二个表达式不成立。
- 第一个表达式只执行一次,也就是刚进入for循环时执行的一次。
- 第三个表达式只有在本次的执行语句运行结束后执行。
这时候,或许会有人问,while循环和for循环有什么区别呢?
我们可以来做个对比:
//while循环
#include <stdio.h>
int main()
{
int i = 1;//1.初始化
while(i <= 10)//2.判断
{
printf("%d ",i);
i = i + 1;//3.调整
}
return 0;
}
//for循环
#include <stdio.h>
int main()
{
int i = 0;
for(i = 1;i <= 10; i++)//1.初始化;2.判断;3.调整
{
printf("%d ",i);
}
return 0;
}
如上所示,我们可以看到for循环和while循环在实现的过程中都有初始化、判断和调整这三个部分。但是for循环的三个部分非常集中,便于代码的维护,而如果代码较多的时候,while循环的三个部分就比较分散,所以从形式上for循环更优一些。
就比如说,老师平时讲课时的重点,我们会把重点都集中在一个本子上,一般不会在这个本子上写些重点,在另一个本子上写些重点,当重点过多时,重点太过分散,别人都已经复习完了重点,我们才刚找到重点,这样不利于我们的保存和查找。
我们刚刚介绍的都是先判断是否可以运行,然后再运行的,我们现在再来说一个特例:
先执行,后判断的do while循环
-
do while循环
-
语法形式
do
语句;
while(表达式);
while和for都是先判断是否可以执行,然后再执行,可以执行就一个个的执行语句,如果不可以就跳出循环;而do while循环则是先执行所有的语句,然后再判断是否可以执行,如果可以执行再进行下一次的执行,不可以就跳出循环。
就比如说:我们小时候看到桌子上有好吃的,会先问一下可不可以吃,如果可以吃,多吃几个,直到爸妈说不能吃了;如果不可以吃,掉头就走。这便是while和for的执行理念。
而如果我们先吃一个,再问爸妈可不可以吃,如果可以吃,继续吃,直到说不能吃了;如果说不可以吃,掉头就走。这便是do while的执行理念。无论可不可以吃,也吃了一个。
最大的区别便是:do while循环无论是否符合运行条件都至少执行一次。而while和for只要不符合条件,就不能执行。
我们再用do while来打印刚刚的内容
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ",i);
i = i + 1;
}while(i<=10);
return 0;
}
如上所示:先对i初始化为1,然后进入do while开始循环。先输出1 ,然后对i自己进行+1,最后,判断i<=10,即2<=10,成立,则继续执行……以此类推,直到i=11时,11<=10不成立,退出循环。
一般do while使用在循环体至少一次的场景下,所以较少一些。我们用的更多的循环是for循环。
今天的内容就到这里就结束了,如果有什么疑问,可以在评论区留言或者私信。欢迎各位来指正错误。