首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >基本魔法语言分支和循环 (二) (C语言)

基本魔法语言分支和循环 (二) (C语言)

作者头像
散峰而望
发布2025-12-23 12:53:32
发布2025-12-23 12:53:32
1090
举报

5. switch语句

switch语句相当于多重命运咒,是一个决策性咒语,用于在多种已知的可能性中选择一条路径。相当于是一种特殊形式的if…else结构,把多重的if…else改成更易用、可读性更好的形式。下面是switch的语言基本模板。

代码语言:javascript
复制
switch(expression)
{
case value1:statement
case value1:statement
...
default:statement
}

上面代码中,根据expression不同的值,执行相应的case分支。如果找不到相应的值,就执行default分支。

注意:

  • switch后面的expression必须是整型表达式
  • case后面的值,必须是整形常量表达式

5.1 if语句和switch语句的对比

如:输入任意整数值,计算除3之后的余数

如果用if语句

代码语言:javascript
复制
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n % 3 == 0)
		printf("整除,余数为0\n");
	else if (n % 3 == 1)
		printf("余数为1\n");
	else
		printf("余数为2\n");
	return 0;
}

如果用switch语句改写,是这样的

代码语言:javascript
复制
int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n % 3)
	{
	case 0:
		printf("整除,余数为0\n");
		break;
	case 1:
		printf("余数为1\n");
		break;
	case 2:
		printf("余数为2\n");
		break;
	}

}

上述的代码中,我们需要注意的点:

  • case和后边的数字之间必须有空格。
  • 每一个case语句中的代码执行完成后,需要加上break,才能跳出这个switch语句。

5.2 switch语句中的break

break相当于咒语结界符,当你执行一道正确的多重命运咒魔法,这个结界会立即将你传送出整个多重命运咒,防止你继续执行后面并行魔法咒语。如果上面的代码中除去break,会出现什么情况?

代码语言:javascript
复制
int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n % 3)
	{
	case 0:
		printf("整除,余数为0\n");
	case 1:
		printf("余数为1\n");
	case 2:
		printf("余数为2\n");
	}

}
在这里插入图片描述
在这里插入图片描述

我们发现,3除以3本来余数是0,但是我们发现程序运行的结果多了两行“余数为1”和“余数为2”的打印。

这是为什么呢?

原因是switch语句是分支效果的,只有在switch语句中使用break才能跳出switch语句,如果某一个case语句的后面没有break语句,代码会继续执行下去,有可能执行其他case语句中的代码,直到遇到break语句或switch语句结束,就如上图。

所以在switch语句中break语句是非常重要的,能实现真正的分支效果。

当然,break也不是每个case语句都要有,这要根据实际情况来看。如输入1~5输出“工作日”, 6~7输出“休息日”:

代码语言:javascript
复制
int main()
{
	int day = 0;
	scanf("%d\n", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}

5.4 switch语句中的case和default的顺序问题

在switch语句中case语句和default子句有顺序吗?default只能放在最后吗?

自然不是,放哪都行,不过通常将default放在最后处理。

6. while循环

while是一个条件持续咒语,只要魔力足够强(条件为真),就会执行咒语(循环体)。只要魔力足够,咒语就会一直执行。如此反复,直到魔力耗尽(条件为假),咒语自动解除。是一个先判断 ,后执行的咒语,如果一开始魔力就已经耗尽,那么咒语一次都不会生效。

同时while语句的语法结构和if非常相似。

6.1 if和while的对比

代码语言:javascript
复制
if(表达式)
  语句;

while(表达式)
  语句;//如果想包含更多的语句,可以加大括号

当然可以用具体的代码对比一下:

代码语言:javascript
复制
int main()
{
	if (1)
		printf("Welcome to China\n");
	return 0;
}
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
int main()
{
	while (1)
		printf("Welcome to China\n");
	return 0;
}
在这里插入图片描述
在这里插入图片描述

可以看到if和while的区别,while语句是可以实现循环效果,一直重复下去。

6.2 while语句的执行流程

首先上来就是执行判断表达式,表达式为0,循环直接结束;表达式的值不为0,执行循环语句,语句执行完继续判断,是否进行下一次判断。

7.for循环

for循环是一个精密炼成阵,需要一个固定的“仪式三部曲”,是三种循环使用最多的循环。

7.1 语法形式

for循环的语法形式如下:

代码语言:javascript
复制
for(表达式1;表达式2;表达式3;)
   语句;//如果想包含更多的语句,可以加上大括号

仪式三部曲: 1.仪式准备(表达式1):需要一个计数器并赋予初始值(int i = 0) 2.仪式条件(表达式2):设定仪式持续的结界(i < 10) 3.仪式步骤(表达式3):每完成一次小仪式,计数器就按预定规律变化(i++)

7.2 for循环的执行流程

在这里插入图片描述
在这里插入图片描述

首先执行表达式1初始化循环变量,接下来执行表达式2的判断部分,表达式2结果如果== 0,则循环结束;表达式2的结果如果!= 0则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继续。

整个循环过程中,表达式1初始化部分只执行1次,循环的是表达式2、循环语句、表达式3在循环。

7.3 for循环的实践

如在屏幕上打印1~10的值

代码语言:javascript
复制
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
		printf("%d ", i);
	return 0;
}
在这里插入图片描述
在这里插入图片描述

