分别与轮回:C语言的分支循环语句(二)

文章目录

思维导图

前言

一、分支语句:if和else语句

1、语法结构

2、分支中包含多条语句

3、嵌套if语句

3. 1嵌套于if语句中

3. 2嵌套于else语句中

二、分支语句:switch语句

1、switch语句中的break

2、switch语句中case的合并

3、switch语句中的default

总结


思维导图

分别与轮回:C语言的分支循环语句(二)_第1张图片


前言

上一篇文章我们主要了解了C语言的三种结构(顺序结构、选择结构、循环结构),并且学习了关系操作符、条件操作符、逻辑运算符一类重要的操作符。

关系操作符是用于比较的操作符;条件操作符是需要接受三个操作数的三目操作符;逻辑运算符用来表示日常交流中的“并且”,“或者”,“除非”等思想。

复习了上一篇内容,本篇文章将带领大家了解如何使用if, switch语句来实现选择(分支)结构

(如果对其相关概念还不了解的同学,可以先行阅读上一篇文章,本篇文章将会用到上一篇讲过的知识)


一、分支语句:if和else语句

1、语法结构

“if”一词在英语中表示“如果”,与其对应的是表示“否则”的“else”。在“如果”后面我们通常会进行一个简单的判断。例如,“如果我期末绩点高,妈妈会给我加压岁钱,否则压岁钱会被没收”,这里我们可以看见一个简单的语法结构:

if (表达式:“期末绩点超过4.0”)
   语句1:“加压岁钱”
else
   语句2:“压岁钱不变”

很明显,“期末绩点超过4.0”这个表达式可以构成一个判断语句,用于判断“期末绩点是否超过4.0”,如果超过,返回值为1,则执行语句1:“加压岁钱”;如果未超过,返回值为0,则执行语句2:“压岁钱不变”。

大致了解语法结构后,我们可以将上述例子改写为一段C语言代码:

#include 
int main()
{
	float GPA = 0;
	scanf("%f", &GPA);
	if (GPA >= 4.0)
		printf("加压岁钱");
	else
		printf("压岁钱不变");
		return 0;
}

值得一提的是,我们也可以将判断语句直接替换为返回值,如果返回值为非0数则执行if语句,否则执行else语句。

2、分支中包含多条语句

C语言默认在 if 和 else 语句中默认都只控制⼀条语句,这条万年不变的法则也给很多小萌新(包括作者在内)挖了坑。

话不多说,举个栗子

#include 
int main()
{
	float GPA = 0;
	scanf("%f", &GPA);
	if (GPA >= 4.0)
		printf("加压岁钱");
		printf("简直泰裤啦!");
		return 0;
}

运行代码后你会发现,无论输入大于还是小于4.0,就算输入2.0,也会打印结果“简直泰裤啦!”,但这样做显然会挨板子。

分别与轮回:C语言的分支循环语句(二)_第2张图片

于是,为了避免掉入陷阱(也为了避免挨板子),我们就要让if和else控制多条语句。怎么办呢?很简单,我们只需要在if或者else后面加上{}将需要控制的语句包含进来。

#include 
int main()
{
	float GPA = 0;
	scanf("%f", &GPA);
	if (GPA >= 4.0)
	{
		printf("加压岁钱");
		printf("简直泰裤啦!");
	}
	return 0;
}

这样子当我们输入小于4.0的数字时就不会打印任何信息,有效避免了一场大战。所以建议读者无论if或else是否需要控制多条语句,都将被控制语句用{}包含进去,让逻辑更清晰

3、嵌套if语句

当然在我们实际应用中遇到情况显然比简单的两种情况复杂得多。例如,如果我的绩点小于2.0的话,压岁钱显然不会不变,还有可能减少。因此,下面将为大家介绍两种嵌套if语句的方法:

3. 1嵌套于if语句中

#include 
int main()
{
	float GPA = 0;
	scanf("%f", &GPA);
	if (GPA <= 4.0)
	{
		if (GPA <= 2.0)
			printf("减压岁钱");
		else
			printf("压岁钱不变");
	}
	else
		printf("加压岁钱");
	return 0;
}

