C语言的switch语句与if语句

前言

C语言中的switch语句可以实现的代码,那么用if-else if语句同样也可以实现相同的代码,但是两种语句也有区别,接下来会先介绍两种语句的基本语法,然后具体分析它们的区别和联系。


一、switch语句的基本语法

switch(表达式){
			case   值1:
			    语句体1;
				 break;
			case   值2:
				语句体2;
				 break;
				 ...
			   default:
			   	语句体n;
			   	 break;
}

以上是switch语句执行的流程图一共分3步去执行:
第一步:先得到表达式的结果(这个结果指的是什么接下来会在switch语句的细节里提到)。
第二步:把第一步得到的结果与case后面的值进行直接匹配(而不是依次对比),如果有结果与case后的值相同,电脑就会执行这个相应case的代码;如果没有与结果匹配的,电脑就会执行default后面的值。
第三步:电脑执行switch语句从与结果匹配的case后代码开始或从default开始,知道遇到第一个break才会停止执行。

#include "stdio.h"
int main()
{
	int number;
	printf("欢迎在线上办理预订车票的相关业务\n");
	printf("请输入0~9中的一个数字:\n");
	printf("1 预定车票\n2 车票改签\n3 退票\n4 退出业务\n");
	scanf("%d",&number);
	switch(number){
			case 1:
				printf("你可以选择预定以下的车票");
				break;
			case 2:
				printf("你需要重新选择车票");
				break;
			case 3:
				printf("请慎重考虑再决定是否退票");
				break;
			case 4:	   /*选择输入4~9都是退出业务办理*/
			default:
				printf("欢迎下次光临");
				break;


	}
	return 0;


}

switch语句的细节

1.表达式的结果只能是字符整数中的一种类型,否则在编译器中会被报错就无法执行switch语句了。
2.所有case后面的值都不能重复而且每个case后面只能跟一个值
3.case后面只能是字符或整型的字面量(字面量就是常量,即case后面直接加 字符 或 整数)。
4.default可以写在switch语句的任何位置,因为只有表达式的结果没有直接匹配到有相应的case后才会执行default后面的代码。
5.case有穿透能力(化简switch语句的方法):但是“穿透”的方向只能是向下(当多个case后面或几个case和default的值虽然不同但是它们后面的代码相同时,可以省略前面case后面的代码,只是保留最后一个有相同代码的case后的或default那部分,也会使switch语句的执行达到相同的效果)。
6.case 值 和 default 加冒号(:)。
7.switch语句用一个花括号包起来{ },在其中遇到第一个break则switch语句结束,但如果除了该switch语句的{ }以外的代码那么也会同时被电脑执行。

#include "stdio.h"
int main()
{
	int num;
	printf("请输入一个数字:\n");
	scanf("%d",&num);
	switch(num){
		case 1:
			printf("你输入了1\n");
			break;
		case 2:
			printf("你输入了2\n");
			break;
		default:
			printf("无法识别出你输入的数字\n");
			break;

	}
	printf("我会执行@——@!");
	return 0;
	}

二.if-else if的基本语法

大家可以看这篇文章:python与c语言的if语句联系与不同添加链接描述

三.两者的联系与不同

1.联系

switch语句可以实现的,也可以使用if-else if语句实现,两者使用场景有相同的.

2.不同

switch语句:是根据switch后面表达式得到的结果与case后面的值直接匹配然后执行相应代码,若没有case与之对应就执行default的代码,可以概括为精准寻找,但是它是针对有限的case。

/*switch语句实现四季的判断*/
#include "stdio.h"
int main()
{int num;
printf("请输入1~12的整数:\n");
scanf("%d",&num);
switch(num){
		case 1:         /*此处使用了case的穿透*/
		case 2:
			printf("这是冬季");
			break;
		case 3:
		case 4:     
		case 5:
			printf("这是春季");
			break;
		case 6:
		case 7:
		case 8:
			printf("这是夏季");
			break;
		case 9:
		case 10:
		case 11:
			printf("这是秋季");
			break;
		case 12:
			printf("这是冬季");
			break;
			
}
		return 0;
}

在这里插入图片描述

if-else if语句:根据if之前给的条件按照从上到下的顺序依次匹配,没有符合的if和else if就会执行else的代码,可以概括为大范围寻找,但是if语句可以是对一个范围(可以多个)。
那么switch语句会比if-else if语句的执行效率更高(即相同意思的代码前者执行时间更少)

#include "stdio.h"
int main()
{
	int num;
	printf("请输入1~12的整数:\n");
	scanf("%d",&num);
	if(num==1||num==2||num==12){
			printf("这是冬季");
	}
	else if(num==3||num==4||num==5){
			printf("这是春季");
	}
	else if(num==6||num==7||num==8){
			printf("这是夏季");
	}
	else if(num==9||num==10||num==11){
			printf("这是秋季");
	}
return 0;
}

在这里插入图片描述

总结

switch语句在表达式结果(10个左右)有限时使用效率比使用if语句高,建议使用switch语句(switch语句编译时间更短);但是其表达式结果变多了,建议使用if语句更方便代码呈现。

感谢大家读到这里,要是大家有什么意见可以在评论区里提出来,我会积极听取的,我们一起加油!最后我有句很喜欢名言分享给大家:再长的路,一步步也能走完;再短的路,不迈开双脚也无法到达。——汪国真在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值