7.4 while循环和for循环的对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

for和while在实现循环的过程中都有初始化、判断、调整三个部分,但是for循环的三个部分非常集中,便于代码的维护,如果代码较多的时候,while循环的三个部分比较分散,所以形式上for循环更优一些。

8. do-while循环

do-while相当于无悔誓约咒,与while咒语不同,先不顾一切地执行一次咒语效果(循环体),然后才去感知魔力(条件表达式)。如果魔力依然充沛,就重新执行咒语,否则咒语结束。

8.1 语法形式

在循环语句中do-while语句使用的最少,语法如下:

代码语言:javascript
复制
do
  语句;
while(表达式);  

while和for这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;

而do-while循环则是先直接进入循环体,执行循环语句,然后再执行while后的判断表达式,表达式为真,就会执行下一次,表达式为假,则不再继续循环。

8.2 do-while循环的执行流程

在这里插入图片描述
在这里插入图片描述

在do-while循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的结果是!= 0,则继续循环,执行循环语句;判断表达式的结果== 0,则循环结束。

所以在do-while语句中循环体是至少执行一次的,这是do-while循环比较特殊的地方

注意:do-while里面创建的变量,while是无法使用的。

8.3 do-while的实例

在屏幕上打印1~9的值

代码语言:javascript
复制
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i++;
	} while (i < 10);
	return 0;
}
在这里插入图片描述
在这里插入图片描述

一般do-while使用在循环体至少被执行一次的场景下,所以比较少。

9. break和continue语句

循环过程中,如果发生某些状况,需要提前终止循环,在C语言中提供了break和continue两个关键字,就是运用到循环中。

  • break的作用是用于永远的终止循环,只要break被执行,直接就会跳出循环,继续执行。
  • continue的作用是跳过本次循环中的continue后边的代码,在for循环和while循环中有所差异。

9.1 while循环中的break和continue

9.1.1 break举例
代码语言:javascript
复制
int main()
{
	int i = 0;
	while (i < 10)
	{
		if (i == 5)
			break;
		printf("%d", i);
		i = i + 1;
	}
	return 0;
}
在这里插入图片描述
在这里插入图片描述

打印了01234后,当i == 5时,循环在break地方终止,不再打印,不再循环。

所以break的作用是永久的终止循环,只要break被执行,break外的第一层循环终止。故以后想终止循环,则可以使用break。

9.2.2 continue举例

continue是继续的意思,在循环中的作用就是跳过本次循环中continue后边的代码,继续执行下一次循环的判断。那么break改为continue会是什么结果呢?

代码语言:javascript
复制
int main()
{
	int i = 0;
	while (i < 10)
	{
		if (i == 5)
			continue;
		printf("%d", i);
		i = i + 1;
	}
	return 0;
}
在这里插入图片描述
在这里插入图片描述

发现当i == 5时,就执行continue,直接跳过某一次循环continue后边的代码,去循环判断的地方,因为这里跳过i = i + 1,所以i一直为5,陷入死循环,无法结束程序,所以终端只有01234几个数。

