switch语句中break的巧⽤
  ⼤家都知道,break的作⽤就是终⽌它所在的switch语句后循环语句的执⾏。在这⾥呢,我们不去探讨break在循环⾥的终⽌作⽤,也不去回忆在循环⾥是跳出本层循环,不去研究它与continue或者return的区别。在这⾥,我们简简单单的谈⼀下,它在switch语句中的利⽤。
  有这样⼀道编程题⽬:输⼊某年某⽉某⽇三个值,判断这是这⼀年的第⼏天。⼀般的情况,我们会这样写代码:
#include<stdio.h>
void main()
{
int year,month,day,num;
printf("请任意输⼊年⽉⽇:");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)
{
case1:num=day;
break ;
case2:num=31+day;
break;
case3:num=day+28+31;
break;
case4:num=day+28+31+30;
break;
case5:num=day+28+31+30+31;
break;
case6:num=day+28+31+30+31+30;
break;
case7:num=day+28+31+30+31+30+31;
break;
case8:num=day+28+31+30+31+30+31+31;
break;
case9:num=day+28+31+30+31+30+31+31+30;
break;
case10:num=day+28+31+30+31+30+31+31+30+31;
break;
case11:num=day+28+31+30+31+30+31+31+30+31+30;
break;
case12:num=day+28+31+30+31+30+31+31+30+31+30+31;
break;
}
if((year%4==0&&year%100!=0)||(year%400==0))
{
if(num>31+28)
num=num+1;
}
printf("输出的年⽉⽇为这⼀年的第%d天\n",num);
}
code1
  上述代码的基本思想就是先不考虑闰年和平年,以⽉为switch执⾏的判断式,逐⽉累加,得到结果,最后再判断闰年,天数加1.上述代码呢,也⽆所谓不好,但是case语句下,越到后⾯重复越多,累加效果⽉明显。那么,我们就可以这样考虑,放弃break的跳出功能,每⼀⽉都是在上⼀个⽉的基础上,加上上⼀⽉对应的天数。这样,我们便得到的下⾯的代码:
#include <stdio.h>
void main()
{
int year,month,date,day = 0;
printf("请输⼊年⽉⽇,⽤逗号分隔:");
scanf("%d,%d,%d",&year,&month,&date);
switch(month)
{
case12:
day += 30;
case11:
day += 31;
case10:
day += 30;
case9:
day += 31;
case8:
day += 31;
case7:
day += 30;
case6:
day += 31;
case5:
day += 30;
case4:
day += 31;
case3:
day += 28;
case2:
day += 31;
case1:
day += date;
}
if(month > 2)
{
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
day += 1;
}
}
printf("这是该年的第%d天\n",day);
}
Code2
switch语句必须使用break吗  代码相⽐上⾯的,简洁不少。⽽且,巧⽤break也是你的代码较之他⼈有不同之处。这样的⼩技巧,在我们平时的代码中,应该多思考思考。