#include <stdio.h> #include <stdlib.h> vod display(int x,int y,int m,int max) { int s[6][7]={0};int i=0,j=0; s[0][m]=1;//确定每一月的根基 每个月的第一列 for(j=m;j<7;j++)s[0][j]=(j-m)+s[0][m]; s[1][0]=s[0][6]+1; for(i=2;i<6;i++)s[i][0]=s[1][0]+(i-1)*7; for(i=1;i<6;i++) { for(j=1;j<7;j++) s[i][j]=s[i][0]+j; } printf("\t%d年 %d月\n",x,y); printf("----------------------\n"); printf(" 日 一 二 三 四 五 六 \n"); for(i=0;i<6;i++) { for(j=0;j<7;j++) { if(s[i][j]==0)printf(" "); if(s[i][j]!=0&&s[i][j]<=max)printf("%3d",s[i][j]);} printf("\n"); } } int Year(int year) { if(year%4==0&&year%100!=0||year%400==0)return 1; else return 0; } } void main() { int max[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int year=1; int month=2;//1-12 int star[13]={0,1,32,60,91,121,152,182,213,244,274,304,334};//0-6 int i=1; int count=0; if(Year(year)) max[2]++; for(i=1;i<year;i++) {if(Year(year))count++;} for(i=1;i<=12;i++) {//star[i]= (1+2*i+3*(i+1)/5+year+year/4-year/100+year/400)%7; star[i]=(star[i]+(year-1)*365+count)%7; // display(year,i,star[i],max[i]); } }
计算STAR处 有2种方法 计算闰年配合时容易错误 公元1年目前是正确的