for循环

本文详细解析了for循环的结构,包括初始化、条件判断和调整表达式,并探讨了for循环与while循环的区别,以及for循环中的break和continue特性。还介绍了for循环的嵌套和不同表达式形式,以及一个面试题实例分析。
摘要由CSDN通过智能技术生成

语法形式

for循环的形式为

for (初始化表达式; 条件表达式; 执行调整表达式)
{
	循环体;
}

前面我们已经说过while循环,已经很好了,为什么还要有for循环呢?我们先来看这样一段代码:

#include<stdio.h>

int main()
{
	int i = 1; //1.初始化
	while (i <= 10) //2.条件判断
	{
		printf("%d ", i);
		i++; //3.调整
	}

	return 0;
}

仍然是打印1~10的数字,我们发现while循环的初始化、条件判断以及调整三部分是分开的。如果代码比较繁琐时,可想而知,这三部分必定相距甚远,使得后续修改要分别找到三个地方将它修改,不够方便,所以,for循环更胜一筹,我们可以来看一下:

#include<stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
		printf("%d ", i);

	return 0;
}

我们对比了while循环和for循环,在程序中,for循环的使用频率也是最高的。
其次,break和continue在for循环中与while中意义一样,但是又有一点差异,我们看for循环中的continue:

#include<stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}

	return 0;
}

我们发现这段代码的结果是1~10之间没有5。按我们理解使用while循环应该是这样:

#include<stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i++;
	}

	return 0;
}

但是我们发现使用while循环的结果是1 2 3 4。对于while循环来说,遇到continue不执行循环内continue后面的代码,自然i++也就不会被执行,对于这段代码来说是跳过了输出和i++两行代码,重新回到循环开始。而对于for循环来说,i++没有被跳过,因为它不在循环体内,画个图说一下for循环的流程:
在这里插入图片描述
简单说就是在while循环中continue会将调整表达式跳过,而在for循环中不会,因为它不在循环体内。

表达式

for 循环中的任何表达式都可以省略,但是分号必须保留
省略示例:

#include<stdio.h>

int main()
{
	for (; ; )
	{
		printf("hello\n");
	}
	return 0;
}

初始化表达式

初始化表达式是左括号后紧接着的表达式,可以在for循环外面进行初始化:

	int i = 1;
	for (; i <= 10; i++)
	{

	}

也可以把初始化的信息在表达式内进行赋值:

	for (int i = 1; i <= 10; i++)
	{

	}

两种形式都可以,只是代码规范的问题,不在本文进行讨论。
建议:不要在for循环内修改循环变量,防止for循环失去控制建议for循环中的变量取值采用前闭后开区间的写法,如下形式:

	for (int i = 0; i < 10; i++)
	{

	}

条件判断表达式

条件判断表达式是两个分号之间的表达式,如果省略,则表示没有结束的条件,循环会一直执行下去,造成死循环:

	for (int i = 0; ; i++) //没有条件表达式,造成死循环
	{

	}

调整表达式

执行调整表达式是右括号前紧挨着的表达式,也是可以省略的,不过可以像while循环一样将执行调整表达式放到循环体内:

	for (int i = 0; i < 10; ) //没有执行调整表达式,将它放在循环体内
	{
		i++;
	}

嵌套

for循环是可以嵌套的

// 嵌套for循环
#include<stdio.h>

int main()
{
	for (int i = 0; i < 10; i++) //i循环
	{
		for (int j = 0; j < 10; j++) //j循环
		{
			printf("hello\n");
		}
	}

	return 0;
}

这段代码执行后会输出100个hello。
简单分析一下:首先进入到 i 循环,i=0时,j 循环 10 次跳出,i++使得 i 变为1,再次 j 循环10次跳出,i++使得 i 变为2,继续 j 循环10次跳出……直到 i 不小于10时,跳出整个循环。
我们再来看这么一段代码:

#include<stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	for (; i < 10; i++)
	{
		for (; j < 10; j++)
		{
			printf("hello\n");
		}
	}
	return 0;
}

我省略了两个for循环的初始化部分,结果并不是输出100个hello,而是10个。
简单分析一下:首先进入到外层循环,满足小于10的条件,进入到内层循环,循环10次,输出10次hello,这时候 j 为10,回到外层循环,i 变为1,仍满足小于10的条件,进入内层循环,但是这里省略了初始化部分,j 不再是从0开始循环,而是从上一次循环结束的10开始,不满足小于10的条件,直接跳过内层循环,不会执行 j 循环输出hello,再回到外层循环,i 变为2……直到 i 不满足小于10的条件跳出整个循环。
另外,for循环表达式可以使用多个变量来控制整个循环,比如:

	for (i = 0, j = 0; i < 5 && j < 10; i++, j++)

一道面试题

// 循环多少次
#include<stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	for (i = 0, j = 0; j = 0; i++, j++)
	{
		j++;
	}
	return 0;
}

问循环多少次?
分析:我们知道在这段代码中 j=0 是 for 循环的条件表达式,当满足这个条件时,也就是条件为真时,进入到循环。j=0 是一个赋值表达式,将 0 赋给 j ,可以理解为条件表达式为 0,而 0 为假,所以不会执行循环,故循环 0 次。如果将 j=0 改为 j==0,则循环会执行一次,这个应该不难理解。

结语

for循环的知识介绍到这里结束了。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三尺h

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

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

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

打赏作者

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

抵扣说明:

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

余额充值