xiongdei,以前做的,好像还有点小瑕疵,不过应该不碍事,
#include<stdio.h>
#define true 1
#define false 0
int Isleap(int t)
{
if(t%4==0&&t%100!=0||t%400==0) //判断是否为闰年
{
return true; //返回真或假
}
else
{
return false;
}
}
int Total_day(int a,int b,int c,int& k)
{
int i;
int num=c;
int x1[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int x2[]={31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for(i=0;i<b;i++)
{
if(a==1)
{
if(i>=1)
{
num=num+x1[i-1];
}
k=x1[i]; //记录某个月天数
}
else if(a==0)
{
if(i>=1)
{
num=num+x2[i-1];
}
k=x2[i];
}
}
return num;
}
int Display_week(int y,int m,int d)
{
int week;
if(m>=3&m<=12)
{
week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
}else if(m==1||m==2)
{
week=(d+2*(m+12)+3*(m+13)/5+y-1+(y-1)/4-(y-1)/100+(y-1)/400+1)%7;
}
return week; //公式计算星期几,返回0--6的值,对应星期天--星期六
}
int Display_month(int W,int D)
{
int t,x; //W星期天--星期六,数字对应0--6
t=D%7-1; //逆推1号是在星期几
x=W-t;
switch(x)
{
case 7:x=0;break;
case -1:x=6;break;
case -2:x=5;break;
case -3:x=4;break;
case -4:x=3;break;
case -5:x=2;break;
case -6:x=1;break;
}
return x;
}
int main()
{
int Y,M,D,W,flag,Day,x,y,i,j;
printf("please enter year,month,day:");
scanf("%d%d%d",&Y,&M,&D);
flag=Isleap(Y); //@1
if(flag==1)
{
printf("%d年%d月%d日是闰年\n",Y,M,D);
}else if(flag==0)
{
printf("%d年%d月%d日不是闰年\n",Y,M,D);
}
Day=Total_day(flag,M,D,y); //@2
printf("%d年%d月%d日是这一年的第%d天\n",Y,M,D,Day);
W=Display_week(Y,M,D); //@3
switch(W)
{
case 0:printf("%d年%d月%d日是星期天\n",Y,M,D);break;
case 1:printf("%d年%d月%d日是星期一\n",Y,M,D);break;
case 2: printf("%d年%d月%d日是星期二\n",Y,M,D);break;
case 3: printf("%d年%d月%d日是星期三\n",Y,M,D);break;
case 4: printf("%d年%d月%d日是星期四\n",Y,M,D);break;
case 5: printf("%d年%d月%d日是星期五\n",Y,M,D);break;
case 6:printf("%d年%d月%d日是星期六\n",Y,M,D);break;
}
x=Display_month(W,D); //@4
printf("Sun\t");
printf("Mon\t");
printf("Tue\t");
printf("Wed\t");
printf("Thu\t");
printf("Fri\t");
printf("Sat\t\n");
for(i=x;i>0;i--)
{
printf("\t");
}
for(i=1;i<=y;i++)
{
j=j+1;
x=x+1;
printf("%d\t",j);
if(x%7==0)
{
printf("\n");
}
}
}
#include<stdio.h>
#define true 1
#define false 0
int Isleap(int t)
{
if(t%4==0&&t%100!=0||t%400==0) //判断是否为闰年
{
return true; //返回真或假
}
else
{
return false;
}
}
int Total_day(int a,int b,int c,int& k)
{
int i;
int num=c;
int x1[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int x2[]={31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for(i=0;i<b;i++)
{
if(a==1)
{
if(i>=1)
{
num=num+x1[i-1];
}
k=x1[i]; //记录某个月天数
}
else if(a==0)
{
if(i>=1)
{
num=num+x2[i-1];
}
k=x2[i];
}
}
return num;
}
int Display_week(int y,int m,int d)
{
int week;
if(m>=3&m<=12)
{
week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
}else if(m==1||m==2)
{
week=(d+2*(m+12)+3*(m+13)/5+y-1+(y-1)/4-(y-1)/100+(y-1)/400+1)%7;
}
return week; //公式计算星期几,返回0--6的值,对应星期天--星期六
}
int Display_month(int W,int D)
{
int t,x; //W星期天--星期六,数字对应0--6
t=D%7-1; //逆推1号是在星期几
x=W-t;
switch(x)
{
case 7:x=0;break;
case -1:x=6;break;
case -2:x=5;break;
case -3:x=4;break;
case -4:x=3;break;
case -5:x=2;break;
case -6:x=1;break;
}
return x;
}
int main()
{
int Y,M,D,W,flag,Day,x,y,i,j;
printf("please enter year,month,day:");
scanf("%d%d%d",&Y,&M,&D);
flag=Isleap(Y); //@1
if(flag==1)
{
printf("%d年%d月%d日是闰年\n",Y,M,D);
}else if(flag==0)
{
printf("%d年%d月%d日不是闰年\n",Y,M,D);
}
Day=Total_day(flag,M,D,y); //@2
printf("%d年%d月%d日是这一年的第%d天\n",Y,M,D,Day);
W=Display_week(Y,M,D); //@3
switch(W)
{
case 0:printf("%d年%d月%d日是星期天\n",Y,M,D);break;
case 1:printf("%d年%d月%d日是星期一\n",Y,M,D);break;
case 2: printf("%d年%d月%d日是星期二\n",Y,M,D);break;
case 3: printf("%d年%d月%d日是星期三\n",Y,M,D);break;
case 4: printf("%d年%d月%d日是星期四\n",Y,M,D);break;
case 5: printf("%d年%d月%d日是星期五\n",Y,M,D);break;
case 6:printf("%d年%d月%d日是星期六\n",Y,M,D);break;
}
x=Display_month(W,D); //@4
printf("Sun\t");
printf("Mon\t");
printf("Tue\t");
printf("Wed\t");
printf("Thu\t");
printf("Fri\t");
printf("Sat\t\n");
for(i=x;i>0;i--)
{
printf("\t");
}
for(i=1;i<=y;i++)
{
j=j+1;
x=x+1;
printf("%d\t",j);
if(x%7==0)
{
printf("\n");
}
}
}