*/
# include & ltstdio.h & gt
long int f(int年,int月)
{
/*如果月份
如果(月& lt3)返回年份-1;
否則返回年份;
}
long int g(int月)
{
/*如果月份
如果(月& lt3)回歸月+13;
else返回月+1;
}
long int n(int年,int月,int日)
{
/*N=1461*f(年、月)/4+153*g(月)+日*/
return 1461L * f(年、月)/4 + 153L*g(月)/5 +天;
}
//計算星期幾,返回0表示星期天。
整數w(整數年,整數月,整數日)
{
/* w =(N-621049% 7(0 & lt;= w & lt7)*/
return (int)((n(年、月、日)% 7-621049 l % 7+7)% 7);
}
int date[12][6][7];
int day _ TB 1[][12]= { { 31,28,31,30,31,30,31,30,31,30,31,
{31,29,31,30,31,30,31,31,30,31,30,31}};
主()
{
int sw,leap,I,j,k,wd,day
int年;
char title[]= " TUE星期日,THU星期五,星期六";
printf("請輸入妳想知道其日歷的年份:");
scanf("%d*c ",& amp年份);/*輸入年份值,然後輸入*/
sw = w(年,1,1);
閏年% 4 = = 0 & amp& amp年份% 100 | |年份% 400 = = 0;
for(I = 0;我& lt12;i++)
for(j = 0;j & lt6;j++)
for(k = 0;k & lt7;k++)
日期[I][j][k]= 0;/*日期表設置為0*/
for(I = 0;我& lt12;I++) /* 65438+壹年02個月*/
for(wd=0,day = 1;day & lt= day _ TB 1[leap][I];day++)
{/*在日期表中填寫i+1的日期*/
日期[i][wd][sw] =日;
SW = ++ SW % 7;/*壹周七天,從0數到6 */
if(SW = = 0)wd++;/*日期表每七天運行壹次,新的壹行從星期日開始*/
}
printf(" \ n | = = = = = = = = = = = = = = = = = =第%d年的日歷= = = = = = = = = = = = = = = = = = = = = = = = | \ n | ",年份);
for(I = 0;我& lt6;i++)
{/*計算第壹個i+1月和第壹個i+7月的最大周數*/
for(wd=0,k = 0;k & lt7;K++) /*日期表第6行有日期,那麽wd!= 0*/
wd+= date[I][5][k]+date[I+6][5][k];
wd=wd?6:5;
printf("%2d %s %2d %s|\n| ",i+1,title,i+7,title);
for(j = 0;j & ltwd;j++)
{
printf(" ");/*輸出3個空白字符*/
/*左欄是敵人i+1月,右欄是第壹個i+7月*/
for(k = 0;k & lt7;k++)
如果(日期[i][j][k])
printf("%4d ",date[I][j][k]);
else printf(" ");
printf(" ");/*輸出6個空白字符*/
for(k = 0;k & lt7;k++)
如果(日期[i+6] [j] [k])
printf("%4d ",date[I+6][j][k]);
else printf(" ");
printf(" | \ n | ");
}
}
puts(" = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ");
puts("\n按任意鍵退出...");
getch();
}
這是壹個萬年歷。創建壹個新的對話框項目,添加壹個文本框,接受輸入,然後添加壹個輸出框,用w(年、月、日)計算星期幾。計算星期很簡單。先判斷是否已經在閏年程序中,再根據年月日判斷已經過了多少天,然後除以7。註意判斷是否可分。這很簡單。