[原创] C语言实现:万年历
时间:2010-08-29
来源:互联网
经过近这几天的努力,终于写完了这个"万年历"的程序了,共享一下, 特别是同"勉"共享 
[需求]
请打印出任意年份的日历
[代码]
复制代码
输出
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 23 24 25 26 27 28
29 30
-------------------------------------------------
1946, 10
-------------------------------------------------
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, 11
-------------------------------------------------
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, 12
-------------------------------------------------
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
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/asiainfolf/archive/2010/08/29/5847101.aspx

[需求]
请打印出任意年份的日历
[代码]
- #include <stdio.h>
-
- #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<weekDay;++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);
-
- int i;
- for(i=January; i<=December; ++i)
- {
- printf("\n-------------------------------------------------\n");
- printf(" %d, %d \n",y,i);
- printf("-------------------------------------------------\n");
- printMonth(monWeeks[i],monLen[i]);
- 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 23 24 25 26 27 28
29 30
-------------------------------------------------
1946, 10
-------------------------------------------------
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, 11
-------------------------------------------------
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, 12
-------------------------------------------------
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
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/asiainfolf/archive/2010/08/29/5847101.aspx
作者: sohu2000000 发布时间: 2010-08-29
类似于cal命令吗?
作者: ecjtubaowp 发布时间: 2010-08-29
话说你这样一个个赋值很累的啊…………
还有你的程序竟然没有缩进…………
还有你的程序竟然没有缩进…………
作者: daybreakcx 发布时间: 2010-08-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28