问题如下:
1.所要查询年份的一月一日如何确定?
2.所要查询年份是否为闰年?
3.所要查询年份的每个月份如何打印?
4.打印日历要怎么排版?
程序如下
#include<stdio.h>//查询日历程序
#define N 1973//该年一月一日为周一
int runnian(int y);
int xq(int s);
void rili(int *p,int n,int r);
int main()
{
int i,y,a[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
printf("请输入你想查询的年份:");
scanf("%d",&y);
if(runnian(y)) a[1]=29;
printf(" ***%d年日历如下***\n",y);
printf(" ********1月*********\n");
printf(" 一 二 三 四 五 六 天\n");
rili(a,12,xq(y));
return 0;
}
int xq(int s)//确定所查年份的一月一日
{
int s0,c=1;
if(s>=N)
{
for(s0=N; s0<s; s0++)
{ if(runnian(s0)) c+=2;
else c+=1;
}
c=c%7;
}
else
{
for(s0=N-1; s0>=s; s0--)
{ if(runnian(s0)) c-=2;
else c-=1;
}
c=7-(-c)%7;
}
return (c);
}
int runnian(int y)//判断所查年份是否为闰年
{
if((y%4==0&&y%100!=0)||y%400==0)
return 1;
else
return 0;
}
void rili(int *p,int n,int r)//输出日历
{
int j,t,s,k;
for(s=1; s<r; s++)
printf(" ");
for(j=0; j<n; j++)
{
for(r=r,t=1; t<=*(p+j); t++,r++)
{
printf(" %-2d",t);
if(r%7==0) printf("\n");
}
if((j+2)<=12)
{
if((j+2)<10)
{ if((r-1)%7!=0)
{
printf("\n");
printf(" ********%d月*********\n",j+2);
}
else
{
printf(" ********%d月*********\n",j+2);
}
}
else
{
if((r-1)%7!=0)
{
printf("\n");
printf(" ********%d月********\n",j+2);
}
else
{
printf(" ********%d月********\n",j+2);
}
}
printf(" 一 二 三 四 五 六 天\n");
}
if(r%7!=0)
{
for(s=1; s<(k=r%7); s++)
printf(" ");
}
else
{
for(s=0; s<(k=(r-1)%7); s++)
printf(" ");
}
}
}
运行结果如下