选择结构当中除了if语句外,还有switch语句可以实现其功能。
那么就要了解switch语句及其使用。
switch语句的一般格式如下:
switch(表达式)
{
case 常量表达式1: 语句序列1;break;
case 常量表达式2: 语句序列2;break;
......
case 常量表达式n: 语句序列n;break;
default:语句序列n+1;
}//当表达式的值为常量表达式1的值时,输出语句序列1.
我们可以观察到switch-case语句中,表达式的值决定输出的语句序列。所以在写switch语句,我们要规定表达式是什么以及case后面的表达式的常量值是什么,但是switch和case后面的表达式是有说明的。
说明如下:
(1)switch后面的表达式可以是int,char以及枚举类型的任意一种
(2)case后面一定要是常量,且各个值必须要是不同
(3)一般我们会在语句序列的末尾加上break,以结束switch语句
(4)用switch语句实现的语句也可以用if语句或if的嵌套式来实现
例一 :标准体重=身高-110,超过标准体重5kg为过胖,低于5kg为过瘦,输入某人的身高和体重,判断标准,过胖,过瘦。请用switch语句实现。
#include<stdio.h> void main() { int height,weight; int standard,gap; scanf("%d %d",&height,&weight); standard=height-110; if((standard-weight)==0)gap=0; if((standard-weight)>5)gap=1; if((standard-weight)<5&&(standard-weight)!=0)gap=2; switch(gap) { case 0:printf("标准体重\n");break; case 1:printf("过瘦\n");break; case 2:printf("过胖\n");break; } }
我们知道能用switch语句编写的程序也能用if语句编写:
#include<stdio.h> void main() { int height,weight,standard; printf("请输入你的身高和体重:\n"); scanf("%d %d",&height,&weight); standard=height-110; if(standard-weight==0) printf("标准体重\n"); else if((standard-weight)>5) printf("过瘦\n"); else printf("过胖\n"); }
对于这道题目来说,switch语句与if语句对比,if语句更为简便和灵活一些,我们可以发现if语句不用对if后面的表达式赋一个常量。
一般而言,if语句会简便一些,但有些程序逻辑性较强,我们就可以考虑用switch语句。
例二:输入某年某月某日,判断这一天是这一年的第几天
简单的分析一下:关键是对month的确定,我们可以switch(month),month从1到12,会有day的累加,对day的确定,我们就要考虑year是否为闰年。
代码如下:#include<stdio.h> void main() { int day,month,year,sum,leap; printf("请输入年月日:\n"); scanf("%d,%d,%d",&year,&month,&day); switch(month) { case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break; case 4:sum=90;break; case 5:sum=120;break; case 6:sum=151;break; case 7:sum=181;break; case 8:sum=212;break; case 9:sum=243;break; case 10:sum=273;break; case 11:sum=304;break; case 12:sum=334;break; default:printf("date error");break; } sum=sum+day; if(year%400==0||(year%100!=0&&year%4==0))//判断是否为闰年 leap=1; else leap=0; if(leap==1&&month>2) sum++; printf("这是这一年的第%d天\n",sum); }
我们可以明显发现思路非常清晰。
总结:switch语句可以处理判断分支较多的类型,可读性更好,以及逻辑清晰
switch语句与if-else语句结合使用,也会让思路变得清晰,得到很好的效果
例三:输入星期几的第一个字母来判断是星期几,如果两个单词第一个字母,则判断第二个字母
简单分析:星期一到星期天的首两个字母分别为:mo,tu,we,th,fr,sa,su,对于这种情况,我们就可以switch(letter),当letter为's'时,
就用if-else语句来确定下一个字母为'a'还是'u',同理,letter为't'一样。其它按正常的case来写。#include<stdio.h> void main() { char letter; printf("请输入一个星期的字母\n"); while((letter=getch())!='y')//直到输入y结束 { switch(letter) { case 's':printf("请输入第二个字母"); if((letter=getch())=='a') printf("saturday\n"); else if((letter=getch())=='u') printf("sunday\n"); else printf("data error\n"); break; case 't':printf("请输入第二个字母"); if((letter=getch())=='u') printf("tuseday\n"); else if((letter=getch())=='h') printf("thursday\n"); else printf("data error\n"); break; case 'm':printf("monday\n");break; case 'w':printf("wednesday\n");break; case 'f':printf("friday\n");break; } } getchar(); }