解除枷锁,循环语句(while,for ,do while)进行时

目录

  1. 前言
  2. while
    2.1 while语法
    2.2 while使用
  3. for循环
    3.1 for语法
    3.2 for使用
  4. do while循环
    4.1 do while语法
    4.2 do while 使用
  5. 转向语句
    5.1 break
    5.2 continue
    5.3 continue的特殊之处
    5.4 goto语句

1. 前言

    时隔一周半的时间,小编又来啦,这一次咱们就补上上次的尾巴循环语句吧,大家可不能怪小编更新时间太难嗷,要多多支持小编哈哈哈哈哈。准备要期末考了,小编表示很蕉绿啊啊啊啊!!!
    循环语句呢,在小编的编程生活中虽然说不是每次都会用到,但使用也是比较频繁,一个代码里面循环语句,使用两次起步哈哈哈哈,当我们一直在做相同的事情,并且结果之间有一定的联系,这个时候我们已经是在做无意识的循环了,像小编每天图书馆,食堂,教室,宿舍,四点往复,每天早起早睡,这些都是循环,循环在我们的生活中无处不在,虽然听起来有点无趣,但是在图书馆里面学习(一天不学习,脑子要生锈),在食堂里面吃饭(吃饭不积极,脑子有问题),在教室里面跟着教授学习知识,在宿舍里面和室友聊天吹牛,这些都是很有意义的。
    今天我们学习的是while,for ,do while三大循环多说无益,来吧,上知识点!!!

2.while

2.1while循环的语法

    while的语法结构和if语句有点相似,大家还记得if语句吧,不记得了小编可是会很伤心的。

if (表达式)
	语句;
while( 表达式 )
	语句;

    两者的语法都是极其相似的,但是表达的和结果是相差大的,和if语句一样,在语句中想要包含更多的语句需要使用大括号括{}起来,使其变成一条语句。

int main()
{
	int num = 10;
	if (num > 0)
	{
		printf("haha\n");
	}
	return 0;
}

    这是一条比较普通的if语句代码,在该代码的基础上将if换成while会导致死循环,然而什么是死循环呢?小编来给大家演示一下

int main()
{
	int num = 10;
	while (num > 0)
	{
		printf("haha\n");
	}
	
	return 0;
}

在这里插入图片描述
    大家看图片其实不是很明确,大家拿代码取运行看一下大家结合小编的讲解会更加明确。死循环:顾名思义就是重复做一件事,没有结果,永远一直做下去,在小编这个代码中,编译器会死循环,无限制的打印“haha”,直到系统崩溃强制代码停止运行。那这个时候大家可能会疑惑,怎么才知道代码死循环了?大家黑框框里,虽然黑框框里面只有一排的“haha”,根本看不出来什么东西,但是大家仔细看下面的光标,它一直在闪动,那就说明编译器一直在打印“haha”,没有主动停止下来,而事实上在小编的认知中,有限的循环比较有意义。所以我们在写代码的时候需要注意,不要或者是尽量减少死循环的出现,而且代码长时间死循环也是会对电脑有影响的,它会造成电脑cpu温度快速上升。

2.2while的使用

    正确的使用while循环是可以给我们的代码效率大大提高。

int main()
{
	int num = 10;
	while (num--)
	{
		printf("haha\n");
	}
	return 0;
}

    例如这个代码通过循环,可以快速打印出来10个haha,这样我们就不需要写10次printf,一个循环,一个printf就快速打印出来,代码高效吧哈哈哈哈。在这里插入图片描述
    那while循环的执行流程是怎么样呢?我们来刨析刨析,通过代码我们可以知道,肯定是先执行并判断表达式的真假,如果表达式为真或者是表达式结果不为0,就进入循环,执行里面的循环语句,循环语句执行之后再回到表达式再进行判断,如果表达式为真则继续执行,若表达式为假则停止执行循环。
    所以我们可以发现,表达式几乎是决定着循环是否进行的关键,从另一个角度来看,避免死循环的出现,关键也是在表达式,所以我们在写表达式的时候,我们需要注意,表达式的结果不能永远为真,永远为真就是死循环,while判断一直为真,就一直循环执行循环语句。
    我们来应用while循环写一个代码,要求在黑框框里面打印出来1~10的数字
在这里插入图片描述
    在该代码中num可以理解为循环变量,表达式是num<=10,可以看出来表达式不会出现永远为真的情况,num有限制,在循环语句中num++,会导致num一直在增大而因为表达式的存在,num不会无限制的增大,表达式和循环语句在相互制约,可以说在循环中两个条件的相互制约是非常常见的,也是靠两个或多个条件相互制约来避免出现死循环。

