从0开始学c语言-12-循环执行语句(2)for语句

本人0基础开始学编程,我能学会的,你也一定可以,学会多少写多少。

下载安装请从官网入手,社区版本即可,这里主要使用的软件是VS2019,图标如下。

  上一篇:从0开始学c语言-12-循环执行语句(1)while语句、getchar、putchar、缓冲区_阿秋的阿秋不是阿秋的博客-CSDN博客

   控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成, C 语 言有九种控制语句,可以分为以下三类:
        1. 条件判断语句也叫分支语句: if 语句、 switch 语句;
        2. 循环执行语句: do while 语句、 while 语句、 for 语句;
        3. 转向语句: break 语句、 goto 语句、 continue 语句、 return 语句。

目录

for语句

语法结构

执行流程

代码展示

比较continue区别

书写建议

第一种的后果

第二种

省略书写的艺术

使用两个变量控制循环

练习

总结


for语句

上一篇我们学了while语句

int main()
{
	int a = 0;  //初始化
	while (a <= 10)  //判断部分
	{
		printf("%d ", a);
		a++; //调整部分
	}
	return 0;
}

可以看到这段代码中有三个部分,分别为初始化部分、判断部分、调整部分。

为了方便寻找循环重要的三个部分,就出现了for语句。

语法结构

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

表达式1、2、3分别对应

初始化部分:初始化循环变量

判断部分:判断循环是否终止

调整部分:循环条件的调整方式

执行流程

代码展示

int main()
{
	int i = 0;
	//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i); //调试看过程
	}
	return 0;
}

按照上面的流程,想一下如果for那行加了分号,输出结果会是?

结果会是11。

加了分号后相当于没有循环语句,只是单纯在执行循环三部分,然后跳出循环。

比较continue区别

int main()
{
	int a = 0;
	while (a <= 10)
	{
		if (a == 5)
			continue;  //continue跳过本次循环它之后的语句
					   //来到while语句的表达式部分,判断是否进行下一次循环
		printf("%d\n", a);
		a++;
	}
	return 0;
}
int main()
{
	int i = 0;
	
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;  //和while中的死循环不一样,回到判断部分
		/*if (i == 5)
			break;*/

		printf("%d ", i);
	}
	return 0;
}

第一段代码会陷入死循环。

而第二段代码的打印结果是1 2 3 4 6 7 8 9 10,跳过了5。

为什么第二段代码就不会陷入死循环呢?

因为for语句跳出循环的调整部分不会受到continue位置的影响,while语句的continue如果在调整部分之前,循环会无法跳出导致死循环。

如果不懂,就去调试看看过程。

但是while语句和for语句的break倒是没有什么区别的,都是直接跳出循环了。

书写建议

1. 不可在for 循环内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

第一种的后果

int main()
{
	int i = 0;
		for (i = 1; i <= 10; i++)
	{	
		printf("%d ", i);
		i = 7;  //死循环
	}
	return 0;
}

同样的i,每次循环语句部分都会把i赋值为7,永远跳不出循环。

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
		i++;  //改变打印结果
	}
	return 0;
}

上面这段代码会改变我们打印1-10数字的结果,改写成这样就可以了。

int main()
{
	int i = 0;
	for (i = 1; i <= 10;)  //这两个分号不能丢
	{

		printf("%d ", i);
		i++;  //调整部分放这里
	}

	return 0;
}
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++) 
	{
		printf("%d ", i);
		int j = 0;
		for (j = 1; j <= 10; i++)  //i++会死循环
		{
			printf("阿秋");
		}
	}
	return 0;
}

以上都是循环体内改变循环变量的后果,建议大家保持好的书写习惯。

第二种

int main()
{
	int aqiu[10] = { 0 };
	int i = 0;
	for (i = 0; i < 10;i++)  //这是左闭右开,建议这么写,代表循环10次
		                     //写成i<=9也可以
	{
		printf("%d ", aqiu[i]);	
	}

	return 0;
}

我觉得第二种按照自己习惯来就行,别改来改去自己晕了。

省略书写的艺术

int main()
{
	
	//三个部分都可以省略
	//判断部分的省略,判断部分会恒为真
	for (; ; )  
	{
		printf("aqiu ");
	}
	return 0;
}

但是在不熟悉的情况下还是别随便省略了,你看这是正常的。

int main()
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf("我爱秋天\n"); //会打印9次
		}
	}
	return 0;
}

省略后……就意思不一样了。

int main()
{
	int i = 0;
	int j = 0;
	for (; i < 3; i++)
	{
		for (; j < 3; j++)  //第一次大循环的时候j=3停止,
			               //第二次大循环j还是等于3,就没办法继续执行小循环
			              //省略初始化的后果
		{
			printf("我爱秋天\n");  //只会打印3次
		}

	}

	return 0;
}

使用两个变量控制循环

int main()
{
	int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
		printf("hehe\n");
	}
	return 0;
}

练习

//请问循环要循环多少次?
#include <stdio.h>
int main()
{
	int i = 0;
	int k = 0;
	for (i = 0, k = 0; k = 0; i++, k++)  
		k++;
	return 0;
}

答案

注意判断部分的k=0这是赋值而不是等于,那么就是说判断部分为假,不会循环。

总结

一、for语句的三个表达式

        初始化部分:初始化循环变量

        判断部分:判断循环是否终止

        调整部分:循环条件的调整方式

二、break和continue

        for语句跳出循环的调整部分不会受到continue位置的影响,while语句的continue如果在调整部分之前,循环会无法跳出导致死循环。

        但是while语句和for语句的break倒是没有什么区别的,都是直接跳出循环了。

三、书写建议

        1. 不可在for 循环内修改循环变量,防止 for 循环失去控制。
        2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

        3.别随意省略。

下一篇:从0开始学c语言-12-循环执行语句(3)do……while()语句+练习_阿秋的阿秋不是阿秋的博客-CSDN博客

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值