c语言 模拟万年历 答案,[原创] C语言实现:万年历(1)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

经过近这几天的努力,终于写完了这个"万年历"的程序了,共享一下, 特别是同"勉"共享

[需求]

请打印出任意年份的日历

[代码]

代码

#include

#define LMonth 31

#define SMonth 30

#define VMonth 28

typedef enum {

Sun,

Mon,

Jue,

Wed,

Thu,

Fri,

Sat

} WEEK;

typedef enum {

January = 1,

February,

Match,

Apirl,

May,

June,

July,

August,

September,

October,

November,

December

} MONTH;

void printMonHead(void)

{

printf(" Sun Mon Jue Wed Thu Fri Sat\n");

}

void printMonth(const WEEK firstDay, int length )

{

WEEK weekDay = firstDay % 7;

int i;

printMonHead();

for (i=0; i

{

printf(" ");

}

for(i=1;i<=length;++i)

{

weekDay = (++weekDay)%7;

printf("%7d", i);

if(weekDay==0) printf("\n");

}

printf("\n");

}

int isLeapYear(const int yr)

{

return ( yr%( yr%100 ? 4:400) ? 0 : 1);

}

int getYearDay(const int year)

{

int lastYear = year-1;

int yearNum = lastYear-1899;

int walker,counter=0;

for(walker=1900; walker < year; ++walker)

{

if(isLeapYear(walker)==1)

++counter;

}

return (365*yearNum+counter+1)%7;

}

void printYear(const int y)

{

WEEK yDay = getYearDay(y);

int vDay = isLeapYear(y);

int monWeeks[13];

int monLen [13];

monLen[0]=0;

monLen[January]=31; monLen[February]=28+vDay; monLen[Match]=31;

monLen[Apirl]=30; monLen[May]=31; monLen[June]=30;

monLen[July]=31; monLen[August]=31; monLen[September]=30;

monLen[October]=31; monLen[November]=30; monLen[December]=31;

monWeeks[0]=0;

monWeeks[January] = yDay;

monWeeks[February] = ((monWeeks[January] +monLen[January] )%7);

monWeeks[Match] = ((monWeeks[February] +monLen[February] )%7);

monWeeks[Apirl] = ((monWeeks[Match] +monLen[Match] )%7);

monWeeks[May] = ((monWeeks[Apirl] +monLen[Apirl] )%7);

monWeeks[June] = ((monWeeks[May] +monLen[May] )%7);

monWeeks[July] = ((monWeeks[June] +monLen[June] )%7);

monWeeks[August] = ((monWeeks[July] +monLen[July] )%7);

monWeeks[September] = ((monWeeks[August] +monLen[August] )%7);

monWeeks[October] = ((monWeeks[September] +monLen[September] )%7);

monWeeks[November] = ((monWeeks[October] +monLen[October] )%7);

monWeeks[December] = ((monWeeks[November] +monLen[November] )%7);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值