9.2 for循环中的break和continue

9.2.1 break举例

与while循环中一样,for循环break也是用于终止循环,不管循环还需要循环多少次,只要执行到break,循环就彻底终止。

代码语言:javascript
复制
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d", i);
	}
	return 0;
}
在这里插入图片描述
在这里插入图片描述

break的作用是永久终止循环,故不想继续循环的时候,可以用break实现。

9.2.2 continue举例

如果改为continue会是什么样的呢?

代码语言:javascript
复制
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d", i);
	}
	return 0;
}
在这里插入图片描述
在这里插入图片描述

发现for循环中的continue的作用是跳过本次循环,然后接着后面的循环的调整部分,因此打印的其他数都有,唯独没有5。故当某个条件发生时,本次循环无需再执行后续操作时候,可以用continue实现。

9.3 do-while中的break和continue

do-while语句基本上和while循环一模一样,大家可以自行测试体会。

10. 循环的嵌套

前面学习了三种循环while、do-while、for,这三种循环往往会嵌套在形成一个复杂的魔法阵,从而更好的解决问题。这就是所说的:循环嵌套。

举一个例子:找出100~200之间的素数,并打印在屏幕上。

代码语言:javascript
复制
int main()
{
	int i = 0;
	//循环产生100~200之间的数
	for (i = 100; i <= 200; i++)
	{
		//判断i是否为素数
		//判断2~i-1之间的数
		int j = 0;
		int flag = 1;//假设i为素数
		//flag作用是为了给一个变量,标记是不是素数
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
			printf("%d ", i);
	}
	return 0;
}
在这里插入图片描述
在这里插入图片描述

注意:在判断i % j == 0这里不能用if…else…格式来写,比如9不会被2整除,走else判断 flag == 1,但是9不是素数。

代码语言:javascript
复制
int main()
{
	int i = 0;
	//循环产生100~200之间的数
	for (i = 1; i <= 10; i++)
	{
		//判断i是否为素数
		//判断2~i-1之间的数
		int j = 0;
		int flag = 1;//假设i为素数
		//flag作用是为了给一个变量,标记是不是素数
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
			else
			{
				flag = 1;
				break;
			}
		}
		if (flag == 1)
			printf("%d ", i);
	}
	return 0;
}
在这里插入图片描述
在这里插入图片描述

11. goto语句

C语言提供了一种特殊的语法,就是goto语句和跳转标号,goto语句可以实现同一个函数内跳转到设置好的标号处。

例如:

代码语言:javascript
复制
int main()
{
	printf("hehe\n");
	goto next;
	printf("haha\n");

next:
	printf("跳过打印haha\n");
	return 0;
}

goto语句不仅可以向前跳,还可以向后跳,但会形成死循环。故goto循环使用不当,就会导致在函数内部随意乱跳,打乱程序的执行流程,所以尽量少用。但在多层循环代码中,想要快速跳转,使用goto非常方便。

结尾

往期回顾

基本魔法语言分支和循环 (一) (C语言)

结语:希望这些能帮助各位快速掌握分支和循环,同时期盼各位佬能给博主来个“一键四连”啦!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5. switch语句
    • 5.1 if语句和switch语句的对比
    • 5.2 switch语句中的break
    • 5.4 switch语句中的case和default的顺序问题
  • 6. while循环
    • 6.1 if和while的对比
    • 6.2 while语句的执行流程
  • 7.for循环
    • 7.1 语法形式
    • 7.2 for循环的执行流程
    • 7.3 for循环的实践
    • 7.4 while循环和for循环的对比
  • 8. do-while循环
    • 8.1 语法形式
    • 8.2 do-while循环的执行流程
    • 8.3 do-while的实例
  • 9. break和continue语句
    • 9.1 while循环中的break和continue
      • 9.1.1 break举例
      • 9.2.2 continue举例
    • 9.2 for循环中的break和continue
      • 9.2.1 break举例
      • 9.2.2 continue举例
    • 9.3 do-while中的break和continue
  • 10. 循环的嵌套
  • 11. goto语句
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档