[原创] C语言实现:万年历
(2012-04-10 00:21:02)
标签:
万年历
原创
c语言
杂谈
[原创]
C语言实现:万年历经过近这几天的努力,终于写完了这个"万年历"的程序了,共享一下,
特别是同"勉"共享 {:3_193:}
[需求]
请打印出任意年份的日历
[代码]
#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("}", i);
if(weekDay==0)
printf("\n");
}
printf("\n");
}
int isLeapYear(const int yr)
{
return ( yr%( yr0 ? 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;
int monLen ;
monLen=0;
monLen=31; monLen=28+vDay; monLen=31;
monLen=30; monLen=31; monLen=30;
monLen=31; monLen=31; monLen=30;
monLen=31; monLen=30; monLen=31;
monWeeks=0;
monWeeks = yDay;
monWeeks = ((monWeeks +monLen )%7);
monWeeks = ((monWeeks +monLen )%7);
monWeeks = ((monWeeks +monLen )%7);
monWeeks = ((monWeeks +monLen )%7);
monWeeks = ((monWeeks +monLen )%7);
monWeeks = ((monWeeks +monLen )%7);
monWeeks = ((monWeeks +monLen )%7);
monWeeks = ((monWeeks +monLen )%7);
monWeeks = ((monWeeks +monLen )%7);
monWeeks = ((monWeeks +monLen )%7);
monWeeks = ((monWeeks +monLen )%7);
int i;
for(i=January; i<=December; ++i)
{
printf("\n-------------------------------------------------\n");
printf(" %d, %d \n",y,i);
printf("-------------------------------------------------\n");
printMonth(monWeeks,monLen);
printf("\n");
}
return;
}
int main(void)
{
int y;
int quit=0;
do
{
printf("Please enter which Year to Print For You
(0 to quit): ");
scanf("%d",&y);
printf("\n");
if(y==0)
quit = 1;
else
printYear(y);
}while(!quit);
return 0;
}输出
Please enter which Year to Print For You (0 to quit): 1973
-------------------------------------------------
1946, 1
-------------------------------------------------
Sun Mon Jue Wed Thu Fri Sat
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
-------------------------------------------------
1946, 2
-------------------------------------------------
Sun Mon Jue Wed Thu Fri Sat
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28
-------------------------------------------------
1946, 3
-------------------------------------------------
Sun Mon Jue Wed Thu Fri Sat
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
-------------------------------------------------
1946, 4
-------------------------------------------------
Sun Mon Jue Wed Thu Fri Sat
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
-------------------------------------------------
1946, 5
-------------------------------------------------
Sun Mon Jue Wed Thu Fri Sat
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
-------------------------------------------------
1946, 6
-------------------------------------------------
Sun Mon Jue Wed Thu Fri Sat
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
-------------------------------------------------
1946, 7
-------------------------------------------------
Sun Mon Jue Wed Thu Fri Sat
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
-------------------------------------------------
1946, 8
-------------------------------------------------
Sun Mon Jue Wed Thu Fri Sat
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
-------------------------------------------------
1946, 9
-------------------------------------------------
Sun Mon Jue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。