论坛上的同学给出的建议:
QUOTE:
$ cal 9 1752
September 1752
Su Mo Tu We Th Fr Sa
1 2 ....
14 15 16 ....
17 18 19 20 21 22 23
...
jamesr 发表于 2010-08-30 08:39
应论坛上同学的建议,新的代码修改如下:
#include <stdio.h>
#include <ctype.h>
#define SYEAR 1900
#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 Tue Wed Thu Fri Sat\n");
return;
}
void
printMonth(const WEEK firstDay, unsigned long length ){
WEEK weekDay = firstDay % 7;
unsigned long 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");
return;
}
unsigned long
isLeapYear(const unsigned long yr){
return ( yr%( yr%100 ? 4:400) ? 0 : 1);
}
unsigned long
getYearDay(const unsigned long year) {
unsigned long lastYear = year-1;
unsigned long yearNum = lastYear-1899;
unsigned long walker,counter=0;
for(walker=SYEAR; walker < year; ++walker) {
if(isLeapYear(walker)==1)
++counter;
}
return (365*yearNum+counter+1)%7;
}
void
printYear(const unsigned long y, const unsigned long m) {
WEEK yDay = getYearDay(y);
unsigned long vDay = isLeapYear(y);
QUOTE:
$ cal 9 1752
September 1752
Su Mo Tu We Th Fr Sa
1 2 ....
14 15 16 ....
17 18 19 20 21 22 23
...
jamesr 发表于 2010-08-30 08:39
应论坛上同学的建议,新的代码修改如下:
#include <stdio.h>
#include <ctype.h>
#define SYEAR 1900
#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 Tue Wed Thu Fri Sat\n");
return;
}
void
printMonth(const WEEK firstDay, unsigned long length ){
WEEK weekDay = firstDay % 7;
unsigned long 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");
return;
}
unsigned long
isLeapYear(const unsigned long yr){
return ( yr%( yr%100 ? 4:400) ? 0 : 1);
}
unsigned long
getYearDay(const unsigned long year) {
unsigned long lastYear = year-1;
unsigned long yearNum = lastYear-1899;
unsigned long walker,counter=0;
for(walker=SYEAR; walker < year; ++walker) {
if(isLeapYear(walker)==1)
++counter;
}
return (365*yearNum+counter+1)%7;
}
void
printYear(const unsigned long y, const unsigned long m) {
WEEK yDay = getYearDay(y);
unsigned long vDay = isLeapYear(y);