#include "stdio.h" /*判断闰年*/ int leap(int year) { return ((year % 4 == 0 && year % 100!= 0) || year % 400 == 0); } /*获取某月的天数*/ int ji_suan_tian_shu(int month, int year) { if(year==1582&&month==10) { return 21; } if (month == 2) { return leap(year)? 29 : 28; } else if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } else { return 31; } } /*计算1月1日是星期几*/ int ji_suan_di_yi_tian(int year) { int K=year%100; int J=year/100; if(year<1582) { return (1+(13*(1+1))/5+K+K/4+5-J)%7; } else { return (1+(13*(1+1))/5+K+K/4+J/4+5*J)%7; } } /*输出日历的星期单列*/ void xing_qi() { printf(" 日 一 二 三 四 五 六\n"); } /*处理1582年单列*/void chu_li_1582_nian_10_yue_de_ri_li(int *di_yi_tian) { for (int i=0;i<*di_yi_tian;i++)//在前面加空格 { printf(""); } for (int day=1;day<=4;day++)//输出1到4号 { printf("%5d",day); if ((*di_yi_tian+day-1)%7==6)//到了周六换行 { printf("\n"); } } int x=5; for (int day=15;day<=31;day++)//输出15号及之后 { if ((*di_yi_tian+x-1)%7==0)//一周换行 { printf("\n"); } printf("%5d",day); x++; } printf("\n"); //*di_yi_tian=(*di_yi_tian+21)%7; } /*输出某月的日历单列*/void shu_chu_yue_ri_li(int month, int year) { int zhe_ge_yue_you_duo_shao_tian = ji_suan_tian_shu(month, year); int zhe_ge_yue_di_yi_tian = ji_suan_di_yi_tian(year); for (int i = 1; i < month; i++) //计算某月前面的月有多少天 { zhe_ge_yue_di_yi_tian+= ji_suan_tian_shu(i, year); } zhe_ge_yue_di_yi_tian%= 7;//计算前面月的最后一天是周几 xing_qi(); /*输出前面的空格*/for (int i = 0; i 4) { printf("请从1 2 3 4中选择输入\n"); }//if的括号 else if(x==1) { int year; printf("请输入年份:\t"); scanf("%d",&year); if((year%4==0&&year%100!=0)||year%400==0) printf("是闰年\n"); else printf("是平年\n"); } else if(x==2) { int year; int month; int day; printf("请输入日期 (输入格式为 年 月 日):"); scanf("%d %d %d",&year,&month,&day); if(year==1582&&month==10&&day>4&&day<15); printf("不存在这一天,请重新输入 (输入格式为 年 月 日):\t"); scanf("%d %d %d",&year,&month,&day); const char *chu_chun_xing_qi[]={"六","日","一","二","三","四","五"}; int K=year%100; int J=year/100; int w; if(year<1582||(year==1582&&(month<10||(month==10&&day<=4)))) { w=(day+(13*(month+1))/5+K+K/4+5-J)%7; printf("这一天是周%s\n",chu_chun_xing_qi[w]); } else { w=(day+(13*(month+1))/5+K+K/4+J/4+5*J)%7; printf("这一天是周%s\n",chu_chun_xing_qi[w]); } } else if(x==3) { int year; printf("请输入年份:\t"); scanf("%d",&year); printf("扣1 2选择\n1.单列\n2.双列\t"); int c; scanf("%d",&c); if(c==1) { shu_chu_ri_li(year); } else if(c==2) { shu_chu_ri_li_2(year) ; } } }//for的括号 return 0; }