(这里输入以分号结束)(以1900年1月1日为起始基准)
#include <stdio.h> int isLeepYear(int year)//判断闰年 { return 0 == year % 4 && 0 != year % 100 || 0 == year % 400; } int daysOfMonth(int year,int month)//判断单月份天数 { int day[] = {31,0,31,30,31,30,31,31,30,31,30,31}; if(2 == month) { if(isLeepYear(year)) { return 29; } else { return 28; } } return day[month - 1]; } int yearTheDays(int year)//判断年份到90年的总天数 { int i; int sum = 0; for(i = 1900;i < year;++i) { if(isLeepYear(i)) { sum = sum + 366; } else { sum = sum + 365; } } return sum; } int yearTheFirstday(int year)//判断年份第一天星期几 { return yearTheDays(year) % 7 + 1; } int monthTheFirstday(int year,int month)//判断月份第一天星期几 { int i; int sum = yearTheDays(year); for(i = 1;i < month;++i) { sum = sum + daysOfMonth(year,i); } return sum % 7 + 1; } void printMonth(int year ,int month)//输出单月日历 { int i; printf(" %d年%d月\n",year,month); printf("一 二 三 四 五 六 七\n"); for(i = 1;i < monthTheFirstday(year,month);++i) { printf(" "); } for(i = 1;i <= daysOfMonth(year,month);++i) { printf("%2d ",i); if((i + monthTheFirstday(year,month) - 1) % 7 == 0) { printf("\n"); } } printf("\n"); } void printYear(int year)//输出年的所有月份 { int i; for(i = 1;i <= 12;++i) { printMonth(year,i); printf("********************\n"); } } int main(void) { int year,month; char c; scanf("%d",&year); scanf("%c",&c); if(c == ';') { month = 0; printYear(year); } else { scanf("%d",&month); printMonth(year,month); } return 0; }