3 for循环

    for循环是三种循环里面使用频率最高的。

3.1 for循环的语法

int main()
{
	for (表达式1; 表达式2; 表达式3)
		语句;
	return 0;
}

    和while循环一样,循环体(就是语法里面的语句)想要包括多条语句,可以加上大括号

int main()
{
	for (表达式1; 表达式2; 表达式3)
	{
		语句;
	}
	return 0;
}

    表达式1:用于循环变量的初始化
    表达式2:用于循环结束条件的判断
    表达式3:用于循环变量的调整
    其实仔细观察我们会发现while也是围绕着中三个表达式来进行的

int main()
{
	int num = 1;//表达式1,循环变量的初始化
	while (num <= 10)//表达式2 ,循环变量的判断
	{
		printf("%d ", num);
		num++;//表达式3,循环变量的调整
	}
}

    所以我们可以理解为for循环和while循环之间可以互相转换,那为什么还要分成for循环和whlie循环?直接归为一种不就好了,这里是有原因的。因为表达式1,2,3分开的话,对于循环的调整和循环的管理不太方便,for循环就不会有这样的情况,for循环集成为一体,更为方便管理观看调整,这就是为什么小编是for循环是三种循环里面使用最多的原因。

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

3.2 for循环的使用

    首先执行表达式1,初始化循环变量,接下来执行表达式2的判断部分,判断循环变量初始化是否符合表达式2,如果符合表达式2,则为真,进行进行,如果不符合,则为假,不进入循环,直接跳过循环。
    符合表达式2为真,然后就执行循环语句,执行完循环语句会返回去执行表达式3,调整循环变量,然后再执行表达式2,判断是否符合,循环变量调整后如果还符合表达式2,就继续执行循环,否则就退出循环。
    在for循环中,循环变量的初始化只执行一次剩下的全靠表达式2和表达式3,表达式2和表达式3任务重大啊哈哈。
    我们来使用刚学习的for循环来写个代码吧,计算1到100之间3的倍数之和。

int main()
{
	int sum = 0;
	for (int i = 1; i < 100; i++)
	{
		if (i % 3 == 0)
		{
			sum += i;
		}
	}
	printf("%d\n", sum);
	return 0;
}

    看小编手到擒来哈哈哈轻轻松松,大家写出来了吗哈哈哈。

4 .do while循环

    在三种循环里面,do while循环是用得最少的。

4.1 do while循环的语法

int main()
{
	do
		语句;
	while (表达式);
	return 0;
}

4.2 do while的使用

    while和for两个循环都是先判断,条件满足则进入循环体,执行循环语句,不满足就跳出循环。
    do while循环则是直接进入循环体,执行循环语句,然后在执行while后的表达式,表达式为真,进入下一次循环,表达式为假,则不再循环。也就是说:do while循环最少执行一次循环体,可见do while循环的特殊之处。
    又是熟悉的配方又是熟悉的地方哈哈哈哈,我们来用do while循环写一写代码吧,用do while循环在黑框框里面打印出1~10。

int main()
{
	int i = 0;
	do
	{
		printf("%d ", i);
		i++;
	} while (i <= 10);
	return 0;
}

    看,小编又轻轻松松敲出来了哈哈哈哈,对了大家一定要注意,在while(表达式)的后面是要加“;”的,而for() 和while()的后面是不可以加“;”的,一定要注意了,for()和while()加“;”后循环就失效了,就废了哈哈哈。

5. 转向语句

    什么是转向语句呢?又有什么用呢?转向语句一般使用在循环里面。在循环的过程中,因为某些状况的需要,导致我们要提前终止循环,在写代码中是非常常见的情况。而break和continue的作用就在这里,他们拥有终止循环的效果。那break和continue直接又有什么区别呢?既然你们发问了,那小编就大发慈悲的告诉你们吧哈哈哈哈哈(开个玩笑)。

break

    break的作用是永久的终止循环,只要break执行,就直接跳出循环,往后面的代码执行。并且break只能跳出一层循环。

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

    大家看看,最终输出结果是多少,if语句,如果i 等于5,就执行break,那说明在i等于5之前的数字应该都是可以被打印出来的对吧。那具体是不是小编推测的那般呢,我们来执行代码看看。在这里插入图片描述
    哦豁,和小编推测的一模一样,5之前的数字被正常打印出来了,5包括5以后的数字没有被打印出来。

