万年历(含答案)

发布时间:   来源:文档文库   
字号:
万年历
制作一个万年历(阳历版)。程序从键盘读入年份和月份,然后输出该年该月的月历。
本问题的关键是确定所求月份的第一天是星期几。如我们想确定2009121日是星期几,我们可以采用下面的方法:
(1求出201911日是当年的第几天,存在c里面。(2s=year-1+(year-1/4-(year-1/100+(year-1/400+c;
(3num=s%7;num表示该天星期几,0表示星期天,1表示星期
一,……
输出格式如下:(如20191月)
1
2345
678910111213141516171819202122232425262728293031
另外:本问题另一个关键是如何按照上面的格式来输出。输出的时候先输出第一行,再输出第二行,……。这里的问题是如何在输出的时候进行对齐。

要求
定义如下函数:
1.判断某一年是否为闰年:intIsLeapYear(intyear
2.求某一天是该年的第几天:intDayNumber(intyear,intmonth,intday3.求某一天是星期几:intweek(intyear,intmonth,intday

实现提示
1.可以参考老师给出的框架
2.实现时需要每月的天数,可以定义数组:
intmonths[]={0,31,28,31,30,…}
部分测试数据如下:
序号
1

测试数据
200021号星期几
2该月天数29
1

21900242832012103142012114305200825296200885317201335318201312031

#include
intisLeapYear(intyear;//判断某一年是否为闰年
intdayNumber(intyear,intmonth,intday;//求某一天是该年的第几天intweek(intyear,intmonth,intday;//求某一天是星期几intmain({intyear,month,num,i,j;
intdays[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
while(scanf("%d%d",&year,&month{if(isLeapYear(year//修正2月份的天数{days[2]=29;
}else{days[2]=28;}
num=week(year,month,1;
printf("\n\t\t\t\t\t\t\n";
for(i=1;i<=num;i++//跳过1号前面num个空位置

{
2

printf("\t";
}
for(j=1;j<=days[month];j++//打印1号到day{printf("%d\t",j;if((j+num%7==0{printf("\n";
}
}
printf("\n";
}
return0;
}
//判断某一年是否为闰年intisLeapYear(intyear{if((year%4==0&&year%100!=0||(year%400==0{return1;
}else{return0;}
}
//求某一天是该年的第几天
intdayNumber(intyear,intmonth,intday{
intdays[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
3


intc=0,i;
for(i=1;i{c+=days[i];
}
c+=day;
if(isLeapYear(year&&month>3//闰年{c++;}returnc;
}
//求某一天是星期几
intweek(intyear,intmonth,intday{intc=dayNumber(year,month,day;
ints=year-1+(year-1/4-(year-1/100+(year-1/400+c;intnum=s%7;returnnum;
}
4

本文来源:https://www.2haoxitong.net/k/doc/fec7a5171fb91a37f111f18583d049649a660e51.html

《万年历(含答案).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式