当我们输入2.0时,会首先进入判断表达式“GPA<=4.0”是否成立,判断成立后进入第一个if控制的大括号内,接着判断表达式“GPA<=2.0”是否成立,判断成立后就会打印“减压岁钱”,运行结果如下:

分别与轮回:C语言的分支循环语句(二)_第3张图片

虽然这样的嵌套方式很容易理解,但是当嵌套次数增多时便不利于阅读,于是我们通常采用将if语句嵌套于else语句中

3. 2嵌套于else语句中

如果将if语句嵌套在else语句中,我们便可以舍弃大括号,并且让代码逻辑更易理解

分别与轮回:C语言的分支循环语句(二)_第4张图片

我们发现代码中阴影部分其实和3.1中嵌套的if语句完全相同,但代码更容易阅读和理解,所以作者推荐采取将if语句嵌套于else语句中。

二、分支语句:switch语句

当然,发明分支语句的前辈们发现在表达式返回值情况较多的情况下,与其让计算机不断地做像“if…else…”这样的判断题,不如让计算机自己选择执行对应返回值下的语句。于是,switch语句便诞生了。

“switch”一词在英语中表示“开关”,可以理解为当返回值有对应语句时,我就打开它的开关,开始执行这条语句。

举个栗子:

1、switch语句中的break

“break”一词在英语中表示“休息,中断”,在switch语句中不可或缺!为什么这样说呢?请看下面这个错误栗子:

分别与轮回:C语言的分支循环语句(二)_第5张图片

我们可以发现,打印结果显然与我们预想的不同,为什么呢?原因是只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某一个 case 语句的后边没有 break 语句,代码会继续玩下执行,有可能执行其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。

因此只有当我们在switch中加上break才能够实现真正的分支。

分别与轮回:C语言的分支循环语句(二)_第6张图片

2、switch语句中case的合并

一些情况下,某些case对应的执行语句相同,此时我们可以将其合并

于是我们可以将上述代码改写如下:

分别与轮回:C语言的分支循环语句(二)_第7张图片

此时返回值为1、2、3时对应的都是打印“它不是4的倍数”,并且代码也更加简洁。

3、switch语句中的default

“default”一词在英语中表示“缺省值,缺席”的意思。在C语言中,我们会遇到switch 后的表达式中的值无法匹配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加入 default 子句。

如果返回值无法在case中找到对应情况,则执行default语句。

举个栗子:

#include 
int main()
{
	int num = 0;
	scanf("%d", &num);
	switch (num % 4)
	{
	case 0:
		printf("太棒了!我找到了4的倍数\n");
		break;
	case 1:
		printf("它减1是4的倍数");
		break;
	default:
		printf("它本身和它减1都不是4的倍数\n");
		break;
	}
	return 0;
}

当然default子句的位置不一定必放在case后。甚至,放在case中间或者在所有case前都不会影响代码运行结果。不过我们通常是把 default 子句放在最后处理的。

总结

本篇文章我们主要讲了两种分支语句:if语句和switch语句。他们的对应语法和逻辑结构也略有不同。

if语句的重点在于嵌套方式的理解,合理的嵌套方式可以帮助我们更方便地阅读代码和提升效率。

switch语句的重点在于对它表述逻辑的理解,用break实现分支,合并case简化代码,引入default语句对应case中所不包含的情况。

然而,计算机在遇到分支语句时会输出不同的结果,但人遇到不同的人生选择时就会走上不同的道路。所以,希望读者在遇上人生分支语句之前,珍惜当下还在一起的人。因为尽管在代码中分支语句可有可无,但在人生中学会分别却是一门必修课。

下一篇内容我们将深入讲解使用while循环、for循环和do-while循环来实现循环结构。

由于作者时间有限,每篇内容也需花费较多时间撰写,后续内容将不定期更新,记得关注哦~

如果发现文章中表述存在错误或有疑问,欢迎私信作者或者在评论区留言~

你可能感兴趣的:(C语言,c语言,开发语言)