编程第十一天
万年历制作
1 算出每月一号为周几。
2 注意没有零月,所以数组输出的时候注意从一开始。
3 注意平年于闰年之分。
4 计算公式
s=x-1+[(x-1)/4]-[(x-1)/100]+[(x-1)/400]+c
x:公元年数
c:从要求的元旦算起到要求的那一天的天数
[]:为求整
求出s后除以7 ,整除为星期天,或余数是几就是星期几.
#include<stdio.h>
void fun1(int y);
int fun2(int year);
void fun3 (int year);
int a[13]={0};
void fun1(int y)//计算某年1月1日为星期几
{
int i,m=1,d=1;
y–;
for(;m<=12;m++){
if(m1||m2){
m+=12;
a[m-12]=(int)((d+2m+3(m+1)/5+y+y/4-y/100+y/400)+1)%7;
m-=12;
}else{
a[m]=(int)((d+2m+3(m+1)/5+y+y/4-y/100+y/400)+1)%7;
}
}
}
int fun2(int year) /查询某年是否闰年/
{
return(((year%40&&year%100!=0)||year%4000));
}
void fun3 (int year) /打印某年全年日历/
{
int b[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i,j,dd,xq;
fun1(year);
if(fun2(year)1) b[2]=29; /判断某年是否闰年/
for(i=1;i<13;i++) /每年12个月 /
{
printf("\n");
printf(" %d-%d",year,i);
printf("\n**************************\n");
printf(" Su Mo Tu We Th Fr Sa\n");
for(j=0;j<a[i];j++) printf(" “); /确定第i个月的1号输出的起始位置/
for(dd=1;dd<=b[i];dd++ ) { /* 输出第i个月日历,dd的终值为本月的天数*/
printf(”%4d",dd);
if((j+1)%70) /每输出7个数后换行/
printf("\n");
j++;
}
}
}
int main()
{
int y,m;
while(y!=0){
printf(“Input [0] quit\nInput the year:\n”);
scanf("%d",&y);
fun3(y);
printf("\n");
}
return 0;
}