C语言万年历

#include <stdio.h>
#include <string.h>

//返回0表示成功
int show(int year,int month)
{
int N,m,d,y,c,Wd;
int i,maxday;

if(month==13)
{
   year++;
   month=1;
}else if(month==0){
   year--;
   month=12;
}

if(month>13||month<0)
{
   printf("HAVE WRONG!");
   return -1;
}


m=month;
printf("/n============%d,%2d============/n",year,month);

switch(m)
{
case 1:maxday=31;break;
case 2:
   if( (year%4==0&&year%100!=0) || (year%400==0) )
    maxday=29;
   else
    maxday=28;
   break;
case 3:maxday=31;break;
case 4:maxday=30;break;
case 5:maxday=31;break;
case 6:maxday=30;break;
case 7:maxday=31;break;
case 8:maxday=31;break;
case 9:maxday=30;break;
case 10:maxday=31;break;
case 11:maxday=30;break;
case 12:maxday=31;break;  
}

if(0<m&&m<=2)
{  
   N=year-1;
   m=m+12-2;
}
else
{
   N=year;
   m=m-2;
}
c=N/100;
y=N%100;
//这是一个著名的是蔡勒(Zeller)公式。具体原理请网上搜索一下。
Wd=((1+(13*m-1)/5+y+y/4+c/4-2*c)%7+7)%7;

printf(" SUN MOU TUE WED TUR FRI SAT/n");
for(i=0;i<Wd;i++)
   printf("%4c",' ');
for(d=1;d<=maxday;d++)
{
   printf("%4d",d);
   Wd=(Wd+1)%7;
   if(Wd==0)
    printf("/n");
}
printf("/n");
return 0;
}

void main( )
{
int year,month;
char x[20];
int flag=0;

printf("please input   year: ");
scanf("%d",&year);
printf("please input month: ");
scanf("%d",&month);

flag=show(year,month);
while(flag==0)
{
   printf("/n");
   printf("功能列表:下月N,上月P,退出Q /n");
   scanf("%s",x);
   if(x[0]=='N' || x[0]=='n')
   { flag=show(year,++month); }
   else if(x[0]=='P' || x[0]=='p')
   { flag=show(year,--month); }
   else
   {
    printf("感谢使用!/n");
    flag=-1;
   }

}

 


}
 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值