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; }