带你窥探分支和循环语句全貌——这一篇就够了

前言

在C语言中,语句可分为5类:表达式语句、函数调用语句、控制语句、复合语句、空语句。本篇将详细介绍控制语句。
控制语句用于控制程序的执行流程,以实现程序的各种结构方式(顺序结构、循环结构、选择结构),它们由特定的语句定义符组成。
C语言有9种控制语句,可分为以下三类:

  1. 条件判断语句也叫分支语句:if语句、switch语句
  2. 循环执行语句:do while语句、while语句、for语句
  3. 转向语句:break语句、goto语句、continue语句、return语句

1.分支语句(选择结构)

大学好好学习,校招拿到好offer,走上人生巅峰,迎娶白富美;不好好学习,毕业回家卖红薯;或其他。
这就是选择。
在这里插入图片描述

1.1 if语句

在C语言中,if语句即可以实现单分支,又可以实现多分支。那语法结构是怎么样呢?

//语法结构
//单分支
if(表达式)
     语句;
//多分支
if(表达式)
	语句1;
else
	语句2;
//更多分支
if(表达式1)
	语句1;
else if(表达式)
	语句2;
else
	语句3;

Tips:

  • 在C语言中,如果表达式结果为真,则语句执行。而C语言规定0表示假,非0表示真
  • 如果上述表达式成立,要执行多条语句,要将代码块放在{ }中
  • 当出现悬空else时,else和离它最近的if匹配,而非和它对其的else匹配
  • 在判断常量表达式时(例如判断5和sum是否相等),建议读者写成5==sum(这样写可以防止读者在实际写代码的过程中,少写一个=,把判断语句写成赋值语句)

1.2 switch语句

switch语句也是一种分支语句,常常用于多分支的情况
比如如果出现以下情况:
输入4-7,相应的输出星期四到星期七。
如果我们写成if…else if…else if…这种形式,无疑太过复杂。而C语言给出了一种好的解决方法——switch语句

//switch语句
switch(整形表达式)
{
    
    
	语句项;		//语句项是一些case语句
}				//如下:
				//case 整型表达式:
				//		语句;

1.2.1 在switch语句中的break

在switch语句中,我们没办法直接实现分支,搭配break后才能实现真正的分支。
例如:我们要求输入4和5,输出weekday;输入6和7,就输出weekend
我们的代码可以这样实现:

#include <stdio.h>
int main()
{
    
    
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
    
    
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekend\n");
		break;
	}
	return 0;
}
  • break的实际效果是将语句列表分为不同的分支部分
  • switch()中只能是常量表达式
  • 编程好习惯在最后一个case语句后加一条break语句。(这样写可以避免在以后自己或他人要修改该代码时,在以前的最后一个case语句后面忘记添加break语句)

1.2.2 default语句

在实际过程中,如果表达式的值与所有的case标签的值都不匹配要怎么办呢?
其实也没什么,结构就是跳过所有语句罢了。但有意思的是, 程序并不会停止也不会报错(这种情况下,C不认为是个错误)。
如果不想忽略不匹配的所有标签,我们可以在语句列表中添加一条default语句。

  • 当switch表达式的值并不匹配所有case标签的值时,default后面的语句就会执行。

  • 每一个switch语句只能出现一条default语句

  • default语句可以出现在语句列表中的任何位置,执行时会像执行case标签一样执行default语句

  • 编程好习惯在每一个switch语句中加一个default语句,甚至可以在后面再加一个break语句。

2. 循环语句

  • while
  • for
  • do while

下面我们来看一个简单的循环
在这里插入图片描述

2.1 while循环

在生活中很多情况是:同一件事需要完成多次,而if语句只能执行一次,那要怎么办呢?
C语言引入了while语句可以实现循环

while 语法结构:

while (表达式)
	循环语句;

while语句的执行流程图:

在这里插入图片描述
Instance:如何在屏幕上打印1-10的数字。
我们可以这样实现:

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

2.1.1 while语句中的break

