万年历算法的实现(2)

2019-04-22 22:11

if (day < 1 || day > 31) {

printf(\, day); return 0; }

return 1; break; case 6:

if (day < 1 || day > 30) {

printf(\, day); return 0; }

return 1; break; case 7:

if (day < 1 || day > 31) {

printf(\ return 0; }

return 1; break; case 8:

if (day < 1 || day > 31) {

printf(\ return 0; }

return 1; break; case 9:

if (day < 1 || day > 30) {

printf(\ return 0; }

return 1; break; case 10:

if (day < 1 || day > 31) {

printf(\ return 0; }

return 1; break; case 11:

if (day < 1 || day > 30) {

printf(\ return 0; }

return 1; break; case 12:

if (day < 1 || day > 31) {

printf(\ return 0;

, day); , day); , day); , day); , day); , day); }

return 1; break; default: break; return 0; } } /**

* 以下函数返回一个包含当前年 月 日的整型数组 */

int* CurrentCal() { time_t nowtime;

struct tm *timeinfo; time(&nowtime);

timeinfo = localtime(&nowtime); int cal[3];

cal[0] = timeinfo->tm_year + 1900; cal[1] = timeinfo->tm_mon + 1; cal[2] = timeinfo->tm_mday; return cal; } /**

* 以下函数打印年历,以月为单位,分成四行打印,每行打印三个月 */

void PrintCalendar(int year) { int i;

for (i = 0; i < 4; ++i) { switch (i) { case 0:

//打印第1行,1-3月的月历

printf(\March\\n\);

printf(

\--------------------\\n\); printf(

\Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa\\n\);

PrintCommonCalendar(year, 1); break; case 1:

//打印第2行,4-6月的月历

printf(\June\\n\);

printf(

\--------------------\\n\); printf(

\Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa\\n\);

PrintCommonCalendar(year, 2); break; case 2:

//打印第3行,7-9月的月历 printf(

\September\\n\); printf(

\--------------------\\n\); printf(

\Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa\\n\);

PrintCommonCalendar(year, 3); break; case 3:

//打印第4行,11-12月的月历 printf(

\December\\n\);

printf(

\--------------------\\n\); printf(

\Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa\\n\);

PrintCommonCalendar(year, 4); break; default: break; } } } /**

* 打印出给定年,给定行的3个月的月历。 */

void PrintCommonCalendar(int year, int row) {

int mfOfWeek, mfDays; //mfOfWeek表示该行第1个月的1号是周几,mfDays表示第1个月的天数

int msOfWeek, msDays; //mfOfWeek表示该行第2个月的1号是周几,mfDays表示第2个月的天数

int mtOfWeek, mtDays; //mfOfWeek表示该行第3个月的1号是周几,mfDays表示第3个月的天数 switch (row) { case 1:

mfOfWeek = DayOfWeek(year, 1, 1); mfDays = 31;

msOfWeek = DayOfWeek(year, 2, 1); msDays = 28;

mtOfWeek = DayOfWeek(year, 3, 1); mtDays = 31;

PrintOneQuarter(year, mfOfWeek, mfDays, msOfWeek, msDays, mtOfWeek,

mtDays, row); break; case 2:

mfOfWeek = DayOfWeek(year, 4, 1); mfDays = 30;

msOfWeek = DayOfWeek(year, 5, 1); msDays = 31;

mtOfWeek = DayOfWeek(year, 6, 1); mtDays = 30;

PrintOneQuarter(year, mfOfWeek, mfDays, msOfWeek, msDays, mtOfWeek,

mtDays, row); break; case 3:

if (year == 1752) {

Print1752_3Quarter(); break; }

mfOfWeek = DayOfWeek(year, 7, 1); mfDays = 31;

msOfWeek = DayOfWeek(year, 8, 1); msDays = 31;

mtOfWeek = DayOfWeek(year, 9, 1); mtDays = 30;

PrintOneQuarter(year, mfOfWeek, mfDays, msOfWeek, msDays, mtOfWeek,

mtDays, row); break; case 4:

mfOfWeek = DayOfWeek(year, 10, 1); mfDays = 31;

msOfWeek = DayOfWeek(year, 11, 1); msDays = 30;

mtOfWeek = DayOfWeek(year, 12, 1); mtDays = 31;

PrintOneQuarter(year, mfOfWeek, mfDays, msOfWeek, msDays, mtOfWeek,

mtDays, row); break; default: break; } } /**

* 以下函数打印一个季度,也即是在同一行上的3个月的月历。 *

* 打印方式肯定是从上到下,从左到右依次打印。 *

* 每月至多有6周,至少有5周;第1周、第5周和第6周(如果有第6周)是需要特殊处理 * 的三个周,因为这3周并不一定总是有7天。 */ void PrintOneQuarter(int year, int mfOfWeek, int mfDays, int msOfWeek, int msDays, int mtOfWeek, int mtDays, int row) {

int mfDay = 1, msDay = 1, mtDay = 1; //对已经打印的天数记数 int i, j;

char space = 32;

//如果要打印的是1-3月的月历,则应该判断一下该年的2月是29天不是29天 if (row == 1) {

if ((year < 1753 && year % 4 == 0) || (year >= 1753 && ((year % 4 == 0

&& year % 100 != 0) || year % 400 == 0))) { msDays = 29; } }

for (i = 0; i < 6; ++i) { if (i == 0) {

//输出第一个月的第一周 if (mfOfWeek > 0) {

printf(\, 3 * mfOfWeek, space); }

for (j = mfOfWeek; j < 7; ++j) { printf(\, mfDay); mfDay++; }

//输出第二个月的第一周

printf(\, 3 * msOfWeek + 1, space); for (j = msOfWeek; j < 7; ++j) { printf(\, msDay); msDay++; }

//输出第三个月的第一周

printf(\, 3 * mtOfWeek + 1, space); for (j = mtOfWeek; j < 7; ++j) { printf(\, mtDay); mtDay++; }

continue; }

//打印2-4周 if (i < 4) { printf(

\


万年历算法的实现(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:珠海农用无人机统防统治植保作业工作方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: