讲完分支语句,紧接着就来讲循环语句啦!
在C语言中,循环语句有do while语句、while语句以及for语句。
接下来我将为大家一一介绍这几个语句的特点及用法。
目录
3.2 do while循环中的break和continue
1.while语句
1.1 while语句的语法结构
while (表达式)
{
循环语句;
}
当表达式结果为真时,程序就进入while循环,执行循环语句,然后再次判断表达式,结果为真则再次进入循环,直到表达式结果为假,程序跳出while循环,循环结束。
这里我们可以举个简单的例子:实现1~10的打印;代码如下:
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i = i + 1;//i++;
}
return 0;
}
在这段代码中,我们定义了一个变量名为i的整型变量,并初始化为1。进入while循环的条件是i<=10,此时i = 1,进入循环,首先在屏幕上打印1,然后进行自加,即i在本身的基础上加1,再把加完后的值赋给自己,此时i = 2,再次判断是否满足i <= 10,是则进入循环,以此类推,当i = 10的时候,进入循环打印10,再加1,i的值变为11,不满足i <= 10,无法进入循环,循环结束。
我们来看一下运行结果:
成功打印1~10!
1.2 while语句中的break和continue
在之前的分支语句中,我们已经学习了break语句。回顾一下,break语句在switch语句中的作用是实现分支,本质上就是跳出switch语句,所以我们可以大胆猜测一下,break语句在while循环中,有跳出循环的作用。
现在我们就用代码来验证一下我们的猜测,还是在刚刚打印1~10的代码基础上,我们让i = 6的时候,停止打印,即跳出循环,代码实现如下:
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 6)
break;
printf("%d ", i);
i++;//i = i + 1;
}
printf("\n");
return 0;
}
如果i = 6的时候就停止打印,跳出循环的话,那么屏幕上应该只打印了1~5,我们运行一下看看结果如何:
结果证明,我们的猜测是对的,在while语句中执行break语句,会直接跳出整个循环。
现在我们引入一个新的语句continue,我们直接将上述代码中的break换成continue,看看运行结果和break语句有什么不同。
具体代码如下:
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 6)
continue;
printf("%d ", i);
i++;//i = i + 1;
}
printf("\n");
return 0;
}
运行结果:
我们可以看到,屏幕只打印到5,后面的光标一直在闪烁,说明程序并没有结束,而是一直在运行中,这是为什么呢?
事实上,continue语句的作用是结束本次循环,即执行continue语句之后,跳过continue语句后的循环语句,直接回到判断进入循环的表达式那里,再次判断是否进入循环。
让我们带着这个理解,再次仔细阅读一下这段代码,当i = 6时,进入循环,满足if语句的条件,执行continue语句,跳过后面的打印以及自加,再次进入循环,此时i 的值还是为6,再次进入循环,再次执行continue语句,陷入一个死循环,这也就解释了为什么会出现只打印到5且程序还没有结束运行的现象。
总结一下:
1.break语句在while循环中的作用是直接终止整个循环;
2.continue语句在while循环中的作用是结束本次循环,不执行continue后的语句,跳转到while语句的判断部分,再次判断是否进入循环。
2.for循环
看到这个我们不禁会疑惑,既然有while循环了,这for循环又和while循环有什么差异呢?我们先来学习一下for循环的语法,关于这两个循环语句的差异,学习过程中我们再提及。
2.1 for循环的语法结构
for (表达式1; 表达式2; 表达式3)
{
语句;
}
表达式1是初始化部分,用来初始化循环变量;
表达式2是条件判断部分,用来判断是否进入循环;
表达式3是末尾循环体,用于调整循环条件。
{}内的语句是中间循环体,也是我们要循环执行的语句。
听起来好像有点复杂,没关系,我们直接用实例来演示一遍,同样还是和while循环一样,用for循环在屏幕上打印1~10,代码实现如下:
#include<stdio.h>
int main()
{
int i = 1;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
printf("\n");
return 0;
}
运行结果如下:
我们一起来阅读一下这段代码,当i = 1时,满足i <=10的条件,进入循环,执行下面的语句(中间循环体),即在屏幕上打印1,然后就回到上面执行末尾循体(i++),也就是自加,此时i=2,满足i<=10的条件,再次进入循环,如此反复下去,当i = 10时,在屏幕上打印10之后,再执行末尾循环体,进行自加,此时i = 11,不满足i <=10的条件,循环结束。
逻辑上和while循环是没有什么差异的,那这两种语句的差别在哪呢?我们将上面的while循环实现打印1~10的实例代码拿下来同for循环比较一下:
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i = i + 1;//i++;
}
return 0;
}
int main()
{
int i = 1;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
我们可以发现,在while循环中,也存在着进行循环的三个必要条件,但是彼此之间比较分散,for循环的语法风格则显得相对更为集中,方便阅读和后期修改,从这一点上来看,for循环更具优势,也因此被更多地使用。
2.2 for循环中的break和continue
事实上,break和continue在for循环中的作用和while循环差不多,但还是存在一些差异的,我们通过代码来演示一下。同样,还是加入一个判断,当i = 6时,我们就跳出循环,代码如下:
#include<stdio.h>
int main()
{
int i = 1;
for (i = 1; i <= 10; i++)
{
if (i == 6)
break;
printf("%d ", i);
}
printf("\n");
return 0;
}
如果我们的思路没问题的话,那么屏幕应该只打印1~5,然后就终止循环,程序运行结束。
我们来看一下运行结果:
可以看到,运行结果和我们预料的一样,并且和while循环中使用break的效果也是一样的,现在我们将break换成continue,看看运行结果又会是怎样?
#include<stdio.h>
int main()
{
int i = 1;
for (i = 1; i <= 10; i++)
{
if (i == 6)
continue;
printf("%d ", i);
}
printf("\n");
return 0;
}
运行结果:
我们发现,换成continue后,运行结果和while循环使用continue的结果不一样了!
while循环中使用continue的运行结果是,屏幕上打印1到5,然后就陷入了死循环,即不打印也不结束运行,而for循环则是不打印出6,跳过去继续执行后面的语句,这是为什么呢?
我们来阅读一下这段代码:
#include<stdio.h>
int main()
{
int i = 1;
for (i = 1; i <= 10; i++)// 2.执行continue后,程序来到了这里执行了i++,此时i == 7
{
if (i == 6)// 3.此时i == 7,不满足i == 6,不执行continue语句,直接打印7
continue;// 1.当i = 6时,执行continue,跳过下面的printf语句,返回去执行末尾循环体
printf("%d ", i);
}
printf("\n");
return 0;
}
(看的时候注意注释前面标注的顺序哦,是先从1看到3!)
我们不难看出,在while循环中,执行continue的时候把自加这一语句也给跳过了,而for循环并没有,这就是为什么for循环能继续打印下去,而while循环就被在那陷入了死循环。
for循环还可以嵌套使用,下一篇文章会讲到如何用for循环嵌套打印九九乘法表,敬请期待哦~
2.3 for循环变量的书写
一般不要在for循环体内修改循环控制变量,这样很容易让for循环失去控制,另外,对for循环体内的循环控制变量一般采取前闭后开的写法,为什么这么要求呢,我们可以通过代码来比较一下。
#include<stdio.h>
int main()
{
int i = 0;
//前闭后开写法
for (i = 0; i <10; i++)
{
printf("%d", i);
}
return 0;
}
//这里仅作演示,一个程序是不能出现两个main函数的。
int main()
{
int i = 0;
//两边都是闭区间
for (i = 0; i <= 9; i++)
{
printf("%d", i);
}
return 0;
}
3. do while循环
3.1 do while语句的语法结构
do
{
循环语句;
} while (表达式);
我们用实例来演示一下,同样,还是实现1~10的打印。
#include<stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
} while (i<=10);
return 0;
}
运行结果:
3.2 do while循环中的break和continue
和前面两个语句一样,在原先打印1~10的需求基础上,我们让程序在i == 6的时候执行break和continue,看一下运行结果如何。
代码如下:
#include<stdio.h>
int main()
{
int i = 1;
do
{
if (i == 6)
break;
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
运行结果:
可以看到在do while语句中,break语句的作用也是终止循环,现在我们将break换成continue,看一下continue的效果又是怎样的呢?
和while循环一样,在执行continue之后,do while循环就陷入了死循环,其实我们也可以通过阅读代码推断出来continue在do while循环中的作用,代码如下:
#include<stdio.h>
int main()
{
int i = 1;
do
{
if (i == 6)//当i == 6时,执行continue;
continue;//此处执行continue语句后,后面的语句都被跳过,再次到判断循环入口处
printf("%d ", i);//跳过,不打印6。
i++;//跳过,不执行自加,此时i的值还是6。
} while (i <= 10);//再次判断进入循环,i ==6,进入循环,又到if语句那执行continue
return 0;
}
3.3 do while语句的特点
可以看到,do while循环条件判断是在循环体末端,因此do while循环会在条件判断前执行一次循环体内的语句,因此do while循环有一个特点,就是循环至少执行一次,这就导致do while循环的使用场景非常有限,因此一般不经常使用。
关于C语言的循环语句(循环结构)就讲到这里啦,这些内容都是一些比较基础的知识,因为初衷也是为初学者能够更好地上手C语言而写的这些博客。实在看不懂的话可以在评论区留下问题哦,一定有问必答!
下期会给大家介绍一下如何实现猜数字这个小游戏,以及一个简单的算法:二分查找。
另外我会再补充一些实例来巩固一下之前所学的知识,还是不定期更新哦,敬请期待。
如有错误,还请大佬们及时指出(salute)
如果觉得这篇文章对你有帮助的话,麻烦动动小手为我点个赞哦。
你们的喜欢就是我创作的动力oVo