【C语言】以深厚地基筑伟岸高楼-基础篇(五)

本文深入分析了switch-case语句的结构、作用及break关键字的重要性。通过实例展示了如何使用switch-case实现百分制成绩到五分制的转换,以及输出月份英文单词的功能,揭示了switch-case在特定场景下比if-else更高效的特点。同时,文章指出在适当情况下,多个case可以共用一个break,以实现特定逻辑。
摘要由CSDN通过智能技术生成

switch-case语句再分析

大致格式:
switch ( 控制表达式 ) {
case 常量:
语句;
……
break;
case 常量:
语句;
……
break;
default:
语句;
……
break;
}

  • 这就是一个基本的switch-case语句切记冒号不能丢
  • 强调!switch-case中的控制表达式的结果只能是整型的
  • 其内的常量可以是表达式,也可以是常数计算的表达式
  • 如果用const定义一个整型的常量,并且放在case后边,这也是可以的,但是这个是C99标准下才可以使用的
  • switch case 比if else 级联语句更聪明
    级联的if else 是一个一个的去试,去匹配对不对,而switch case 是直接寻找匹配case ,
    但是!!switch case 语句只能用int类型定义一个变量。
  • switch语句可以看作是一种基于计算的跳转,计算控制表达式的值后,程序会跳转到相匹配的case(分支符号)
    处。分支符号只是说明switch内部位置的路标,在执行完分支中的最后一条语句后,如果后面没有break,
    就会顺序执行到下面的case里去,知道遇到一个break,或者switch结束为止。

break的作用

在switch -case语句运行过程中,运行进展就相当于公交车,而case就相当于站牌,case不能阻止程序往下运行,只有break可以
一般来讲,我们会为每一个case都配一个break,但只有在特殊情况(我们想利用break的特性,使两个或者多个case做相同的事情)下,我们才会去为多个case配一个case。

借鉴一个题目

该题目出自沈睿(浙大)

本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:

大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:

输入在一行中给出1个整数的百分制成绩。

输出格式:

在一行中输出对应的五分制成绩。

输入样例:
90
输出样例:
A

我们来用级联的if-else来写一下这道题:

#include <stdio.h>
int main()
{
	int t = 0 , A , B , C , D , E;
	printf("请输入成绩:");
	scanf("%d", &t);
	if ( t >= 90){
		printf("你的成绩属于A等\n", t);}
	else if ( t >= 80 ){
		printf("你的成绩属于B等\n", t);}
	else if ( t >= 70){
		printf("你的成绩属于C等\n", t);}
	else if ( t >= 60){
		printf("你的成绩属于D等\n", t);}
	else if ( t<60){
		printf("你的成绩属于E等\n", t);
	}
	
	return 0;
}

再来用switch-case语句来写一下这道题:

#include <stdio.h>
int main()
{
	int grade ;//此代码不符合单一出口原则
	//在学习字符与字符串的处理后可再自行更新 
	printf("请输入你的成绩:");
	scanf("%d", &grade);
	grade = grade / 10;
	switch (grade){
	case 10:
	case 9:
		printf("你的成绩为A等!\n");
		break;
	case 8:
		printf("你的成绩为B等!\n");
		break;
	case 7:
		printf("你的成绩为C等!\n");
		break;
	case 6:
		printf("你的成绩为D等!\n");
		break;
	default:
		printf("你的成绩为E等!\n");
		break;
	}
	return 0;
}

在用switch-case语句写这道题时,我们可以发现 case10 与 case9 所对应的语句是一样的,这就是我们所说的多个 “case 常量:” 配一个 “ break ” 的情况。同时,通过这个案例,我们也可以理解在某些情况下if语句与switch语句是可以相互转化的。

用switch语句做小题目

输入月份对应的数字,输出月份的英文单词。
代码如下:

#include <stdio.h>
int main()
{
	printf("请输入月份:");
	int month;
	scanf("%d", &month);
	switch (month){
		case 1:printf("January\n");break;
		case 2:printf("Febeuary\n");break;
		case 3:printf("march\n");break;
		case 4:printf("April\n");break;
		case 5:printf("May\n");break;
		case 6:printf("June\n");break;
		case 7:printf("July\n");break;
		case 8:printf("August\n");break;
		case 9:printf("September\n");break;
		case 10:printf("October\n");break;
		case 11:printf("November\n");break;
		case 12:printf("December\n");break;
	}	
	return 0;
}

写代码的过程也许会有些枯燥,但是当程序成功的跑了起来,我们的内心也会充满喜悦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值