C语言·分支语句和循环语句(2)

hello,大家好,今天承接上篇博客,我们继续来讲一讲c语言中的循环语句。

注:文中图片均取自于比特就业课。

3.循环语句

3.1 while循环

我们已经学了if语句,条件满足,语句执行,否则不执行。但是这个语句只会执行一次。但生活中大多的例子是需要我们执行多次,即,同一件事我们需要完成多次。这时候显然if的功能就不太够用了,C语言中引入了while语句,可多次重复执行,达到循环的效果。

3.1.1 while的语法结构

while语句的执行流程

浅浅的解读一下,程序进来,首先判断表达式,此时会有两种结果,一种是表达式为真,一种是表达式为假。若表达式为真,则进入while,执行while中的语句,执行完后,此时可能选择程序break跳出程序,或者continue继续循环,重新回到while的判断语句中进行判断。若判断表达式判断为假,则不进入while循环,直接执行while下面的语句。

例如:在屏幕上打印1-10的数字

#include<stdio.h>
int main()
{
	int n = 1;
	while (n <= 10)
	{
		printf("%d ", n);
		n++;
	}
	return 0;
}

上面的代码已经帮助我们了解了while的基本语法,那么我们现在学习一下

3.1.2 while中的break和continue

3.1.2.1break

先来看看以下代码:

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

这里的输出结果是什么呐?

结果是1 2 3 4          

这里就不得不介绍一下break的作用了

在循环中遇到break,直接停止后期所有的循环,直接跳出循环。

所以,while中的break是用于永久终止循环的。

3.1.2.2 continue

代码示例:

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

此时会是什么结果呐?

结果是 1 2 3 4 _  (光标一直闪,程序一直不停止。)

为什么会是这样的结果呐,因为continue的作用是终止本次循环,直接跳回到while判断语句。那么此时代码中的n会一直等于5,陷入死循环。

故,continue在while中的作用:continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

3.2 for循环

话不多说直接上干货,直接来看for循环的语法。

3.2.1 语法

其中,

表达式1为初始化部分,用于初始化循环变量。

表达式2为条件判断部分,用于判断循环时候终止。

表达式3为调整部分,用于循环条件的调整。

来一起看个代码示例,还是上面那个示例。

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

#include<stdio.h>
int main()
{
	int n = 0;
	for (n = 1; n <= 10; n++)
	{
		printf("%d ", n);
	}
	return 0;
}

运行结果依然可以在屏幕上打印1-10的数字。

那么我们此时再来看一下for循环的执行流程图。

(转自比特就业课)

关于for循环,我们也来浅浅的解读一下吧。首先执行表达式1的语句,执行结束后,判断表达式2,那么到了判断这一步也就意味着有两种不同的结果,一种是判断结果为真,一种是判断结果为假。若此时表达式2判断结果为真,则进入循环,执行循环语句,执行完循环语句,要么continue继续进入表达式3,要么break跳出循环,继续表达式3,调整数值,再进行表达式2的判断,再进入循环,……,一直下去,直到break跳出循环,或者表达式2判断结果为假,跳出循环。若一开始表达式2的判断结果就为假,则不进入循环。

现在我们来比较一下while循环和for循环。

可以看出while循环也存在三个必要条件,只是因为风格的原因使得三个部分偏离太远了,导致了查改信息不够集中和方便,所以,for循环的风格更胜一筹,for循环的使用频率也较高一点。

3.2.2 for循环中的break和continue

3.2.2.1 break

观察以下代码:

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

运行结果依然只是打印 1 2 3 4。

在for循环中break的作用依然是直接终止循环。

3.2.2.2 continue

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

大家可以思考一下,此时程序运行的结果是什么呐?

程序运行的结果为 1 2 3 4 6 7 8 9 10,唯独没有数字5。

为什么会这样呐?

因为当n=5时满足if的条件,进入if,执行continue,continue的作用是终止本次循环,故程序直接跳到表达式3(调整表达式),故不会打印数字5。

3.2.3 for循环中的循环控制变量

在for循环使用过程中,一般不可在for循环体内修改循环变量,防止for循环失去控制。

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

3.2.4 一些for循环的变种

代码1

#include<stdio.h>

int main()
{
	for (;;)
	{
		printf("hehe\n");
	}
	return 0;
}

for循环中的初始化部分,判断部分,调整部分都是可以省略的,但是不建议初学时省略。

代码2

#include<stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	for (i = 1; i < 10; i++)
	{
		for (j = 1; j < 10; j++)
			printf("hehe\n");
	}
	return 0;
}

for循环的嵌套使用。

代码3

#include<stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	for (; i < 10; i++)
	{
		for (; j < 10; j++)
			printf("hehe\n");
	}
	return 0;
}

省略初始化部分

大家可以思考一下代码3和代码2的运行结果相同吗?

显然是不同的,代码3打印的hehe比代码2少很多,因为i=0进入循环之后,j的数值会随着循环增加到10,但是i=0循环结束,当i=1时,大家想想此时的j等于多少,因为j没有初始化的原因j变成了10就一直会是10,不会再变回0,所以j的for循环判断部分一直为假,也就是不会进入j的循环了。所以打印的hehe就会少很多。

代码4

#include<stdio.h>

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

使用不止一个变量来控制循环。

到此,关于for循环的所有知识点我们都学习的差不多了。那我们便进入下一个循环语句的学习。

3.3 do....while循环

3.3.1语法结构

3.3.2 执行流程

do...while语句,先do,就是先执行语句,执行完了再到表达式中去判断。

3.3.3 do语句的特点

循环至少执行一次,使用的场景有限,所以不是经常使用。

3.3.4 do...while语句中的break和continue

3.3.4.1 break
#include<stdio.h>

int main()
{
	int i = 10;
	do
	{
		if (5 == i)
			break;
		printf("%d\n",i);

	} while (i < 10);
	
	return 0;
}
3.3.4.2 continue
#include<stdio.h>

int main()
{
	int i = 10;
	do
	{
		if (5 == i)
			continue;
		printf("%d\n",i);

	} while (i < 10);
	
	return 0;
}

4.goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

例如:一次跳出两层或多层代码

跳出多层循环,仅仅只使用一个break是达不到效果的,break只能只能从一层循环跳出到上一层。

适合goto语言的从场景如下:

至此,我们就学习完了循环语句,外加一个goto语句。

大家都有所收获嘛,哈哈,再过两天就要放国庆了,呜呜呜,可恶的异地,不能去见女朋友,那就只能猛猛学编程了,冲冲冲。

提前祝读者朋友们国庆快乐哦!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值