break介绍

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

这些代码输出结果是什么呢?

在这里插入图片描述
总结:
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环,所以while中的break是用于永久终止循环的

2.1.2 while语句中的continue

continue介绍

//continue  代码实例
#include <stdio.h>
int main()
{
    
    
	int i = 0;
	while (i < 10)
	{
    
    
		i = i + 1;
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

这段代码只是把break改成continue,代码输出结果是什么呢?

在这里插入图片描述

运行代码后我们发现除5之外,其他数字都正常输出。
总结:
continue在while中的作用就是:

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

2.2 for循环

首先我们来看for循环的语法:

2.2.1 语法

for(表达式1:表达式2:表达式3)
	循环语句;		
//表达式1为初始化部分,用于初始化循环变量的。
//表达式2为条件判断部分,用于判断循环什么时候终止
//表达式3为调整部分,用于循环部分的调整

for循环的执行流程图:
在这里插入图片描述

Tips:

  • 对比for循环和while循环,我们可以发现while循环中依然存在循环的三个必要条件,但由于风格的问题使得while循环的3个部分可能偏离较远,导致查找修改不够集中和方便。所以for循环的风格更甚一筹,使用频率也跟高

  • 在for循环中,break和continue得意义和while循环是一样的。

  • 建议1:不可在for循环体内修改循环变量,防止for循环失去控制。

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

2.2.2 一些for循环变种

我们来看以下4段代码,看看结果如何,打印多少个hehe。

#include <stdio.h>
int main()
{
    
    
	//代码1
	for (;;)
	{
    
    
		printf("hehe\n");
	}
	//代码1运行,会死循环打印hehe

	//代码2
	int i = 0;
	int j = 0;
	for (; i < 10; i++) 
	{
    
    
		for (; j < i; j++)
		{
    
    
			printf("hehe\n");	//j初始化省略,j在第一次循环结束后会,不会从0开始,而是保持原来的值
		}
	}
	//代码2运行,打印10个hehe

	//代码3——使用多哥变量控制循环
	int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; x++, y++)
	{
    
    
		printf("hehe\n");
	}
	//代码3运行,打印2个hehe
	return 0;
}
  1. for循环中,初始化和调整部分的省略就是什么都不做。
  2. for循环中,判断部分的省略意味着判断恒为真。

2.3 do…while()循环

2.3.1 do语句的语法

do
	循环语句;
while(表达式);

2.3.2 执行流程

在这里插入图片描述

2.3.3 do语句的特点

do语句循环时,至少执行一次,但场景有限,所以不经常使用。

#include <stdio.h>
int main ()
{
    
    
	int i = 1;
	do
	{
    
    
		printf("%d ", i);	//不管如何,先执行代码块中内容,在判断是否在执行
		i++;
	} while (i <= 10);
	return 0;
}

- do while语句中的break和continue的意义和while语句以及for语句效果是一样的。

3.goto语句

C语言提供了可以随意滥用的goto语句和标记跳转的标号。理论上goto语句是没有必要的,实践中没有goto语句也可以很容易写出代码。但在某些场合下,goto语句还是可以用的着的,最常见的用法就是终止程序在某些深度嵌套的结构处理过程中。
例如:一次跳出两层或多层循环。(多层循环这种情况下使用break是达不到目的的,它只能从内层循环退出到上一层循环)

goto语句真正适合的场景如下:

for (...)
{
    
    
	for (...)
	{
    
     ...
		for (...)
		{
    
    
			if (disaster)
				goto error;
		}
	}
}
error:
	if(disaster)
		//处理错误情况

结尾

本篇文章到这就结束了,希望能帮读者更好的了解控制结构的全貌,建立一个完整逻辑框架。创作不易,如果觉得本篇文章对你有帮助,记得点赞加关注哦。感谢你的支持!
C简单程序详解,带你快速入门C语言

猜你喜欢

转载自blog.csdn.net/Zhenyu_Coder/article/details/130283326
今日推荐