C语言——循环语句

 讲完分支语句,紧接着就来讲循环语句啦!

在C语言中,循环语句有do while语句、while语句以及for语句。

接下来我将为大家一一介绍这几个语句的特点及用法。

目录

1.while语句

1.1 while语句的语法结构

1.2 while语句中的break和continue

2.for循环

2.1 for循环的语法结构

2.2 for循环中的break和continue

2.3 for循环变量的书写

3. do while循环

3.1 do while语句的语法结构

 3.2 do while循环中的break和continue

 3.3 do while语句的特点


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code菜只因

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值