/*年份:2012
*****壹月*****
周日周壹周二周三周四Fri周六
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
請按任意鍵繼續...
*****二月*****
周日周壹周二周三周四Fri周六
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
請按任意鍵繼續...
*****三月*****
周日周壹周二周三周四Fri周六
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
請按任意鍵繼續...
*****四月*****
周日周壹周二周三周四Fri周六
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
請按任意鍵繼續...
*/
# include & ltstdio.h & gt
# include & ltstdlib.h & gt
int JudgeLeapYear(int);//判斷是否是閏年。
int MonthDay(int m,int y);//返回本月的天數。
void print header(void);//輸出標題
int FirstWeek(int m,int y);//返回本月1日是星期幾。
void print month(int m);//輸出月標題
int main(int argc,char* argv[]) {
int年,月,日,測試,周;
printf("年:");
scanf("%d ",& amp年份);
for(month = 1;月份& lt= 12;月++) {
test = 1;
printMonth(月);
print header();
week = FirstWeek(月,年);
如果(周& lt6){//輸出每個月的第壹周。
for(I = 0;我& lt=周;i++) {
putchar(' \ t ');
test++;
}
}
for(I = 1;我& lt= MonthDay(月,年);i++,test++) {
//每個月輸出不是第壹周。
printf("%d\t ",I);
if(test % 7 = = 0)put char(' \ n ');
}
putchar(' \ n ');
系統(“暫停”);//暫停以觀察輸出。
}
返回0;
}
//判斷是否運行年份。
int JudgeLeapYear(int y) {
return((y % 4 = = 0)& amp;& amp(y%100) || (y%400 == 0))?1 : 0;
}
//這個月1號是星期幾?
int FirstWeek(int month,int year) {
如果(月& lt3) {
月+= 12;
年份-;
}
return(1+2 *月+ 3*(月+ 1)/5 +年+年/4 -年/100 +年/400)% 7;
}
//壹月有幾天
int MonthDay(int月,int年){
int d;
開關(月){
案例1:
案例三:
案例5:
案例7:
案例8:
案例10:
案例12:d = 31;打破;
案例4:
案例6:
案例9:
案例11:d = 30;打破;
案例2:d = JudgeLeapYear(年)?29 : 28;打破;
}
返回d;
}
//打印日歷標題
void printHeader(void) {
printf(" % s \ t % s \ t % s \ t % s \ t % s \ t % s \ t % s \ t % s \ t \ n "," Sun "," Mon "," Tue "," Wed "," Thur "," Fri "," Sat ");
}
//打印月份
void printMonth(int m) {
開關(m) {
默認值:
案例1:puts("\t*****壹月* * * * *);打破;
案例二:看跌期權(" \t*****二月* * * * *);打破;
案例三:看跌期權(" \t*****三月* * * * *);打破;
案例四:看跌期權(" \ t * * * * *月* * * * *);打破;
情況五:看跌期權(" \t*****可能* * * * *);打破;
案例6:看跌期權(" \ t * * * * *月* * * * *);打破;
案例7:看跌期權(" \ t * * * * *月* * * * *);打破;
案例8:看跌期權(" \ t * * * * *月* * * * *);打破;
案例9:看跌期權(" \ t * * * * *月* * * * *);打破;
案例10:puts("\t*****十月* * * * *);打破;
case 11:puts(" \ t * * * * * 11月* * * * *);打破;
案例12:看跌期權(" \ t * * * * *月* * * * *);打破;
}
}