码迷,mamicode.com
首页 > 其他好文 > 详细

switch语句中break的巧用

时间:2014-08-25 18:50:04      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   ar   art   div   

 

  大家都知道,break的作用就是终止它所在的switch语句后循环语句的执行。在这里呢,我们不去探讨break在循环里的终止作用,也不去回忆在循环里是跳出本层循环,不去研究它与continue或者return的区别。在这里,我们简简单单的谈一下,它在switch语句中的利用。

  有这样一道编程题目:输入某年某月某日三个值,判断这是这一年的第几天。一般的情况,我们会这样写代码:

bubuko.com,布布扣
#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的跳出功能,每一月都是在上一个月的基础上,加上上一月对应的天数。这样,我们便得到的下面的代码:

bubuko.com,布布扣
#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的巧用

标签:style   blog   http   color   os   io   ar   art   div   

原文地址:http://www.cnblogs.com/angel-see-love/p/3935364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!