用c语言编写一个万年历程序

输入年份,屏幕就显示这一年的日历,有星期

#include <stdio.h> #include <stdlib.h> int leap(int); //判断是否为闰年 int md(int m,int y); //返回本月的天数 void prtweek(void); //输出表头 int fw(int m,int y); //返回本月一号是星期几 void prtmonth(int m); //输出月份表头 int main(int argc, char* argv[]) { int y,m,i,test,week; printf("Year:"); scanf("%d",&y); for (m=1; m<=12; m++) { test=1; prtmonth(m); prtweek(); week=fw(m,y); if (week!=6) for (i=0; i<=week; i++) { putchar('\t'); test++; } for (i=1; i<=md(m,y); i++,test++) { printf("%d\t",i); if (test%7==0) { putchar('\n'); } } putchar('\n'); system("pause");//暂停,以便观察输出 } return 0; } int leap(int y) { return (y%4==0&&y%100||y%400==0)?1:0; } int md(int m,int y) { int d; switch (m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12:d=31;break; case 4: case 6: case 9: case 11:d=30;break; case 2:d=leap(y)?29:28;break; } return d; } void prtweek(void) { printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n","Sun","Mon","Tue","Wed","Thur","Fri","Sat"); } int fw(int m,int y) { int f; if (m<3) { m+=12; y--; } f=(1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; return f; } void prtmonth(int m) { switch (m) { default: case 1:puts("===January===");break; case 2:puts("===February===");break; case 3:puts("===March===");break; case 4:puts("===April===");break; case 5:puts("===May===");break; case 6:puts("===June===");break; case 7:puts("===July===");break; case 8:puts("===August===");break; case 9:puts("===September===");break; case 10:puts("===October===");break; case 11:puts("===November===");break; case 12:puts("===December===");break; } }

参考资料:http://wenwen.soso.com/z/q282958275.htm

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-04
#include <stdio.h>
void main()
{
int i,j,temp,temp_i,day,year;
long int yeardays;
long int sumday(int year); /*所有天数求和 ,不包括今天的 */
int leapyear(int year); /*闰年的定义*/
int month[]=;/*每月天数的判断*/
int everyday[6][14];
printf ("please enter a year:\n");
scanf("%d",&year);
yeardays=sumday(year);
for(temp=1;temp<=6;temp++)
{ getchar();
for(i=0;i<6;i++)
for(j=0;j<14;j++)
everyday[i][j]=0; /*天数初始化*/
switch(temp)
{
case 1:printf("\t 一月 %d\t\t 二月 %d\n",year,year);break;
case 2:printf("\t 三月 %d\t\t 四月 %d\n",year,year);break;
case 3:printf("\t 五月 %d\t\t 六月 %d\n",year,year);break;
case 4:printf("\t 七月 %d\t\t 八月 %d\n",year,year);break;
case 5:printf("\t 九月 %d\t\t 十月 %d\n",year,year);break;
case 6:printf("\t 十一月 %d\t\t 十二月 %d\n",year,year);break;
} /*控制两栏输出*/
printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六 \n");
i=0;j=0;
for(temp_i=0;temp_i<(yeardays%7);temp_i++)
{
everyday[0][j++]=0;
}
day=1;
while(day<=month[2*temp-1]) /*奇数输出*/
{
if(j%7==0)
{
j=0;i++;
}
everyday[i][j++]=day;

day++;
yeardays++;
}
i=0;j=7;
for(temp_i=0;temp_i<(yeardays%7);temp_i++)
{
everyday[0][j++]=0;
}
day=1;
if(leapyear(year)&&temp==1)
while(day<=month[13])
{
if(j%14==0)
{
j=7;i++;
}
everyday[i][j++]=day;
day++;
yeardays++;
}
else
while(day<=month[2*temp]) /*偶数输出*/
{
if (j%14==0)
{
j=7;i++;
}
everyday[i][j++]=day;
day++;
yeardays++;
}
for (i=0;i<6;i++)
{
for(j=0;j<14;j++)
{
if(everyday[i][j]!=0)
printf("%-4d",everyday[i][j]);
else
printf(" ");
if(j==6)
printf(" ");
}
printf("\n");
}

}
}
int leapyear(int year) /*闰年的判断*/
{
if((year%4==0&&year%100!=0)||year%400==0)
return(1);
else
return (0);
}

