万年历的c语言实现源程序Word文档格式.docx
《万年历的c语言实现源程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《万年历的c语言实现源程序Word文档格式.docx(6页珍藏版)》请在冰点文库上搜索。
=0)||(y%400==0))
return1;
else
return0;
}
intGetdaysofmonth(inty,intm)/*确定某个月的天数*/
intmonths[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(Isleapyear(y))/*如果是闰年则2月份的天数改变为29*/
months[2]=29;
returnmonths[m];
intGettotaldays(inty,intm)/*计算从1901年1月开始到给定年月的天数*/
intmonths[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
intdays=0;
inti,j;
if((Isleapyear(y)))
months[2]=29;
for(i=1901;
i<
y;
i++)/*从1901年1月开始计算,累加y年之前的天数*/
{
if(Isleapyear(i))
days+=366;
else
days+=365;
}
for(j=1;
j<
m;
j++)/*累加m月之后的天数*/
days+=months[j];
returndays;
intGetfirstdayintable(inty,intm)/*计算给定年月的第一天在日历表中的位置*/
intd;
d=Gettotaldays(y,m);
d=d+3;
/*1901年1月1日是星期二,在日历中星期二是第三个位置*/
d=d%7;
returnd;
voidShowdate(inty,intm)/*显示日历*/
intfirst;
inti,k;
first=Getfirstdayintable(y,m);
/*得到第一天在日历中的第一个位置*/
d=Getdaysofmonth(y,m);
/*得到这个月的天数*/
k=0;
printf("
-------------------------------------\n"
);
SUNMONTUEWENTHUFRISTA\n"
for(i=1;
first;
i++)/*打印第一天之前的空格*/
{
printf("
"
k++;
/*k用于确定日历中是否回车*/
}
=d;
i++)
%5d"
i);
/*每个具体的日期占5个字符的宽度*/
if(k==7)/*每行打印7个日期数字后回车*/
printf("
\n"
k=0;
\n-------------------------------------\n"
intmain(){
inty,m;
Inputyear:
"
scanf("
%d"
&
y);
Inputmonth:
m);
Showdate(y,m);
return0;