首页 > 代码库 > switch语句中break的巧用

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)    {        case 1:num=day;        break ;        case 2:num=31+day;        break;        case 3:num=day+28+31;        break;        case 4:num=day+28+31+30;        break;        case 5:num=day+28+31+30+31;        break;        case 6:num=day+28+31+30+31+30;        break;        case 7:num=day+28+31+30+31+30+31;        break;        case 8:num=day+28+31+30+31+30+31+31;        break;        case 9:num=day+28+31+30+31+30+31+31+30;        break;        case 10:num=day+28+31+30+31+30+31+31+30+31;        break;        case 11:num=day+28+31+30+31+30+31+31+30+31+30;        break;        case 12: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)    {        case 12:            day += 30;         case 11:            day += 31;         case 10:            day += 30;         case 9:            day += 31;         case 8:            day += 31;         case 7:            day += 30;         case 6:            day += 31;         case 5:            day += 30;         case 4:            day += 31;         case 3:            day += 28;         case 2:            day += 31;         case 1:             day += date;     }         if(month > 2)    {        if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)        {            day += 1;            }            }        printf("这是该年的第%d天\n",day); }  
Code2

  代码相比上面的,简洁不少。而且,巧用break也是你的代码较之他人有不同之处。这样的小技巧,在我们平时的代码中,应该多思考思考。

switch语句中break的巧用