【c语言】三步带你秒懂循环语句

希望每一个想开始而又不敢开始的人,对任何知识都不要抱有恐惧,觉得它很神秘,那样不好,其实知识就在那里一动不动,一层薄纱,去掀开它,你将会看见新的世界。

🌈前言

其实c语言是一门结构化的程序设计语言
c语言支持三种结构:

  1. 顺序结构
  2. 选择结构
  3. 循环结构

本文详细介绍循环结构。

循环语句(循环结构)

前面我们学习了 if语句,但在满足条件的情况下,整个if语句会执行一次,但在生活中很多的现实例子是:同一件事情我们需要很多完成很多次。
在c语言中也给我们引入了循环语句

c语言支持三个类型的循环执行语句,分别如下:

  1. while循环
  2. for循环
  3. do…while循环

我们依次讲解

1. while循环

1.1 while循环的基本语法

语法结构:

while (表达式)
	循环语句;

结构详解:
当满足表达式时,则进入循环语句,直到不满足表达式时,循环结束。

1.1.1 while语句的执行流程

while语句工作原理流程图

注:break和continue下1.2 详讲

代码示例:

//依次打印1~10的整数,且每个整数之间以空格隔开
int main()
{
	int i = 1;//初始化
	while (i <= 10)//判断
	{
		printf("%d ", i);
		i++;//调整
	}//当i=11的时候,i=11 <= 10,表达式不成立,为假
	//即循环结束。
	return 0;
}

1.2 while循环的break和continue

1.2.1 break

代码示例:

#include <stdio.h>
int main()
{
	int i = 0;//初始化
	while (i < 10)(判断)
	{
		i++;//调整
		if (5 == i)//判断
			break;//跳出循环
		printf("%d ", i);
	}//打印结果是1,2,3,4
	return 0;
}

代码运行过程详解:

  1. i = 0 时,满足条件进入循环,i++得到1;
  2. 进入if语句的判断 ,5 == 1为假,没有进入if 语句执行break;
  3. 打印 i 即 1 ;
  4. 再回头继续while循环判断,直到打印i = 4时
  5. 进入循环 i++得到 5 ;
  6. 进入if语句的判断,5 == 5为真,进入if语句执行break,直接跳出循环,循环就此终止,因此打印至 i = 4 就此终止;
  7. 程序结束。

结论:

当运行至关键字break时,程序就停止后期的所有循环,直接终止循环,执行后面的程序(结合流程图)

1.2.2 continue

代码示例:

int main()
{
	int i = 0;//初始化
	while (i < 10)//判断
	{	
		i++;//调整
		if (5 == i)//判断
			continue;//跳过后面部分的语句,重新开始循环
		printf("%d ", i);
	}//打印结果为:1 2 3 4 6 7 8 9 10
	return 0;
}

代码运行过程详解:

  1. i = 0 时,满足条件进入循环,i++得到1;
  2. 进入if语句的判断 ,5 == 1为假,没有进入if 语句执行continue;
  3. 打印 i 即 1 ;
  4. 再回头继续while循环判断,直到打印i = 4时
  5. 进入循环 i++得到 5 ;
  6. 进入if语句的判断,5 == 5为真,进入if语句执行continue,后面的printf不执行;
  7. 重新再回到while语句进行判断,5 依旧满足条件进入循环,i++ 得到6
  8. 进入if 语句判断,5 == 6为假,不进入if 语句,
  9. 依次循环,直到打印i = 10时,无法进入循环,循环终止;
  10. 程序结束。

结论:

程序运行至continue时,是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

1.2.3 break 和 continue的区别

看了上述相似情境下的break和continue的作用机理,应该有了一定的了解。

区别:

  • break是直接跳出循环,是永久性的终止;
  • continue是终止本次循环,跳过本次循环的后续语句,继续下一次循环,是阶段性的停止。

2. for循环

2.1 for语句

语法结构:

for(表达式1;表达式2;表达式3)
	循环语句;

三个表达式的功能:

  • 表达式1:初始化,用于循环初始化变量的;
  • 表达式2:判断,用于判断循环什么时候终止的 ;
  • 表达式3:调整,用于循环条件的调整。
2.1.1 for语句的执行流程

for语句执行流程图

代码示例:

//打印1—10的数字
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}//结合流程图看,打印至10的时候,i++
	//i = 11 <= 10为假; 
	return 0;
}

2.2 for 语句与 while语句对比

2.2.1 基础语法

代码示例:
让两种代码实现相同的功能

//while循环
int i = 0;
i = 1//初始化部分
while (i <= 10)//判断部分
{
	printf("hehe\n");
	i++;//调整部分
}
//for循环
for(i = 1;i <= 10;i++ )
{
	printf("hehe\n")	
}

结论:

可以发现在while循环种依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,查找修改就不够集中和方便。因此for循环的风格更好;for循环的使用频率也最高。

2.2.2 for循环中的break和continue

代码示例:

#include <stdio.h>
int main ()
{
	int i = 0;
	for(i = 1; i <= 10; i++);
	{
		if (i == 5)
			break ;
		printf("%d ",i);
	}//1 2 3 4
	return 0;
}

