C语言万年历

  • 格式:docx
  • 大小:22.91 KB
  • 文档页数:3

/*****万年历****/

#include

/**初始化显示**/

void init_display(int year,int month)

{

printf("*****************************************\n");

printf("%d year %d month calender is :\n",year,month);

printf("*****************************************\n");

printf("SUN MON TUE WEN THU FRI STA \n");

}

/*计算该月初的星期值*/

int mon_start_wek(int year,int month)

{

int yr_st_wek,mo_st_wek;

if(year>2000)

{

yr_st_wek=((year-2000)+(year-2000-1)/4-(year-2000-1)/100+(year-2000-1)/400+1)%7-1;//2000年后的年初星期值

}

else if(year<2000)

{

yr_st_wek=6-((2000-year)+(2000-year)/4-(2000-year)/100+(2000-year))%7;//2000年前的年初星期

}

else

yr_st_wek=6;

/*年初星期值计算结束*/

/*月初计算星期值开始*/

if(year%4==0&&year%100!=0||year%400==0)//判断是否是软闰年

{

switch(month)

{

case 1: mo_st_wek=yr_st_wek;break;

case 2: mo_st_wek=(yr_st_wek+3)%7;break;

case 3: mo_st_wek=(yr_st_wek+3+1)%7;break;

case 4: mo_st_wek=(yr_st_wek+3+1+3)%7;break;

case 5: mo_st_wek=(yr_st_wek+3+1+3+2)%7;break;

case 6: mo_st_wek=(yr_st_wek+3+1+3+2+3)%7;break;

case 7: mo_st_wek=(yr_st_wek+3+1+3+2+3+2)%7;break;

case 8: mo_st_wek=(yr_st_wek+3+1+3+2+3+2+3)%7;break;

case 9: mo_st_wek=(yr_st_wek+3+1+3+2+3+2+3+3)%7;break;

case 10:mo_st_wek=(yr_st_wek+3+1+3+2+3+2+3+3+2)%7;break;

case 11:mo_st_wek=(yr_st_wek+3+1+3+2+3+2+3+3+2+3)%7;break; case 12:mo_st_wek=(yr_st_wek+3+1+3+2+3+2+3+3+2+3+2)%7;break;

}

}

else

{

switch(month)

{

case 1: mo_st_wek=yr_st_wek;break;

case 2: mo_st_wek=(yr_st_wek+3)%7;break;

case 3: mo_st_wek=(yr_st_wek+3+0)%7;break;

case 4: mo_st_wek=(yr_st_wek+3+0+3)%7;break;

case 5: mo_st_wek=(yr_st_wek+3+0+3+2)%7;break;

case 6: mo_st_wek=(yr_st_wek+3+0+3+2+3)%7;break;

case 7: mo_st_wek=(yr_st_wek+3+0+3+2+3+2)%7;break;

case 8: mo_st_wek=(yr_st_wek+3+0+3+2+3+2+3)%7;break;

case 9: mo_st_wek=(yr_st_wek+3+0+3+2+3+2+3+3)%7;break;

case 10:mo_st_wek=(yr_st_wek+3+0+3+2+3+2+3+3+2)%7;break;

case 11:mo_st_wek=(yr_st_wek+3+0+3+2+3+2+3+3+2+3)%7;break;

case 12:mo_st_wek=(yr_st_wek+3+0+3+2+3+2+3+3+2+3+2)%7;break;

}

}

return mo_st_wek;

}

void display(int year,int month)

{

int mo_dy,mo_st_wek;//该月的总天数和七起始天的星期值

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)

{

mo_dy=31;

}

else if((year%4==0&&year%100!=0||year%400==0)&&month==2)

{

mo_dy=29;

}

else if(month==2)

{

mo_dy=28;

}

else

{

mo_dy=30;

}

mo_st_wek=mon_start_wek(year,month);

int i,j; for(j=0;j

{

printf(" ");

}

for(i=1;i<=mo_dy;i++)

{

printf("%2d ",i);

if((mo_st_wek+i)%7==0)

{

printf("\n");

}

}

printf("\n****************************************\n");

}

int main()

{

int year,month;

printf("*****************************************\n");

printf("please enter a date : \n");

scanf("%d %d",&year,&month);

while(month>12||month<1)

{

printf("month ERROR! please again enter month \n");

scanf("%d",&month);

}

init_display(year,month);

display(year,month);

return 0;

}