C语言编的年历表
#include "stdio.h"int yuetian(int y,int m);
int niantian(int a);
void yuelibiao(int d,int s);
int qiuxingqi(int y,int m);
main()
{
int y,m,d,s;
printf("请输入年份y=");
scanf("%d",&y);
printf("\t\t\t%d年历表",y);
for(m=1;m<=12;m++) /*----循环12个月-----*/
{
s=qiuxingqi(y,m);
printf("\n\n %d月份\n\n",m);
d=yuetian(y,m);
yuelibiao(d,s);
}
}
//==============================================
//函数名:xingqi()
//参数:int y int m
//功能:求出某年某月的一号是星期几
//返回值:s
//==============================================
int qiuxingqi(int y,int m)
{
int x1,x2,i,x;
x1=0;
x2=0;
if(y>=2007) /*----以2007年1月1号为界分两段----*/
{
for(i=y-1;i>=2007;i--) /*-----求2007年到y-1年的天数------*/
{
x1=niantian(i)+x1;
}
for(i=m-1;i>0;i--) /*------求y年元旦到y年m月的天数---*/
{
x2=yuetian(y,i)+x2;
}
x=x1+x2; /*--------总间隔天数------------*/
x=x%7+1; /*某年某月一号是星期x-----*/
}
else
{
for(i=y;i<2007;i++) /*-------------求y年到2007年的天数------*/
{
x1=niantian(i)+x1;
}
for(i=m-1;i>0;i--) /*-------求y年元旦到y年m月的天数-------*/
{
x2=yuetian(y,i)+x2;
}
x=x1-x2; /*-----总间隔天数--------*/
if(x%7==0)
x=1; /*------某年某月一号是星期x--*/
else
x=8-x%7; /*--------某年某月一号是星期x-----*/
}
return x;
}
//==============================================
//函数名:yueli()
//参数:int a int s
//功能:输出月历
//返回值:无
//==============================================
void yuelibiao(int d,int s)
{
int i,j,k;
printf(" 一 二 三 四 五 六 天\n");
for(i=1,j=0;i<=d;i++,j++) /*---------循环一个月的天数--------*/
{
if(j==0)
{
for(k=s-1;k>0;k--) /*---若不存在打印空格-----*/
{
printf(" ");
}
j=j+s; /*----将空格个数也算进去确保七天换一行----*/
}
printf("%6d",i);
if(j%7==0) /*-----七天换一行-----*/
printf("\n");
}
printf("\n");
}
//=============================================
//函数名:yuetian()
//参数:int y int m
//功能:求某年某月的天数
//返回值:某年某月的天数 d
//=============================================
int yuetian(int y,int m)
{
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:
{
if((y%4==0)&&(y%100!=0)||(y%400==0))
d=29;
else
d=28;
}
}
return d;
}
//================================================
//函数名:niantian()
//参数:int a
//功能:判断该年有几天
//返回值:返回该年天数d
//================================================
int niantian(int a)
{
int d;
if((a%4==0)&&(a%100!=0)||(a%400==0))
d=366;
else
d=365;
return d;
}