#include void fun(void); int year; int shiji; int yue; int ri; int w;//星期 int y; //年份后两位 void getday(int first_day[],int y); void shuchurili(int days[],int first_day[]); int main() {{ int a; printf("查询某年某月某日的日期是周几,该年是否为闰年 请输入1\n"); printf("输入年份,输出这一年的日历,要求能够单列输出和双列输出 请输入2\n"); scanf("%d",&a); if(a==1) { scanf("%d-%d-%d",&year,&yue,&ri); if((year<=0||yue<=0||ri<=0)||(year==1582&&yue==10&&(ri==5||ri==6||ri==7||ri==8||ri==9||ri==10||ri==11||ri==12||ri==13||ri==14)) {{ printf("输入错误,请重新输入:"); scanf("%d-%d-%d",&year,&yue,&ri); } }else { if(yue<3) { year--; yue+=12; } shiji=(year/100); y=year%100; w=shiji/4-2*shiji+y+y/4+13*(yue+1)/5+ri-1; if(w%7==0) printf("星期7"); else printf("星期%d ",w%7); if((year%4==0&&year%100!=0)||(year%400==0)) printf("闰年"); else printf("非闰年"); } }} //第二部分 if(a==2) { //单双列输出选择 printf("请选择您要输出的格式\n"); printf("单列输出请按1\n"); printf("双列输出请按2\n"); int b; scanf("%d",&b); if(b==1) { int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int first_day[12]={0}; int year=0; int i=0; int a=1; while(a) { printf("请输入年份:"); scanf("%d",&year); //报错 if(year<=0) { printf("输入错误,请重新输入:"); scanf("%d",&year); } --a; } //获取该年每个月所属星期 getday(first_day,year); if((year%4==0&&year%100!=0)||(year%400==0)) days[1]=29; //输出日历 shuchurili(days,first_day); return 0; }else //双列输出 { int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int first_day[12]={0}; int year=0; int i=0; int a=1; while(a) { printf("请输入年份:"); scanf("%d",&year); //报错 if(year<=0) { printf("输入错误,请重新输入:"); scanf("%d",&year); } --a; } //获取该年每个月所属星期 getday(first_day,year); if((year%4==0&&year%100!=0)||(year%400==0)) days[1]=29; //输出日历 shuchurili(days,first_day); return 0; } } return 0; } void getday(int first_day[],int y) { int m=0; int d=1; int w=0; for(m=3;m<=12;m++) { w=(d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; first_day[m-1]=w; } y-=1; for (m=13;m<=14;m++) { w = (d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; first_day[m-13] = w; } } void shuchurili(int days[],int first_day[]) { int dyt=0; int d=0,i=0,j=0; for(i=0;i<12;i++) { dyt=first_day[i]; printf(" %2d 月 \n", i+1); printf(" 日 一 二 三 四 五 六 \n"); //1号前的空格 //改后 for(j=0;j //判断闰年的函数 int isleapyear(int year) { return ((year%4==0&&year%100!=0)||(year%400==0)); } //计算每月天数的函数 int month(int year,int yue) { int run[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; if(yue==2&&isleapyear(year)) { return 29; } return run[yue]; } //计算给定日期是星期几(蔡勒公式) int week(int year,int yue,int ri) { if(yue<3) { year--; yue+=12; } shiji=(year/100); y=year%100; w=shiji/4-2*shiji+y+y/4+13*(yue+1)/5+ri-1; return (w%7+7)%7; } //输出日历函数 void rili(int year) { char *week[]={"一","二","三","四","五","六","日"}; scanf("&d-%d-%d",&year,&yue,&ri); for(yue=1;yue<=12;yue++) { int i; printf("%d ",yue); for(i=0;i<7;i++) printf("%s",week[i]); printf("\n"); int w=week(year,yue,1);//w为每月第一日是星期几 int jx=month(year,yue); char a[w]={"0"}; char b[][7];//输出日期的数组 if((year%4==0&&year%100!=0)||(year%400==0)) { for(int n=0;n<7;n++) { for(int m=1;m