#include <stdio.h>
2
3 #define LMonth 31
4 #define SMonth 30
5 #define VMonth 29
7
8 int main()
9 {
10 int y;
11 int quit = 0;
12
13 do
14 {
printf("Please enter which year to print for you (0 to quit):");
16 scanf("%d",&y);
17 printf("\n");
18
19 if (0 == y)
20 quit = 1;
21
22 else
23 printYear(y);
24
25 }
26 while (!quit);
27
28 return 0;}
30
31 typedef enum
32 {
33 Sun, Mon, Tus, Wed, Thu, Fri, Sat
34 }
35 WEEK;
36
37 typedef enum
38 {
39 January = 1 ,February, Match, Apirl, May, June, July, August, Septe mber,
40 October, November, December
41 }
MONTH;
43
44 void printMonHead(void)
45 {
46 printf(" Sun Mon Tus Wed Thu Fri Sat\n");
47 }
48
49 void printMonth(const WEEK firstDay, int length)
50 {
51 int i;
52 WEEK weekDay = firstDay % 7;
53 printMonHead();
54
55 for (i = 0; i < weekDay; ++i)
{
57 printf(" ");
58 }
59
60 for (i = 1; i < length; ++i)
61 {
62 weekDay = (++weekDay) % 7;
63 printf("%5d",i);
64 if (0 == weekDay)
65 {
66 printf("\n");
67 }
68 }
69 printf("\n");
}
71
72 int isLeapYear(const int yr)
73 {
74 return (yr % (yr % 100 ? 4:400) ? 0:1);
75 }
76
77 int getYearDay(const int year)
78 {
79 int lastYear = year-1;
80 int yearNum = lastYear-1899;
81 int walker, counter = 0;
82
83 for (walker = 1900; walker < year; ++walker)
{
85 if (1 == isLeapYear(walker))
86 {
87 ++counter;
88 }
89 }
90 return (365 * yearNum + counter + 1) % 7;
91 }
92
93 int printYear(const int y)
94 {
95 int vDay = isLeapYear(y);
96 int monWeeks [13];
97 int monLen [13];
WEEK yDay = getYearDay(y);
100 monLen[0]=0;
101 monLen[January]=31;
102 monLen[February]=28+vDay;
103 monLen[Match]=31;
104 monLen[Apirl]=30;
105 monLen[May]=31;
106 monLen[June]=30;
107 monLen[July]=31;
108 monLen[August]=31;
109 monLen[September]=30;
110 monLen[October]=31;
111 monLen[November]=30;
112 monLen[December]=31;
monWeeks[Match] = ((monWeeks[February] + monLen[February]) % 7);
115 monWeeks[Apirl] = ((monWeeks[Match] + monLen[Match]) % 7);
116 monWeeks[May] = ((monWeeks[Apirl] + monLen[Apirl]) % 7);
117 monWeeks[June] = ((monWeeks[May] + monLen[May]) % 7);
118 monWeeks[July] = ((monWeeks[June] + monLen[June]) % 7);
119 monWeeks[August] = ((monWeeks[July] + monLen[July]) % 7);
120 monWeeks[September]= ((monWeeks[August] + monLen[August]) % 7);
121 monWeeks[October] = ((monWeeks[September] + monLen[September]) % 7 );
122 monWeeks[November] = ((monWeeks[October] + monLen[October]) % 7);
123 monWeeks[December] = ((monWeeks[November] + monLen[November]) % 7);
124
125 int i;
126 for (i = January; i <= December; ++i)
{
128 printf(" %d . %d \n",y,i);
129 printf("------------------------------\n");
130 printMonth(monWeeks[i], monLen[i]);
131 printf("\n");
132 }
133
134 return;
135 }
打印某年的日历
最新推荐文章于 2021-03-18 16:51:21 发布