C语言分支与循环(6)--- for循环第二课
  uUWKQE7Avyk4 2023年11月02日 42 0

一.先来看以下两段代码:

代码1:

#include<stdio.h>
int main(void){
	for (int i = 0; i <= 10; i++){
		if (i == 5){
			continue;
		}
		printf("i=%d\n",i);
	}
	getchar();
	return 0;
}

代码2:

#include<stdio.h>
int main(void){
	int i = 0;
	while (i <= 10){
		if (i == 5)
		{
			break;
		}
		printf("i=%d\n", i);
		i++;
	}
	getchar();
	return 0;
}

这两段代码最明显的不同就是代码1使用了for循环而代码2则使用了while循环,我们先来分析一下代码1,代码1使用了for循环,表达式1创建并变量i并为其赋值:i=0 表达式2则对循环条件进行判断,只有当i的值<=10的时候才进入for循环,表达式3则对for循环进行了调整,每次循环时将i的值+1,随后使用if判断语句进行判断当i=5的时候则执行continue语句,终止本次循环,重新进入while循环,最后调用while语句对i的值进行输出,所以我们可以得知代码的结果为 0 1 2 3 4 6 7 8 9 10,当运行以上代码时也可以发现输出的结果与上面结果一样,如图所示:

C语言分支与循环(6)--- for循环第二课_for语句

我们再来对代码2进行分析:首先创建并为变量i并赋值i=0,随后创建了while循环,入口条件为i<=10

当i=5的时候则执行continue语句终止本次循环,然后调用printf函数对i的值进行输出,最后让i进行自增,也就是i+1,对代码熟悉的朋友们已经看出了代码执行的结果以及问题,让我们运行上述代码,得到的结果为0 1 2 3 4 ,但是此时程序并未跳出循环而是进入了死循环,原因是当i=5的时候代码会执行if语句中的内容,也就是执行了continue语句,我们直到continue语句会终止本次循环,重新进入while语句的入口处执行由于没有对变量i进行自增操作会导致变量i的值依然为5,然后又执行if语句中的continue语句从而导致死循环的发生,解决这个问题的方法也很简单,我们只需要将i++语句放在if语句之前即可,这样当执行continue语句后i可以进行自增从而避免死循环的发生,如图所示:

C语言分支与循环(6)--- for循环第二课_for循环_02

同时我们在使用for循环的时候也需要注意以下两点:

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

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

我们着重说一下第二点:

示例1:for(int i=0; i<10; i++)
示例2:for(int i=0; i<=9; i++)

其中示例1很好的使用了前闭后开的写法,前闭指的是i=0后开指的是i<10 示例2则使用的是两边闭区间的写法,注意!这种书写方法只是建议,如果你不熟悉前闭后开的写法则请使用两边闭区间的写法,总而言之使用自己最熟悉的写法,能最大程度上避免错误的发生


二.for循环的变种

#include<stdio.h>
int main(void)
{
for(;;){
printf("Hello!\n");
}
return 0;
}

我们运行上述代码后可以发现我们创建了一个死循环,程序会一直输出Hello

由此我们的出以下结论:

for循环中的初始化、判断、调整都可以省略,但是当判断语句省略后,那么判断条件就恒为真

注意:如果不是非常熟悉for循环,则建议不要去随便省略相关语句

我们再来看一段代码:

#include<stdio.h>
int main(void)
{
	for (int i = 0; i < 10; i++){
		for (int x = 0; x < 10; x++)
		{
			printf("hello\n");
		}
	}
	getchar();
	return 0;
}

程序运行结果:

C语言分支与循环(6)--- for循环第二课_for语句_03

程序运行的结果是输出100个Hello,原因是当i=0进入循环后执行第二个for语句,这时候第二个for语句中x=0,所以会输出10次Hello,当i=10的只会则跳出循环,当i=1的时候则会再执行第二个for循环,此时x的值被初始化成了0,再次输出10次Hello,以此类推,由此得出结论:i每加1的时候就要输出10个Hello,直到最外围的for循环i的值等于10的时候不再满足for循环的入口条件跳出循环,那我们再来看以下代码:

#include<stdio.h>
int main(void)
{
int i=0;
int x=0;
	for (; i < 10; i++){
		for (; x < 10; x++)
		{
			printf("hello\n");
		}
	}
	getchar();
	return 0;
}

此时我们再运行上述代码则会发现这次程序只输出了10次Hello便结束了,原因是我们将for循环中的初始化表达式留空了,将声明写在了for语句之外,这时候内层的for循环语句便不会受到外层的for循环语句的影响,当内层for语句输出完成后此时x=10,已经不满足内层for语句入口条件了,外层for语句执行便不会再去执行内层for语句,所以只会输出10个Hello,如图所示:

C语言分支与循环(6)--- for循环第二课_for语句_04

变种3:

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

上述程序运行后会输出两个Hello,让我们来分析一下这个for循环,其中初始化语句为x=0 y=0 判断语句为x<5与y<5,调整语句是++x和y++,当x=0 y=0的时候满足条件进入循环,输出Hello,此时x=1 y=1,满足条件,输出Hello,当x=2 y=2的时候x的值不再满足条件,由于是&&操作符代表的是与也就是说其中有任何一个条件不满足则为假,for循环便不再执行,所以只会输出Hello,如图所示:

C语言分支与循环(6)--- for循环第二课_for循环_05

实战题目:

#include<stdio.h>
int main(void)
{
	int i = 0;
	int k = 0;
	for (i = 0, k = 0; k = 0; i++, k++)
	{
		k++;
	}
	getchar();
	return 0;
}

请问以上代码需要执行几次循环?


答案:0次因为,for语句中的判断部分(k=0)是将0赋值给了变量k,这时候表达式的结果为k,k=0

我们之前讲到过在C语言中0代表假,非0代表真,当表达式为假(0)的时候则不执行循环

至此for循环大致讲解完成

                                                                                                2023/7/23

                                                                                                     王起舟

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  gBkHYLY8jvYd   2023年11月19日   23   0   0 cifor循环字符串
  X5zJxoD00Cah   2023年11月02日   29   0   0 for循环
  X5zJxoD00Cah   2023年11月02日   179   0   0 for循环迭代
  X5zJxoD00Cah   2023年11月02日   74   0   0 数组for循环迭代
uUWKQE7Avyk4