C語言寫的一個好玩的萬年曆

相信大家都見過萬年曆,不管是家裡還是在手機上,電腦上,紙質的,軟體類的都或多或少的見過,所以今天給大家帶來的是一個用C語言控制台製作的一個萬年曆,當你輸入一個年份的時候,就會自動的顯示出輸入年份的每一天

下面貼代碼:

#include <stdio.h>

#include <windows.h>

long int f(int year, int month)

{

if (month<3) return year - 1;

else return year;

}/*f(年,月)=年-1,如月<3;否則,f(年,月)=年*/

long int g(int month)

{

if (month<3) return month + 13;

else return month + 1;

}/*g(月)=月+13,如月<3;否則,g(月)=月+1*/

long int n(int year, int month, int day)

{

return 1461L * f(year, month) / 4 + 153L * g(month) / 5 + day;

}/*N=1461*f(年、月)/4+153*g(月)/5+日*/

int w(int year, int month, int day)

{

return(int)((n(year, month, day) % 7 - 621049L % 7 + 7) % 7);

}/*w=(N-621049)%7(0<=w<7)*/

int date[12][6][7];

int day_tbl[][12] = { { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },

{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };

void main()

{

int sw, leap, i, j, k, wd, day;

int year;/*年*/

char title[] = "SUN MON TUE WED THU FRI SAT";

system("cls");

printf("Please input the year whose calendar you want to know: ");/*輸入年*/

scanf("%d%*c", &year);/*輸入年份值和掠過值後的回車*/

sw = w(year, 1, 1);

leap = year % 4 == 0 && year % 100 || year % 400 == 0;/*判閏年*/

for (i = 0; i<12; i++)

for (j = 0; j<6; j++)

for (k = 0; k<7; k++)

date[i][j][k] = 0;/*日期表置0*/

for (i = 0; i<12; i++)/*一年十二個月*/

for (wd = 0, day = 1; day <= day_tbl[leap][i]; day++)

{/*將第i+1月的日期填入日期表*/

date[i][wd][sw] = day;

sw = ++sw % 7;/*每星期七天,以0至6計數*/

if (sw == 0) wd++;/*日期表每七天一行,星期天開始新的一行*/

}

printf("
|==================The Calendar of Year %d =====================|
|", year);

for (i = 0; i<6; i++)

{/*先測算第i+1月和第i+7月的最大星期數*/

for (wd = 0, k = 0; k<7; k++)/*日期表的第六行有日期,則wd!=0*/

wd += date[i][5][k] + date[i + 6][5][k];

wd = wd ? 6 : 5;

printf("%2d %s %2d %s |
|", i + 1, title, i + 7, title);

for (j = 0; j<wd; j++)

{

printf(" ");/*輸出四個空白符*/

/*左欄為第i+1月,右欄為第i+7月*/

for (k = 0; k<7; k++)

if (date[i][j][k])

printf("%4d", date[i][j][k]);

else printf(" ");

printf(" ");/*輸出十個空白符*/

for (k = 0; k<7; k++)

if (date[i + 6][j][k])

printf("%4d", date[i + 6][j][k]);

else printf(" ");

printf(" |
|");

}

/*scanf("%*c");/*鍵入回車輸出下一個月的日曆*/

}

puts("=================================================================|");

getchar();

}

喜歡的朋友可以關注轉發一下咱們的文章

推薦閱讀:

TAG:C編程語言 | 萬年曆 |