只需输入年份的打印日历

这是对程序-->一个日历C程序的改进,没有了day_code &leap_year code的限制

可以直接输入年份打印出年历


/*Calendar1
打印出某年的日历,由用户只需输入年份
@author Jeff Chen
@version 1.1 date:2012-03-09
*/

#include<stdio.h>

int main()
{
  int day_code;
  int leap_year;
  int year;
  printf("Enter the year you want to print:\n");
  scanf("%d",&year);
  day_code=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7;
  leap_year=((year%4)==0&&(year%100)!=0||(year%400)==0)?1:0;
  int days_in_month;
  int month;
  int day;
  for(month=1;month<=12;month++)
   {
     switch(month)
       {
     case 1:
       printf("\n\n\tJanuary");
       days_in_month=31;
       break;
     case 2:
       printf("\n\n\tFebruary");
       days_in_month=leap_year ? 29:28;
       break;
     case 3:
       printf("\n\n\tMarch");
       days_in_month=31;
       break;
     case 4:
       printf("\n\n\tApril");
       days_in_month=30;
       break;
     case 5:
       printf("\n\n\tMay");
       days_in_month=31;
       break;
     case 6:
       printf("\n\n\tJune");
       days_in_month=30;
       break;
     case 7:
       printf("\n\n\tJuly");
       days_in_month=31;
       break;
     case 8:
       printf("\n\n\tAugust");
       days_in_month=31;
       break;
     case 9:
       printf("\n\n\tSeptember");
       days_in_month=30;
       break;
     case 10:
       printf("\n\n\tOctober");
       days_in_month=31;
       break;
     case 11:
       printf("\n\n\tNovember");
       days_in_month=30;
       break;
     case 12:
       printf("\n\n\tDecember");
       days_in_month=31;
       break;
     }
   //输出星期
     printf("\n\nSun  Mon  Tue  Wed  Thu  Fri  Sat\n");
     for(day=1;day<day_code*5+1;day++)
       {
	 printf(" ");
       }
     for(day=1;day<=days_in_month;day++)
       {
	 printf("%2d ",day);
	 if((day+day_code)%7>0)
	   printf("  ");
	 else
	   printf("\n");
       }
     //设置下一个星期的星期代码
     day_code=(day_code+days_in_month)%7;
   }
  return 0;

}


posted on 2012-03-09 22:16  X.P.Chen  阅读(312)  评论(0编辑  收藏  举报

导航