long int sumday(int year) /*每年天数的判断*/
{
int yearstart=1,leapsum=0;
while(yearstart<year)
{
if(leapyear(yearstart)!=0)
leapsum++;
yearstart++;
}
return 366*leapsum+365*(year-leapsum); /*不包括今天的*/

}
另外,站长团上有产品团购,便宜有保证
第2个回答  2011-05-04
#include <stdio.h>
void main()
{
int i,j,temp,temp_i,day,year;
long int yeardays;
long int sumday(int year); /*所有天数求和 ,不包括今天的 */
int leapyear(int year); /*闰年的定义*/
int month[]=;/*每月天数的判断*/
int everyday[6][14];
printf ("please enter a year:\n");
scanf("%d",&year);
yeardays=sumday(year);
for(temp=1;temp<=6;temp++)
{ getchar();
for(i=0;i<6;i++)
for(j=0;j<14;j++)
everyday[i][j]=0; /*天数初始化*/
switch(temp)
{
case 1:printf("\t 一月 %d\t\t 二月 %d\n",year,year);break;
case 2:printf("\t 三月 %d\t\t 四月 %d\n",year,year);break;
case 3:printf("\t 五月 %d\t\t 六月 %d\n",year,year);break;
case 4:printf("\t 七月 %d\t\t 八月 %d\n",year,year);break;
case 5:printf("\t 九月 %d\t\t 十月 %d\n",year,year);break;
case 6:printf("\t 十一月 %d\t\t 十二月 %d\n",year,year);break;
} /*控制两栏输出*/
printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六 \n");
i=0;j=0;
for(temp_i=0;temp_i<(yeardays%7);temp_i++)
{
everyday[0][j++]=0;
}
day=1;
while(day<=month[2*temp-1]) /*奇数输出*/
{
if(j%7==0)
{
j=0;i++;
}
everyday[i][j++]=day;

day++;
yeardays++;
}
i=0;j=7;
for(temp_i=0;temp_i<(yeardays%7);temp_i++)
{
everyday[0][j++]=0;
}
day=1;
if(leapyear(year)&&temp==1)
while(day<=month[13])
{
if(j%14==0)
{
j=7;i++;
}
everyday[i][j++]=day;
day++;
yeardays++;
}
else
while(day<=month[2*temp]) /*偶数输出*/
{
if (j%14==0)
{
j=7;i++;
}
everyday[i][j++]=day;
day++;
yeardays++;
}
for (i=0;i<6;i++)
{
for(j=0;j<14;j++)
{
if(everyday[i][j]!=0)
printf("%-4d",everyday[i][j]);
else
printf(" ");
if(j==6)
printf(" ");
}
printf("\n");
}

}
}
int leapyear(int year) /*闰年的判断*/
{
if((year%4==0&&year%100!=0)||year%400==0)
return(1);
else
return (0);
}

long int sumday(int year) /*每年天数的判断*/
{
int yearstart=1,leapsum=0;
while(yearstart<year)
{
if(leapyear(yearstart)!=0)
leapsum++;
yearstart++;
}
return 366*leapsum+365*(year-leapsum); /*不包括今天的*/

}
第3个回答  2011-05-03
include<stdio.h>
main()
{
for(;;)
{
int nian,yue,a,b,m,c,_m=28;
long e;
printf("请输入年份:");
scanf("%d",&nian);
e=nian;
e=e-1;
e=(e*365+e/4)%7;
m=e;
if((nian%4==0)||(nian%100==0)&&(nian%400!=0))
_m++;
printf("%d的日历:",nian);
for(yue=1;yue<=12;yue++)
{
if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
{
c=0;
printf("\n");
printf(" %d月 \n",yue);
printf(" 日 一 二 三 四 五 六\n");

for(b=1;b<=m;b++)
{
c++;
printf(" ");
}
for(a=1;a<=31;a++)
{
c++;

if(c%7-1==0&&c!=1)
printf("\n");
if(a<10)
printf(" ");
printf(" %d ",a);
m++;
if(m==7)
m=0;

}
printf("\n");

}
else
{
if(yue==4||yue==6||yue==9||yue==11||yue==2)
{
if(yue==2)
{
c=0;
printf("\n");
printf(" %d月 \n",yue);
printf(" 日 一 二 三 四 五 六\n");
for(b=1;b<=m;b++)
{
c++;
printf(" ");
}
for(a=1;a<=_m;a++)
{
c++;

if(c%7-1==0&&c!=1)
printf("\n");
if(a<10)
printf(" ");
printf(" %d ",a);
m++;
if(m==7)
m=0;

}
printf("\n");

}
else
{
c=0;
printf("\n");
printf(" %d月 \n",yue);
printf(" 日 一 二 三 四 五 六\n");

for(b=1;b<=m;b++)
{
c++;
printf(" ");
}
for(a=1;a<=30;a++)
{
c++;

if(c%7-1==0&&c!=1)
printf("\n");
if(a<10)
printf(" ");
printf(" %d ",a);
m++;
if(m==7)
m=0;

}
printf("\n");

}
}
}

}
}
}
第4个回答  2011-05-03

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网