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;
}
写代码的过程也许会有些枯燥,但是当程序成功的跑了起来,我们的内心也会充满喜悦。