#include void printfMenu () { printf("1.单列输出\n"); printf("2.双列输出\n"); } //判断是否为闰年 int isLeapyear(int y) { if(y%4==0&&y%100!=0 || y%400==0) return 1; else return 0; } //这个函数用于计算返回该月的天数 int daysInMonth(int y, int m) { switch(m){ case 1: case 3: case 5: case 7: case 8: case 10: { if(y==1582) { days=21; } } case 12:days = 31;break; case 4: case 6: case 9: case 11:days = 30;break; case 2:{ if(((year%4) == 0) && ((year%100)!=0) || ((year%400) == 0)){ days = 29; }else{ days = 28; } } } return days; } //判断指定日期是星期几 int dayOfWeek(int y, int m, int d) { if(y>1852 && m>10 && d>4)//1582.10.4之后 { if (m < 3) { m += 12; y--; } int h = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7; return h + 1; } else { int K,J,h; K=y%100; J=y/100; switch(m) { case 1: m=3; break; case 2: m=4; break; case 3: m=5; break; case 4: m=6; break; case 5: m=7; break; case 6: m=8; break; case 7: m=9; break; case 8: m=10; break; case 9: m=11; break; case 10: m=12; break; case 11: m=13; break; case 12: m=14; break; } h=(d+(13*(m+1)/5)+K+K/4+5-J)%7; switch(h) { case 0: h=6; break; case 1: h=7; break; case 2: h=1; break; case 3: h=2; break; case 4: h=3; break; case 5: h=4; break; case 6: h=5; break; } return h; } } //显示指定年月的月历 void MonthCalendar(int y, int m, int d) { printf("日\t一\t二\t三\t四\t五\t六")//\t制表符 int ofday=DaysInMonth(y,m);//获取每个月有多少天 int first_day = dayOfWeek(y, m, 1); //获取每月1号是周几 int ofday = daysInMonth(y, m); //获取一个月有多少天 int count = first_day; for (int i = 0; i <= ofday; i++) { //使日期能对齐对应的星期 if (i == 0) { for (int j = 0; j < count % 7; j++) { printf("\t"); } } else { printf("%2d\t", i); count++; } //循环打印一周后换行 if (count % 7 == 0) { printf("\n"); } } printf("\n"); } //这个函数用于显示指定年份 year 的全年日历 void YearCalendar(int y) { int i = 0; for (i = 1; i <= 12; i++) { MonthCalendar(y, i, day); printf("\n"); } } //这个函数用于验证给定的日期是否有效 int isTureDate(int y, int m, int day) int main(void) { int y,m,d,a; printf("1.查询对应年份的日历\n"); printf("2.查询对应日期的星期"); printf("3.查询对应年份是否为闰年\n"); printf("4.退出\n"); scanf("%d",&a); switch(a) case 1: scanf("%d",&y); YearCalendar(y); case 2: scanf("%d %d %d",&y,&m,&d); dayOfWeek(y,m,d); case 3: scanf("%d",&y); isLeapyear(y); case 4: default : printf("输入错误请重新输入。") }