代码运行过程详解:

  1. 进入循环,i = 1;
  2. 判断i <= 10为真,进入循环,再次判断 i =1 ==5为假,不进入if循环
  3. 此时打印i =1 ,然后i++,再进入循环
  4. 当打印至i = 4时,i++得到5,再进入循环判断,i = 5 == 5为真,进入if语句,break直接跳出 循环;
  5. 程序结束

反思:

在while循环和for循环中,break都是终止循环

#include <stdio.h>
int main ()
{
	int i = 0;
	for(i = 1; i <= 10; i++);
	{
		if (i == 5)
			continue ;
		printf("%d ",i);
	}//1 2 3 4 6 7 8 9 10
	return 0;
}

代码运行过程详解:

  1. 进入循环,i = 1;
  2. 判断i <= 10为真,进入循环,再次判断 i =1 ==5为假,不进入if循环;
    3. 此时打印i =1 ,然后i++,再进入循环;
  3. 当打印至i = 4时,i++得到5,再进入循环判断,i = 5 == 5,为真,进入if语句,continue直接跳过本次循环,也就是后续的打印函数;导致i =5 没有打出来、i++得到6再进入判断入口;直到打印i = 10时,循环结束 ;
  4. 程序结束。

反思:

此时如果是while循环,i++在printf后面,continue会直接跳过调整部分(也就是我们举例的i++);而for循环则依旧会执行调整部分。(可结合流程图)

2.3 for语句的循环控制变量

代码示例:

int i = 0;
//前闭后开的写法
for(i = 1; i < 10; i++)
{}
//两边都是闭区间
for(i = 1; i <= 9; i++)
{}
//两种循环的效果是完全一样的,
//但都是循环10次,因此使用前闭后开,
//代码的展示效果更好,更加清晰明了

建议:

  1. 不可在for循环体内修改循环变量,防止for循环失去控制;当然,在思路清晰并保证循环可终止的情况下,可以修改变量的。
  2. 建议for语句的循环控制变量的取值范围采用”前闭后开区间的写法。

2.4 for循环的表达式省略

for循环的初始化部分,判断部分调整部分都是可以省略的。

代码示例:

#include <stdio.h>
int main()
{
 	//代码1
 	for(;;)
 	{
		 printf("hehe\n");
 	}//代码运行会进入死循环一直打印hehe
 }

当for循环的所有部分都省略时,代码会进入死循环,且当省略判断部分时,则判断恒为真。所以不要轻易省略

我们先看未省略初始化的情况:
代码示例:

//未省略初始化
int main()
{
	int i = 0;
	int j = 0;
	for (i=0; i < 3; i++)
	{
		for (j=0; j < 3; j++)
		{
			printf("hehe\n");
		}
	} //里三遍,外三遍,外三遍的每一遍里面都三遍,因此打印9个hehe
	return 0;
}

再来看看省略初始化的情况
代码示例:

//省略初始化
int main()
{
	int i = 0;
	int j = 0;
	for (; i < 3; i++)
	{
		for (; j < 3; j++)
		{
			printf("hehe\n");
		}
	}//只打印三个hehe
	return 0;
}

代码运行过程详解:

  1. 当i = 0时,进入外for循环,再进入内for循环,打印至 j =3;
  2. 内循环结束,i++得1,再进入外循环,到内循环时,j = 3,并没有初始化,i = 3<3为假无法进入内循环;
  3. 循环至i = 3时;还是直接跳过内循环,外循环也结束,共打印3个hehe。

因此for循环虽然支持省略初始化、调整和判断部分,但在使用时也应该注意不能盲目省略

3.do…while()循环

3.1 do…while语句

语法结构:

do
	循环语句;
while(表达式);
3.1.1 do…while执行流程

do…while语句执行流程

3.2 do…while循环特点

代码示例:

#include <stdio.h>
int main ()
{
	int i = 1;
	do
	{
		printf("%d ",i);
		i++;
	}while(i <= 10);//打印 10次hehe
	return 0;
}

do…while循环至少会执行一次,因为是先执行后再进行判断;使用场景有限,所以不是经常使用。

3.3 do…while 循环中的 break和 continue

代码示例:

int main()
{
	int i = 0;
	do
	{
		i++;
		if (i == 5)
			break;
		printf("%d ", i);
	} while (i<10);
	return 0;
}//1 2 3 4

代码示例:

int main()
{
	int i = 0;
	do
	{
		i++;
		if (i == 5)
			continue;
		printf("%d ", i);
	} while (i<10);
	return 0;
}//打印1 2 3 4 6 7 8 9 10
//同while一样没有打印5

结论:

  • break 在 do…while语句中同for和while中效果一样
  • continue 在 do…while语句中会忽略本次循环的后续语句,但while的判断部分依旧会执行。

文章结束啦!咱们下期见😃

如有纰漏还请各位斧正,如果对你有帮助的话,创作不易希望能留下 ”点赞“、”关注“、”评论”三连支持一下博主!🙈
如果有什么疑问或不同的见解,欢迎评论区留言嗷👀,大家一起学习,共同进步! 😉

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值