C语言的分支语句( if 与 switch语句 )

C语言的分支语句( ifswitch

众所周知,C语言是结构化的编程设计语言,它可以实现顺序结构、选择结构、循环结构这三种结构。所以,本人在此总结了一些C语言的分支语句,以便大家来了解C语言关于选择结构的知识。
其实,我们可以使⽤ if 、 switch 实现分⽀(选择)结构,使⽤ for 、 while 、 do while 实现循环结构。

分支语句(选择语句)

关于 if 语句

以下单个 if 的程序执行情况:

单个 if 的程序执行情况
例如:一家公司的基础月工资为5000,若员工业绩不小于90分,则加薪1000,求员工评分与工资的关系。
代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int score = 0;
	while (scanf("%d", &score) != EOF)
	{
		int wage = 5000;
		if (score >=90)
		{
			wage += 1000;
		}
		printf("工资为%d元\n", wage);
	}
	return 0;
}
若发生两种选择我们就要用到“if…else…”语句:

例如:
我们现在要判断某一年是否为闰年,由常识可知满足闰年的条件为
1.公历年份是4的倍数且不是100的倍数为普通闰年
2.公历年份是整百数的,必须是400的倍数才是世界闰年
而年份只有闰年和非闰年,所以判断代码可以如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int year = 0;
	while ((scanf("%d", &year)) != EOF)
	{
		if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
		{
			printf("%d为闰年\n", year);
		}
		else
			printf("%d不为闰年\n", year);
	}return 0;
}
如果要表示多种选择使用嵌套if

也就是说在"if… else…" 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
如图所示,
在这里插入图片描述

例如:我们现在来表示大部分原神玩家在不同等级的现状,代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int grade = 0;
	while (scanf("%d", &grade) != EOF)
	{
		if (grade > 0 && grade < 61)
		//判断合理等级(1--60级)
		{
			printf("该玩家");
			if (grade <= 16 && grade > 0)//1--16
				printf("啥都不懂,任务做不完,只会锄大地并被派蒙拉回去\n");
			else if (grade < 46)//17--45
				printf("经常有大佬来光顾,靠一点资源就能抱大腿拿世界boss材料\n");
			else if (grade < 51)//46--50
				printf("喜欢联机刷本的团队协作感,喜欢去萌新世界串门\n");
			else if (grade < 56)//51--55
				printf("依然喜欢刷本,最喜欢心海将军阿贝多2命钟离摆烂\n");
			else if (grade < 60)//56--59
				printf("已经基本不会去萌新世界串门,除非缺材料,偶尔会联机,初步进入摆烂状态\n");
			else//60
				printf("“大佬,菜菜,求带”(派蒙吃惊表情包)\n");
		}
		else//不合理等级
			printf("游戏无输入等级\n");
	}
	return 0;
}

这就是嵌套if的基本用法。
嵌套if
例如,上⾯的代码中绿⾊背景的代码也是嵌套在 if 语句中的,构成了嵌套的 if 语句。
所以有了嵌套 if 语句,就可以完成更多复杂逻辑的判断。

到这里关于C语言if语句的基础介绍就此为止了,下面我们来看看switch语句的相关用法与说明

关于 switch 语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。
switch 语句是⼀种特殊形式的 if…else 结构,⽤于判断条件有多个结果的情况。它把多重
else if 改成更易⽤、可读性更好的形式。

switch (expression) 
{
	case value1: statement
	case value2: statement
	default: statement
}

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,
就执⾏ default 分⽀。
例如,可以利用switch语句来表示原神中几颗星代表什么颜色
(1星——白色;2星——绿色;3星——蓝色;4星——紫色;5星金色)代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int grade = 0;
	while (scanf("%d", &grade) != EOF)
	{
		switch (grade)
		{
		case 1:
			printf("白色\n");
			break;
		case 2:
			printf("绿色\n");
			break;
		case 3:
			printf("蓝色\n");
			break;
		case 4:
			printf("紫色\n");
			break;
		case 5:
			printf("金色\n");
			break;
		default:
			printf("输入错误\n");
			break;
		}
	}
	return 0;
}

需要注意的是:

  1. switch 后的 expression 必须是整型表达式
  2. case 后的值,必须是整形常量表达式
  3. casedefault两者没有顺序之分,一定是判断完case语句之后,再判断default语句
switch语句中的break的作用

假如说,上述代码中没有"break;"我们运行代码后可以看到图中的后者
在这里插入图片描述
我们发现,程序原本只要输入“白色”即可,但是我们发现程序运⾏的结果却将所有的可能进行了输入。原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句。

如果某⼀个 case 语句的后边没有 break 语句,代码会继续向下执⾏,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 多余的case语句。

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

当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。我们再来看一个事例:
用C语言表示一个星期的第几天为工作日还是休息日,代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int day = 0;
	while (scanf("%d", &day) != EOF)
	{
		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");
		}
	}
	return 0;
}

所以说,breakswitch中的作用也是十分重要的。

if语句和switch语句的对⽐

将上述代码更换成if语句,代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int day = 0;
	while (scanf("%d", &day) != EOF)
	{
		if (day < 6 && day > 0)//1--5
			printf("工作日\n");
		else if (day > 5 && day < 8)//6--7
			printf("休息日\n");
		else
			printf("输入错误\n");
	}
	return 0;
}

两种代码都可实现分⽀结构,双方在不同的地方各有优势,这需要我们根据自己的经验来判断了。

至此,关于C语言基础的分支(选择)语句的介绍就到这里结束了,谢谢观看。

下期介绍:C语言的循环语句( while,for与 do-while循环 )

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒋志昂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值