【C语言初阶】循环语句 —— for语句

【C语言初阶】循环语句 —— for语句

3 for 语句

for 语句也能实现循环结构,是比较常用的一种循环语句。

3.1 for - 流程图

for 语句


3.2 语法结构

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

解释说明

1 while 语句执行流程

  1.程序流执行到 for 语句时,首先并且只会执行一次表达式1

  2.接着对表达式2进行判断如果表达式2不为0,则执行循环体语句,否则跳过循环体,程序流执行 for 后面的语句;

  3.当循环语句执行完后,会执行表达式3

  4.接着对表达式2进行判断,为真就进入循环,否则就退出 while 循环,接着执行后续语句。

2 表达式1:预先处理(初始化部分

  表达式1仅在循环执行之前执行一次。当程序无需预先处理的时候,该表达式可以省略。

3 表达式2:控制表达式(条件判断部分

  表达式2是用来判定循环操作是否继续执行的表达式。如果该表达式的判断结果不为0,则执行循环体。

4 表达式3:收尾处理(调整部分

  表达式3作为“收尾处理“或”下一个循环的准备处理“,会在循环体执行后被判断、执行。如果没有需要执行的内容,则该表达式可以省略。


3.3 简单示例

使用 for 循环,在屏幕上打印1-10的数字。

代码示例

#include<stdio.h>

int main()
{
	//使用for打印1~10的数字

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

	return 0;
}

解释说明

1 当程序流执行到 for 语句的时候,先执行 i=1接着进行表达式的判断 i<=10 ,表达式不为0则进入循环体;

  进入循环体执行打印操作接着执行 i++

  然后接着进行表达式的判断 i<=10直到最终判断为假结束循环

2 第1步为表达式1,第2步为表达式2,第3步为循环体,第4步为表达式3;

  循环会重复执行 2->3->4 这三步,直至不满足进入循环的条件


3.4 for 中的 breakcontinue 语句

3.4.1 break 语句

breakfor 中的使用

代码示例:

#include<stdio.h>

int main()
{
	//for中的break

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

	return 0;
}

解释说明:

1 程序执行到 for 循环语句,当循环控制变量 i 增加到5时,就执行 break 语句,结束整个 for 循环


3.4.2 continue 语句

continuefor 中的使用

代码示例:

#include<stdio.h>

int main()
{
	//for中的continue

	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (5 == i)
			continue;
		printf("%d ", i);//1 2 3 4 6 7 8 9 10
	}

	return 0;
}

解释说明:

1 程序执行到 for 循环语句,当循环控制变量 i 增加到5的时候,就会执行 continue 语句

  程序流跳转到 i++ 表达式3的地方,接着进行循环判断(表达式2),最终继续执行循环体。

  程序实现的结果是打印1-10,但是会不打印5。

2 与 while 语句中情况不同的是,for 语句的循环控制变量的改变在表达式3这个地方无论如何每次循环体执行完后都会执行表达式3,然后再执行循环的条件表达式(表达式2)


3.5 whilefor 的比较

3.5.1 对比 whilefor
A.等价写法

如下示例的代码是 for 语句和 while 语句的对比。两者是等价的

语法示例

//for语句
for(exp1;exp2;exp3)
	statement;
	
//while语句
exp1;
while(exp2)
{
	statement;
	exp3;
}

说明

1 for 语句与 while 语句可以相互置换


B.示例:无限循环

如下是 while 语句的无限循环和 for 语句的无限循环的执行示例。

代码示例

/* while 语句的无限循环  */
while(1)
{
	语句
}

/* for 语句的无限循环 */
for( ; ; )
	语句

说明

1 for( ; ; )

  如果省略for 循环的循环判断部分,那么就意味着判断恒为真,容易导致死循环。


3.5.2 对比同一功能的实现

代码示例

#include<stdio.h>

int main()
{
	int i = 0;

	//实现相同功能,使用while语句
	printf("while实现:>\n");
	i = 1;//初始化部分
	while (i <= 10)//循环条件判断部分
	{
		printf("hehe\n");
		i++;//调整部分
	}

	//实现相同功能,使用for语句
	printf("\nfor实现:>\n");
	for (i = 1; i <= 10; i++)
	{
		printf("hehe\n");
	}

	return 0;
}

说明

1 while 语句可以置换成 for 语句,但是由于风格问题,这三个部分很可能偏离较远,对它们的查找和修改就不够集中和方便

2 相比起来,for 语句的风格更胜一筹,使用频率也最高


3.6 for 语句的循环控制变量

3.6.1 循环控制变量的使用建议
  • 不可以在 for 循环体内修改循环控制变量,以免 for 循环失去控制。
  • 一般 for 语句的循环控制变量的取值采用“前闭后开”区间的写法

示例:

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++) {}

//两边都是闭区间
for(i=0; i<=9; i++) {}

注意:当然,遇到具体问题需要具体分析;写 for 循环时,根据具体实现要求可以采取不同的写法


3.7 一些 for 循环的变种

3.7.1 示例1

死循环打印

代码示例

#include<stdio.h>

int main()
{
	//代码1
	for (;;)
	{
		printf("hehe\n");//死循环打印hehe
	}

	return 0;
}

解释说明

1 for 循环中的初始化部分、条件判断部分、调整部分是可以省略的,但是在现阶段,还是不要随意省略为好。


3.7.2 示例2

嵌套循环

代码示例

#include<stdio.h>

int main()
{
	//代码2
	int i = 0;
	int j = 0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			printf("hehe\n");//10*10=100,打印100个hehe
		}
	}

	return 0;
}

解释说明

1 外层 for 循环会执行10次,每一次外部 for 循环会执行10次内部 for 循环


3.7.3 示例3

代码示例

#include<stdio.h>

int main()
{
	//代码3
	int i = 0;
	int j = 0;
	for (; i < 10; i++)
	{
		for (; j < 10; j++)
		{
			printf("hehe\n");//只打印10次hehe
		}
	}

	return 0;
}

解释说明

1 每一次进入外层 for 循环,内层 for 循环都没有初始化部分

  就导致了第一次内层循环执行后,其循环控制变量 j 就固定在了10

  以后的每一次内层循环判断时,循环变量都没有被初始化,一直是10,就不会进入内层循环

2 也就是说,当外层循环控制变量 i 变为1~9后的每一次内层的 for 循环都不会进入


3.7.4 示例4

使用多个循环控制变量

代码示例

#include<stdio.h>

int main()
{
	//代码4
	//使用多个循环控制变量

	int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
		printf("hehe\n");//只打印两次hehe
	}

	return 0;
}

解释说明

1 使用多个循环控制变量x = 0, y = 0 两个表达式被逗号隔开,构成了逗号表达式

2 x < 2 && y < 5 :只有同时满足 && 两边表达式为真才能进入循环体


3.8 笔试题

请问循环要执行多少次?

代码示例

#include<stdio.h>

int main()
{
	int i = 0;
	int k = 0;
	for (i = 0, k = 0; k = 0; k++)
	{
		k++;//一次都没执行
	}

	return 0;
}

解释说明

1 循环体一次都没执行

  表达式2是 k = 0 ,这是一个赋值表达式,表达式的结果是赋值后 k 的结果:0;

  也就是说对该表达式进行判断的结果为0,那么就不会进入循环体。


总结:

  本节介绍了循环结构中的 for 语句,并给出了它的语法结构;同时又讲解了使用 breakcontinue 语句会对 for 循环造成的影响;最后给出了 while 语句和 for 语句的比较以及一些 for 循环的变种。


感谢您的阅读!如有任何错误,欢迎您的批评指正!

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值