【c语言】switch语句的使用和运用(例题讲解)及其与if语句的联系

选择结构当中除了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();	 
}

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值