int main()
{
	for (int i = 0; i < 10; i++)
	{
		for (int j = 10; j < 20; j++)
		{
			printf("%d ", j);
			break;
		}
		printf("%d ", i);
	}
	return 0;
}

    大家看看这个代码,懵了吧哈哈哈哈。
    这个是循环的嵌套,其实就是循环用在一起罢了并没有那么高级的哈哈哈哈,那输出的结果是什么呢?根据break只能跳出一层循环的个性,我们可以看出初始化i = 0,符合条件进入循环,然后在进入第二层循环,j = 10符合条件进入循环,执行printf("%d “, j);,然后break跳出循环,然后执行printf(”%d ", i);,然后在回到for (int i = 0; i < 10; i++)进行i++,然后判断是否符合条件能否进入循环,在第二层循环里面打印j之后,就break,没有机会进行j++,那说明j永远不会变化,那小编的计算结果出来了就是打印出1到9之间的数字,并且每两个数字之间还有应该10,那是不是这样呢,我们来执行代码看看。在这里插入图片描述
    嗯!看来小编还是很厉害的哈哈哈哈哈,大家计算对了吗?

6.2 continue

    Continue的作用是跳过本次循环中continue后面的代码。然后继续执行循环。这么说呢,就是相当于你有满满的一碗饭,但是你在吃的过程中被抢走了一部分,但是你不得反抗,只能继续吃剩下的饭。哈哈哈哈

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

    大家猜测一下结果是什么,当i等于5的时候执行continue,然后再继续执行循环,那输出结果是不是应该是除了5以外,0~10之间的数正常打印呢?我们来编译看看是否是这样。
在这里插入图片描述
    看和小编推测的一模一样,小编厉害吧哈哈哈哈。

5.3 continue的特殊之处

    不知道大家还记不记得刚才小编说的话,for循环和while循环的区别,两者的区别在于fou循环的三个表达式集成在一起,而while循环的三个表达式是分开出来的。而因为这两者的区别导致了continue在两个循环中使用会出现不同的结果,之前小编也说过了,for循环和while循环之间可以相互转化,如果循环中有使用continue,那无论是for转while,还是while转for都会有不同的结果,这个怎么说呢,有点想数学里面的充分必要条件哈哈哈哈。

代码1

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

代码2

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

    代码1和代码2,如果两者不加continue,则都会输出0~10的数字,但是加上了continue就不一样了,代码1除了5不会被打印,其他0到10之间的数字全部被打印出来。
在这里插入图片描述
    而代码2的结果是把0到4之间的数字打印出来然后死循环在这里插入图片描述
    代码2黑框框里面的光标一直在闪动,这说明代码一直在执行只是并没有输出结果。
    为什么会这样呢,就是因为for和while循环之间的差异。continue在while循环和for循环时,因为for循环的三个表达式集中在一起,while循环三个表达式散开,从而导致continue在for循环中不会影响到三个表达式,而while循环三个表达式能被影响到,导致最终输出结果不同。

goto语句

    小编一直认为goto语句才是真正的名副其实的转向语句哈哈哈。
    goto语句可以实现在同一个函数内跳转到设置好的标号处,goto语句的语法比较特殊,它牵扯到调整符号。

int main()
{
	printf("hehe\n");
	goto end;
	printf("haha\n");
	end:
	printf("hehe\n");
	return 0;
}

    代码执行printf(“hehe\n”)后遇见goto语句定义的标号end,然后编译器就会去找标号end,然后直接执行标号end后面的代码,那是否如小编这般推测的呢?我们来编译看看结果。在这里插入图片描述
    看结果只打印了两次“hehe”,并没有打印中间的“haha”这说明中间的 printf(“haha\n”);被goto语句跳过了。
    goto语句的标号是可以随意设置的。
    goto语句是不是看起来很方便啊,想跳去哪里就跳去哪里,多自在哈哈哈哈。但是并不推荐经常使用goto语句,也不是说不能用,而是能不用就不用。为什么呢,因为goto语句如果使用不当,就会导致在函数内部随意跳转,打乱程序的执行流程,所以建议能不用就不用。但goto语句并非一无是处,在多层循环的代码中,想快速跳出用goto语句就非常方便。为什么不适用break跳出循环呢?别问这种问题嗷,小编在上面讲过了,break只能跳出一层循环,不能跳出多层循环,谁问小编这个问题小编要生气了嗷!

结语

    大家可以拿小编的代码去运行看看,理解一下小编讲述的高深玄妙的知识哈哈哈哈哈。暂时呢,我们的学习就到这里结束了,当我们下一次见面的时候小编还会给大家带来新的更有趣编程知识的,大家不要太想小编哦哈哈哈哈。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值