【C语言初阶(3)】循环语句2:for 循环

1. 语法结构

for(表达式1; 表达式2; 表达式3)
{
	循环语句;
}
  • 表达式 1:为初始化部分,用于初始化循环变量。
  • 表达式 2:为条件判断部分,用于判断循环何时终止。
  • 表达式 3:为调整部分,用于循环条件的调整。

举个栗子

题目:利用循环在屏幕上打印 1-10 的数字。

  • while 循环:以前使用过的 while 循环版本的解题方式:
//使用 while 循环在屏幕上打印 1-10 的数字
#include <stdio.h>
int main()
{
	int i = 1;		//1. 初始化循环变量

	while (i <= 10)	//2. 判断是否进入循环
	{
		printf("%d ", i);
		i++;		//3. 调整循环变量
	}
	putchar('\n');
	return 0;
}
  • for 循环:而使用 for 循环就是将 while 循环中的三个步骤整合到 for 语句中的表达式 1、2、3 中。
//使用 for 循环在屏幕上打印 1-10的数字
#include <stdio.h>
int main()
{
	int i;
	//表达式 1、2、3 分别对应 while 循环中的 1、2、3步
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	putchar('\n');

	return 0;
}

2. for 语句的执行流程

在这里插入图片描述

3. for 循环中的 break 和 continue

  • 我们发现在 for 循环中也可以出现 break 和 continue;
  • 他们的意义和在 while 循环中是一样的。但是还是有些差异的。

3.1 for 循环中的 break

  • 下段代码的结果会是什么?
#include <stdio.h>
int main()
{
	int i;

	for (i = 1; i <= 10; i++)
	{
		if(5==i)
		{
			break;
		}
		printf("%d ", i);
	}
	putchar('\n');

	return 0;
}
  • 当变量 i 调整到 5 的时候跳出循环,只会打印 1-4 的数字。

在这里插入图片描述

  • break 在 while 循环和 for 循环中非常相似。但是 continue 就不是这个样子了。

3.2 for 循环中的 continue

  • 如果把上述代码中的 break 换成 continue 又会是什么结果呢?

在这里插入图片描述

  • 除了 5 之外其余的数字全部打印出来了,
    • 和之前用 while 循环写的只会打印 1-4 然后进入死循环的结果完全不一样:

在这里插入图片描述

  • 这还要得益于 for 循环特殊的执行表达式的步骤。

1. continue 在 while 循环中的执行步骤

  • 我们都知道,在 while 循环中 continue 会跳过本次循环中后面的循环体,然后跳到循环语句的判断部分。
  • 在 continue 后面的循环变量根本没机会去做出改变。

在这里插入图片描述

2. continue 在 for 循环中的执行步骤

  • 在 for 语句的执行流程中可以知道,在执行完 continue 之后,会跳到表达式 3 的调整循环变量去;
  • 在就是说,在 for 循环中使用 continue 不用担心会跳过调整循环变量这个步骤而导致出现死循环。

在这里插入图片描述

4. for 循环语句的循环控制变量

1. 不可在 for 循环体内修改循环变量,防止 for 循环失去控制。

在这里插入图片描述

2. 建议 for 语句的循环控制变量的取值采用 “ 前闭后开区间 ” 写法。

  • 前闭后开写法:这种写法更加清晰明了方便阅读,所以一般都是建议使用这种方法书写代码。
int i;
for(i = 0;i < 10;i++)
{
	循环体;
}
  • 前闭后闭区间:可读性差,但不是说所有的情况下都不用这种方法。
int i;
for(i = 0;i <=9;i++)
{
	循环体:
}

5. for 循环的变种

5.1 for( ; ; )

  • for 循环中得初始化部分,判断部分,调整部分都是可以被省略的,但不建议初学者使用,容易导致出现问题。
  • 因为 for 循环的判断部分被省略,意味着判断会恒成立,就是直接进入死循环。
#include <stdio.h>
int main()
{
	for ( ; ; )//省略了初始化、判断、调整部分
	{
		printf("hello word\n");//进入死循环
	}
	return 0;
}

5.2. for 循环的嵌套

  • 在 for 循环的嵌套中,外层的循环每执行一次,内层的循环都要执行完所有的循环次数。

  • 也就是说,内存的 for 循环走完了一圈,外层的 for 循环才能走一步。

  • for 循环的嵌套中:内循环决定行,外循环决定列

    • 内层的 for 循环了决定一行打印多少个,外层的 for 循环了决定一列打印多少个。

1. 下面代码的结果是什么?

#include <stdio.h>
int main()
{
	int i = 0, j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 4; j++)
		{
			printf("hello word! ");
		}
		putchar('\n');
	}
	return 0;
}

在这里插入图片描述

  • 内存的 for 循环决定了一行打印 4 个 hello word!
  • 外层的 for 循环决定了一列打印 3 个 hello word!

2. 如果省略掉初始部分,结果又是什么?

#include <stdio.h>
int main()
{
	int i=0, j=0;
	for (; i < 3; i++)
	{
		for (; j < 4; j++)
		{
			printf("hello word! ");
		}
		putchar('\n');
	}
	return 0;
}

在这里插入图片描述

  • 内循环只进去了一次,其余时候只能进去外循环,所以就是这么个结果。

在这里插入图片描述

5.3 使用多个变量控制循环

#include <stdio.h>
int main()
{
	int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
		printf("hello word!\n");
	}

	return 0;
}

在这里插入图片描述

6. for 循环笔试题

  • 下列代码会执行多少次循环。
#include <stdio.h>
int main()
{
	int i = 0,k=0;
	for (i = 0, k = 0; k = 0; i++, k++)
	{
		k++;
	}
	return 0;
}
  • 这种情况和在 if 语句的 “ = ” 引发的错误一样;
  • 在判断条件处的 k = 0 是赋值而不是判断是否相等。
  • 也就是说 k 的值会一直都为 0(假),所以这个循环压根就进不去。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值