用C語言寫的一個萬年歷
include<stdio.h>
include<math.h>
int input(); void re_year(int year); void output(int year,int leap,int dis_day,int para); void main() { int year,leap,dis_day,para; while(1) { year=input(); re_year(year, &leap,&dis_day,¶); output( year, leap, dis_day, para); } } int input() { int year; printf("Please input the year you want to konw:"); scanf("%d",&year); return year; } void re_year(int year,int leap,int dis_day,int parameter) { int i,distance; dis_day=0;
distance=year-2012; //判斷距離2012年的年數 leap=(year%4)==0&&(year%100!=0)||year%400==0; //判斷是閏年還是平年,閏年返回1,平年返回0 for(i=1;i<=abs(distance);i++) //計算輸入的年與2012年之間的差值 { if(i%4==0) { dis_day+=366; } else dis_day+=365; } if(distance<0) //判斷是在2012年之前還是之后 parameter=-1; else *parameter=1;} void output(int year,int leap,int dis_day,int para) { int i,j,k,m=0; int leap_array[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}}; int day;
int week_day; //判斷是星期幾 day=dis_day%7; if(para==1&&year!=2012) //para為判斷是2012年之前還是之后 week_day=day+1; else if(para==-1&&year!=2012) week_day=-day+7; else if(year==2012) week_day=day; m=week_day; for(i=1;i<13;i++) { printf("\t%d月\t\n",i); printf("%s %s %s %s %s %s %s\n","Sun","Mon","Tus","Wes","Ths","Fri","Sat"); if(m==0) m++; else if(m!=7) { for(k=1;k<=m;k++) printf(" "); m++; } for(j=1;j<=leap_array[leap][i];j++) { if(m%7==0) { printf("%3d\n",j); } else printf("%3d ",j); m++;} m=(m-1)%7; printf("\n"); }
}
</pre>