• [C语言学习]之打印万年历


    #include "stdio.h"

    //functions define
    void outputcalendar(void);
    void outputtitle(int);
    void outputbody(int *, int maxday);
    int *getweek(int, int, int);

    //variables and constants
    const char CON_STR4SPACE[5]  = "    ";
    const char CON_STR1SPACE[2] = " ";
    const int CON_DAYCOUNTS31 = 31;
    const int CON_DAYCOUNTS30 = 30;
    int daycountsofFeb;

    //function main
    int main()
    {
      outputcalendar();
        return 0;
    }


    //functions
    void outputcalendar(void)
    {
     while(true)
     {
      int year,month;
      int *weekp;

      printf("please input year:");
      scanf("%d",&year);

      if(year < 0 || year > 9999)
      {
       printf("the input year must between 0 to 9999!\n",year);
       continue;
      }

      //get week the first day of year
      weekp = getweek(year,1,1);

      //get the days of Feb
      daycountsofFeb = 28;
      if(year%4==0 && year%100!=0 || year%400==0)
       daycountsofFeb++;

      printf("[Calendar Of Year %d]\n",year);

      for(month=1; month<13; ++month)
      {
       outputtitle(month);

       switch (month)
       {
        case 1:
         /*no break;*/
        case 3:
         /*no break;*/
        case 5:
         /*no break;*/
        case 7:
         /*no break;*/
        case 8:
         /*no break;*/
        case 10:
         /*no break;*/
        case 12:
         outputbody(weekp, 31);
         break;
        case 2:
         outputbody(weekp, daycountsofFeb);
         break;
        case 4:
         /*no break;*/
        case 6:
         /*no break;*/
        case 9:
         /*no break;*/
        case 11:
         outputbody(weekp, 30);
         break;
       }//end of switch
       printf("\n");
      }//end of For
      printf("\n");
     }//end of while
    }//end of function

    void outputtitle(int month)
    {
     char *monthname[4] ;
     switch (month)
     {
      case 1:
       *monthname = "Jan";
       break;
      case 2:
       *monthname = "Feb";
       break;
      case 3:
       *monthname = "Mar";
       break;
      case 4:
       *monthname = "Apr";
       break;
      case 5:
       *monthname = "May";
       break;
      case 6:
       *monthname = "Jun";
       break;
      case 7:
       *monthname = "Jul";
       break;
      case 8:
       *monthname = "Aug";
       break;
      case 9:
       *monthname = "Sep";
       break;
      case 10:
       *monthname = "Oct";
       break;
      case 11:
       *monthname = "Nov";
       break;
      case 12:
       *monthname = "Dec";
       break;
     }//end of switch

     printf("------------%s------------\n",*monthname);
     printf("  S- -1- -2- -3- -4- -5- -6\n");
    }
    void outputbody(int *m, int maxday)
    {
     int i,c = 0;
     for(i=1; i<=*m; i++)
     {
      c++;
      printf(CON_STR4SPACE);
     }
     for(i=1; i<=maxday; i++)
     {
      c++;
      if(c%7-1==0 && c!=1)
       printf("\n");
      if(i<10)
       printf(CON_STR1SPACE);
      printf(" %d ",i);
      *m = ++(*m)%7;
     }
    }

    int *getweek(int year, int month, int day)
    {
     static int week;
     int *p;
     int lastyear, i, days = 0;
     int mont[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
     //char wek[][9] = { {'S','u','n','d','a','y'},
     //    {'M','o','n','d','a','y'},
     //    {'T','u','e','s','d','a','y'},
     //    {'W','e','d','n','s','d','a','y'},
     //    {'T','h','u','r','s','d','a','y'},
     //    {'F','r','i','d','a','y'},
     //    {'S','a','t','u','r','d','a','y'}
     //    };

     if (year%4==0||year%100==0||year%400==0)
      mont[2] += 1;

     if ((year < 0 || year > 9999) ||
      (month < 1 || month > 12) || 
      (day > mont[month] || day < 1)
      )
     {
      //error date return -1
      week = -1;
      p = &week;
      return p;
     }

     for (i=1;i<month;i++)
      days += mont[i];

     days += day;

     lastyear = year - 1;
     days += lastyear*365 + (int)(lastyear/4) - (int)(lastyear/100) + (int)(lastyear/400);
     week = days % 7;

     p = &week;
     return p;
    }

  • 相关阅读:
    十一:jinja2模板传参
    Python基础—流程控制
    Python字符串格式化输出
    Python基本数据类型--列表、元组、字典、集合
    Python基本数据类型之字符串、数字、布尔
    Python用户输入和代码注释
    Python中变量和常量的理解
    Python程序的执行方式
    Python初识
    python初识
  • 原文地址:https://www.cnblogs.com/fjfjfjfjfjfj/p/1902599.html
Copyright © 2020-2023  润新知