【C语言步行梯】分支语句if...else、switch详谈

🎯每日努力一点点,技术进步看得见

🏠专栏介绍:【C语言步行梯】专栏用于介绍C语言相关内容,每篇文章将通过图片+代码片段+网络相关题目的方式编写,欢迎订阅~~

文章目录


什么是语句?

C语言由;(分号)隔开的就是一条语句,举个例子↓↓↓

c 复制代码
printf("这是一行语句");
int a = 10;//这也是一个语句
;//虽然只有一个分号,但这也是语句,这种语句称为空语句

引入分支语句(选择结构)

生活中,我们有很多需要选择的情况。例如:你想喝品牌的可乐?百事还是可口可乐?为了满足选择需求,C语言就有了分支(选择)结构。

if语句

在我们坐公交车的时候,如果我们刷的是学生卡,此时卡机就会叫一声"学生卡~"。C语言该怎么实现这样的情景呢?

那我们就得先来认识一下单分支语句了,它的结构是这样的↓↓↓

c 复制代码
if()//括号内填判断条件
{
	//执行语句
}

以上面学生卡的例子来说,如果是学生卡则在频幕上打印"学生卡",代码实现如下

cpp 复制代码
if(isStudentCard)
{
	printf("学生卡~");
}

除了这种分支(选择)的场景,还有这么个场景:我去银行取钱,我的余额是100块,如果我取100,则会取钱成功;如果我取10000,则会取钱失败。

于是我们就有了双分支语句结构↓↓↓

c 复制代码
if()//括号内填写判断条件
{
	//满足条件则执行这里
}
else
{
	//不满足条件则执行这里
}

上面的取钱场景可以转化为下面这个代码↓↓↓

c 复制代码
//rest表示余额
//money表示要取的钱
if(money <= rest)
{
	//ATM吐钱
}
else
{
	//显示余额不足
}

关于if语句,还有最后这一种场景:我们考试的时候100-90分是优秀,89-70分是良好,69-60分是及格,小于60分是不及格。此时需要更多的分支,C语言就引入了多分支语句。它的格式如下↓↓↓

c 复制代码
if()//这里填写条件1
{
	//满足条件1执行这里
}
else if()//这里填写条件2
{
	//满足条件2执行这里
}
else if()//这里填写条件3
{
	//满足条件3执行这里
}
else
{
	//上述条件都不满足,执行这里
}

对于上面按分数划分等级的场景,我们可以写出如下代码↓↓↓

c 复制代码
if(score >= 90 && score <= 100)
{
	printf("优秀\n");
}
else if(score >= 70 && score < 90)
{
	printf("良好\n");
}
else if(score >= 60 && score < 70)
{
	printf("及格\n");
}
else
{
	printf("不及格\n");
}

下面给出一些小tips:

★ps:if...else if...else多分支语句中,可以有多个else if。

★ps:在填写括号中的条件表达式时,如果表达式的值非0,则表示真;如果表达式的值为0,则表示假。

★ps:if、else if、else的后面最多只能接1条语句,如果要接多条语句,需要使用大括号{}将所有语句括起来。

★ps:if...else...的匹配满足就近原则。例如下方代码,else与离它最近的if语句匹配,即与age>=60所在的if语句匹配,形成分支结构。

c 复制代码
if(age >= 18)
	if( age >= 60)
		printf("长者")
else
	printf("我和age>=60的if语句匹配");

经过上面的学习,我们拿几道题来练练手,Let's Go!【读者先自己写写,我们再一起对照对照】

练习1:编写程序判断一个数是否为奇数

c 复制代码
#include <stdio.h>

int main()
{
	int num = 0;
	scanf("%d", &num);
	if(num % 2 == 1)
	{
		printf("是奇数\n");
	}
	else
	{
		printf("不是奇数\n");
	}
	return 0;
}

练习2:Jammingpro想喝蜜雪冰城,Jammingpro输入他带的钱的数量,你帮他判断一下他能不能买得起5块钱的柠檬水

c 复制代码
#include <stdio.h>

int main()
{
	int money = 0;
	scanf("%d", &money);
	if(money >= 5)
	{
		printf("能买得起\n");
	}
	else
	{
		printf("买不起\n");
	}
	return 0;
}

switch语句

如果我们输入1表示星期一,输入2表示星期二,以此类推。如果使用if...else if...else的语句结构一定能够实现,但实现代码实在是太繁杂了。C语言中的switch语句就派上用场了,我们来看看它怎么判断星期↓↓↓

c 复制代码
switch(day)
{
	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;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期日\n");
		break;
	default:
		printf("输入有误\n");
		break;
}

其中switch后面的括号中可以填表达式,它将会和case子句后的整型、常量或者表达式进行匹配,如果匹配成功,则会执行对应case子句后面的代码;如果都无法匹配,则会执行default子句后面的代码。

★ps:上面case语句后面的break不可以省略。以day=6为例,它将和case 6相匹配,并打印"星期六",在遇到break语句时,将跳出整个switch语句。假如case 6子句下面没有break,则在打印完"星期六"之后,将会向后继续执行打印"星期日"的操作,直到遇到下一个break语句。

借助switch语句中,如果没有遇到break就会继续向后执行的特点,我们可以实现如下代码。这个代码中,day的数值表示星期,当输入1到5时,则会打印"工作日";输入6到7,则会打印"休息日";输入其他内容,则会打印"输入有误"。

c 复制代码
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;
}

★ps:default子句可以放在整个switch语句中的任意位置,不一定要放在最后面。

学完switch语句,那就我们来看一段代码,看看它的执行结果应该是什么【读者先想出结果,再一起对照一下】

c 复制代码
int main()
{
	int n = 1;
	int m = 2;
	switch(n)
	{
		case 1:
			printf("Jammingpro ");
		case 2:
			switch(m)
			{
				case 1:
					printf("ccc ");
				case 2:
					printf("is ");
					break;
				case 3:
					printf("strong!\n");
					break;
				default:
					printf("nice\n");
					break;
			}
		default:
			printf("handsome!\n");
			break;
	}
	return 0;
}

揭晓答案的时刻:"Jammingpro is handsome"。

解析:外层的switch语句中,n和case 1自己相匹配,打印完"Jammingpro "后,由于其后面没有break语句,将继续执行case 2中的内容。case 2中嵌套了switch语句,m和case 2自己想匹配,于是打印了"is ",因为内层case 2子句后面有break语句,将会跳出内层switch语句。外层switch的case 2后面没有break语句,它将继续执行default子句中的内容,打印出"handsome\n"。

🚩这篇文章结束了~~

如果文章中出现了错误,欢迎私信或留言。(๑•̀ㅂ•́)و✧

有任何疑问请评论或私信哦~~o( ̄▽ ̄)ブ

相关推荐
杨荧22 分钟前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
白子寰29 分钟前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++
王俊山IT41 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
为将者,自当识天晓地。43 分钟前
c++多线程
java·开发语言
小政爱学习!1 小时前
封装axios、环境变量、api解耦、解决跨域、全局组件注入
开发语言·前端·javascript
k09331 小时前
sourceTree回滚版本到某次提交
开发语言·前端·javascript
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
Themberfue1 小时前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
plmm烟酒僧1 小时前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv
EricWang13581 小时前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端