美文网首页
WarMj:求出并设置 y 年 m 月 d 日的前一天或后一天的

WarMj:求出并设置 y 年 m 月 d 日的前一天或后一天的

作者: WarMj | 来源:发表于2017-07-23 23:18 被阅读0次

    这次代码的编写让我意识到自己的归纳总结能力实在是太差了。

    个人代码

    #include<stdio.h>
    #include<stdlib.h>
    
    void tomorrow(int *y, int *m, int *d)
    {
        //判断30和31号,没有2月 
        if(*d > 29)
        {
            //小月的30号 
            if(*m == 4 || *m == 6 || *m == 9 || *m == 11)
            {
                *m += 1;
                *d = 1;
            }
            //大月的30号 
            else
            {
                *d += 1;
            } 
            
            //31号 
            if(*d == 31)
            {
                //12月31号 
                if(*m == 12)
                {
                    *y += 1;
                    *m = 1;
                    *d = 1;
                }
                //其他大月 
                else
                {
                    *m += 1;
                    *d = 1;
                }
             } 
        }
        //1~29号,判断闰、平年 
        else
        {
            //闰年
            if((*y % 4 == 0 && *y % 100 != 0) || *y % 400 == 0)
            {
                if(*d == 29)
                {
                    *m += 1;
                    *d = 1;
                }
                else
                {
                    *d += 1;
                }
            }
            //平年
            else if(*d == 28)
            {
                *m += 1;
                *d = 1;
            } 
            else
            {
                *d += 1;
            }
        }
    }
    
    void yesterday(int *y, int *m, int *d)
    {
        //大于1号 
        if(*d > 1)
        {
            *d -= 1;
        }
        //1号 
        else
        {
            //大于1月 
            if(*m > 1)
            {
                *m -= 1;
                //2月
                if(*m == 2)
                {
                    //闰年 
                    if((*y % 4 == 0 && *y % 100 != 0) || *y % 400 == 0)
                    {
                        *d = 29;
                    }
                    //平年 
                    else
                    {
                        *d = 28;
                    }
                }
                
                //小月
                if(*m == 4 || *m == 6 || *m == 9 || *m == 11)
                {
                    *d == 30;
                }
                //大月 
                else
                {
                    *d == 31;
                }
            }
            //1月 
            else
            {
                *y -= 1;
                *m = 12;
                *d = 31;
            }
        }
    }
    
    int main()
    {
        int y, m, d;
        
        scanf("%d %d %d", &y, &m, &d);
        
        yesterday(&y, &m, &d);
        printf("前一天:%d年%d月%d日\n", y, m, d);
        
    //  tomorrow(&y, &m, &d);
    //  printf("后一天:%d年%d月%d日\n", y, m, d);
        
        system("pause");
        return (0); 
    }
    

    归纳后的代码

    出处:http://blog.csdn.net/cloudmonke/article/details/53783682

    #include <stdio.h>  
      
    // 判断闰年  
    int is_leap(int year)  
    {  
        int i = 0;  
          
        if (((year % 4) == 0 && (year % 100) != 0) || (year % 400 == 0))  
            i = 1;  
        return (i);  
    }  
      
    // 返回当月天数  
    int days(int year, int month)  
    {  
        int i;  
          
        switch (month) {  
            case 4:  
            case 6:  
            case 9:  
            case 11: i = 30; break;   
            case 2: if (is_leap(year)) i = 29; else i = 28; break;  
            default: i = 31; break;  
        }  
        return (i);  
    }  
       
    // 求出前一天  
    void yesterday(int *y, int *m, int *d)  
    {     
        (*d)--;  
          
        if (!(*d)) {  
            (*d) = days(*y, --(*m));  
        }  
          
        if (!(*m)) {  
            (*y)--;  
            (*m) = 12;   
        }     
    }   
      
    // 求出后一天  
    void tomorrow(int *y, int *m, int *d)  
    {  
        (*d)++;  
          
        if ((*d) > days(*y, *m)) {  
            (*d) = 1;  
            (*m)++;         
        }  
          
        if ((*m) > 12) {  
            (*y)++;  
            (*m) = 1;  
        }   
               
    }  
      
    int main(void)  
    {  
        int year, month, day;  
        printf("请输入年月日: ");  
        scanf("%d%d%d", &year, &month, &day);  
        putchar('\n');  
          
        yesterday(&year, &month, &day);  
        printf("前一天:%d %2d %2d\n", year, month, day);  
        tomorrow(&year, &month, &day);  
        printf("输入日:%d %2d %2d\n", year, month, day);  
        tomorrow(&year, &month, &day);  
        printf("后一天:%d %2d %2d\n", year, month, day);  
          
        return (0);   
    }

    相关文章

      网友评论

          本文标题:WarMj:求出并设置 y 年 m 月 d 日的前一天或后一天的

          本文链接:https://www.haomeiwen.com/subject/ajlvkxtx.html