C语言求高手!!!!!!!!!!!输入年份就能显示当年月历,并能看出日期是星期几,并且是否是闰年!!

急求!!!!!!

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

int second(int year, int month, int days)
{
static int mdays[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
int i, y = year - 1;
for (i=0; i<month; ++i) days += mdays[i];
if (month>2)
{
if (((year%400)==0) || ((year&3)==0 && (year%100))) ++days;
}
return (y+y/4-y/100+y/400+days)%7;
}

void secondproblem()
{
int year,month,day,w;
static char* wday[]={ "日","一","二","三","四","五","六" };
printf("请输入年份:\n");
scanf("%d",&year);
printf("请输入月份:\n");
scanf("%d",&month );
printf("请输入日期:\n");
scanf("%d",&day);
if((year%4==0&&year%100!=0||year%400==0)==1)
printf("%d年 是闰年\n", year);
else
printf("%d年 是平年\n", year);
w = second(year,month,day);
printf("%d年%d月%d日 是星期%s.\n\n", year, month, day, wday[w]);

}

int f(int year,int month)
{
if(month<3) return year-1;
else return year;
}
int g(int month)
{
if(month<3) return month+13;
else return month+1;
}
int n(int year,int month,int day)
{
return 1461L*f(year,month)/4+153L*g(month)/5+day;
}
int w(int year,int month,int day)
{
return(int) ((n(year,month,day)%7-621049L%7+7)%7);
}

void thirdproblem()
{
int date[12][6][7];
int day_tbl[ ][12]={{31,28,31,30,31,30,31,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 year;
char title[]="SUM MON TUE WED THU FRI SAT";
printf("Please input the year whose calendar you want to know(请输入您想要输出日历的年份):");
scanf("%d%*c",&year);
sw=w(year,1,1);
leap=year%4==0&&year%100||year%400==0;
for(i=0;i<12;i++)
for(j=0;j<6;j++)
for(k=0;k<7;k++)
date[i][j][k]=0;
for(i=0;i<12;i++)
for(wd=0,day=1;day<=day_tbl[leap][i];day++)
{
date[i][wd][sw]=day;
sw=++sw%7;
if(sw==0) wd++;
}
printf("|================== The Calendar of Year %d==================|\n|",year);
for(i=0;i<6;i++)
{
for(wd=0,k=0;k<7;k++)
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<wd;j++)
{
printf(" ");
for(k=0;k<7;k++)
if(date[i][j][k])
printf("%4d",date[i][j][k]);
else printf(" ");
printf(" ");
for(k=0;k<7;k++)
if(date[i+6][j][k])
printf("%4d",date[i+6][j][k]);
else printf(" ");
printf("|\n|");
}
}
puts("==============================================================|");
system("pause");
}
}

void ShowMenu()
{
char *str[4]={"请选择:","1:输出年历","2:输出星期几+公历节日","3:退出",};
int i;
for(i=0;i<4;i++)
printf("%s\n",str[i]);
}
int main()
{
int a;
system("cls");
do{
ShowMenu();
printf("请输入您的选择:");
scanf("%d",&a);
switch(a)
{
case 1:
thirdproblem();
break;
case 2:
secondproblem();
break;
case 3:
break;

}
}while(a!=3);
return 0;
}

亲,好了追问

我搞错了。。。C语言求高手!!!!!!!!!!!应该是:输入年份月份就能显示当月月历,并能看出日期是星期几,并且是否是闰年!!

追答

亲,改好啦。由于字数太多,放不下,你给个邮箱吧
#include
#include
#include

int second(int year, int month, int days)
{
static int mdays[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
int i, y = year - 1;
for (i=0; i2)
{
if (((year%400)==0) || ((year&3)==0 && (year%100))) ++days;
}
return (y+y/4-y/100+y/400+days)%7;
}

void secondproblem()
{
int year,month,day,w;
static char* wday[]={ "日","一","二","三","四","五","六" };
printf("请输入年份:\n");
scanf("%d",&year);
printf("请输入月份:\n");
scanf("%d",&month );
printf("请输入日期:\n");
scanf("%d",&day);
if((year%4==0&&year%100!=0||year%400==0)==1)
printf("%d年 是闰年\n", year);
else
printf("%d年 是平年\n", year);
w = second(year,month,day);
printf("%d年%d月%d日 是星期%s.\n\n", year, month, day, wday[w]);

}

int yue()
{
int i,x,day,j,s=0,sum=365,m,month,c,d;
printf("请输入年份:");
scanf("%d",&x);
printf("请输入月份:");
scanf("%d",&month);
while(1){
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
day=(x+(x-1)/4-(x-1)/100+(x-1)/400)%7;
if(x%100==0){
if(x%400==0){
a[1]++;sum++;}
}
else if(x%4==0){
a[1]++;sum++;}
if(day==0)
day=7;
sum=sum+day;
for(i=0;i<12;i++){
if(i==month-1){
printf("%d年%d月:\n\n",x,month);
printf(" SUN MON TUE WED THU FRI SAT\n");}
{for(j=1;j<=a[i];j++)
{if(j==1)
for(m=0;m<day%7*5;m++)
if(i==month-1)
printf(" ");
if(i==month-1)
printf("%5d",j);
if((day+j)%7==0)
if(i==month-1)
printf("\n");}
day=(day+a[i])%7;}
}
c=getch();
if(c==27)
return 0;
d=getch();

温馨提示:答案为网友推荐,仅供参考