[原创] C语言实现:万年历
2010-08-29 05:12
603 查看
经过近这几天的努力,终于写完了这个"万年历"的程序了,共享一下, 特别是同"勉"共享
[需求]
请打印出任意年份的日历
[代码]
代码
[输出]
Please enter which Year to Print For You (0 to quit): 1973
Please enter which Year to Print For You (0 to quit): 1973
本文来自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 y3 = 2000; // int y3 = 1946; // printYear(y3); 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
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 |
相关文章推荐
- 简单的银行系统C语言可实现--谈不上完全原创,也是作业的一部分
- C语言实现万年历
- c语言实现万年历
- 用C语言来实现hex文件到coe文件的转化[原创]
- 【原创】《算法导论》链表一章带星习题试解——附C语言实现
- c语言实现万年历
- 万年历(C语言代码实现)
- 万年历(C语言)---绝对原创
- 哈夫曼树 C语言实现 原创下改正
- 用c语言实现作曲与播放教程~,原创哦~
- C语言实现几种编码形式的互转 -----(整理加原创)
- [原创]堆排序 C语言实现
- C语言实现万年历
- C语言实现万年历
- 万年历的C语言实现
- C语言实现的一个简单的万年历
- C语言实现的一个万年历小程序
- C语言实现万年历
- C语言实现万年历
- C语言实现:万年历(TR4.2)