早起无聊没事做,写个年历,大家来品品.有 BUG 的话请指正!
程序代码:
//画出某一年的年历! //对比时间为2015年1月1日星期四 //打印某年年历 gcc版 欢迎交流 QQ 87835836 -- Rol #include <stdio.h> void make(int year,int data[][6][7],int days[][12]); //函数声明详细在后面 int findfirst(int year); int pdyunnian(int year); void print(int data[][6][7]); int main(void) { int year,data[12][6][7]={0}; int days[2][12]={ //闰年与非闰年各月份天数表 {31,28,31,30,31,30,31,31,30,31,30,31}, {31,29,31,30,31,30,31,31,30,31,30,31} }; printf("请输入要查询年份(>=0)):\n"); scanf("%d",&year); while(year<0) { printf("请输入>=0的年份:\n"); scanf("%d",&year); } make(year,data,days); printf("***********%4d年 年历***********\n",year); print(data); return 0; } void make(int year,int data[][6][7],int days[][12]) //填年历 { int kong,i,j,k,num,yun; kong=findfirst(year); //判断这一年1月1日是星期几 yun=pdyunnian(year)?1:0; for(i=0;i<12;i++) //12个月份 { num=1; for(j=0;j<6;j++) //每月最多6星期 { for(k=0;k<7;k++) //每周星期 { if(k<kong&&j==0)continue; //空出前面 if(num<=days[yun][i]) //判断日期是否超过当年当月天数限制 { data[i][j][k]=num++; kong=k+1; //记录下月1号是星期几 } } } } } int findfirst(int year) //找出这一年1月1日是星期几 { int days=0; if(year==2015)return 4; //对比时间为2015年1月1日星期四 else if(year>2015) //如果是2015年以后 { while(year!=2015) { days+=(pdyunnian(year-1)?366:365); //计算这年1月1日到2015年1月1日的总天数 year--; } switch(days%7) //计算是星期几 { case 0:return 4; case 1:return 5; case 2:return 6; case 3:return 7; case 4:return 1; case 5:return 2; case 6:return 3; } } else //如果是2015年以前 { while(year!=2015) { days+=(pdyunnian(year)?366:365); //计算这年1月1日到2015年1月1日的总天数 year++; } switch(days%7) //计算是星期几 { case 0:return 4; case 1:return 3; case 2:return 2; case 3:return 1; case 4:return 7; case 5:return 6; case 6:return 5; } } } int pdyunnian(int year) //判断是否为闰年 { return (year%4==0&&year%100!=0)||(year%400==0)?1:0; } void print(int data[][6][7]) //打印数据 { int i,j,k; for(i=0;i<12;i++) { printf("%02d月\nSUN MON TUE WED THU FRI SAT \n",i+1); printf("---------------------------------\n"); for(j=0;j<6;j++) { for(k=0;k<7;k++) { if(data[i][j][k]==0)printf(" "); //如果数值为0打印5个空格 else printf("%3d ",data[i][j][k]); } printf("\n"); } printf("---------------------------------\n"); } }