请各位大侠帮忙写一个程序(输入年份和月份,显示该月的月历)

1. 先计算出该年的1月1号是星期几
2.再计算出该月的1号是星期几
3.输出月历的头,即星期天~到星期六,适当空些位置
4.通过输出适当空格, 使该月的1号定位在正确的位置。
5.开始输出该月的日期。
计算公式:
w=[y+ (y-1)/4-(y-1)/100+(y-1)/400]%7
其中 w的值表示该年1月1日是星期几。 (0~6分别表示天~一)
w1=(w+n-1)%7 表示该年第n天是星期几。
用C语言写哦

第1个回答  2010-04-07
//楼主太够意思了.... 写完了说用c语言... 55555555555....

//写完了~~ 用 C++ IDE 运行下看看效果吧

#include<stdio.h>

/*得到所输入年月的第一天是星期几0~6*/
int getdate(int y,int m);

/*判断所输入的是否是闰月,是则返回1,否则返回0*/
int leap(int y);

/*打印输入月份月历表*/
void print(int y,int m);

int main()
{
int y,m;
printf("输入年份和月份:");
scanf("%d%d",&y,&m);
print(y,m);
return 0;
}

int getdate(int y,int m)
{
int w=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7;
int days=0;
switch(m)
{
case 12: days+=30;
case 11: days+=31;
case 10: days+=30;
case 9: days+=31;
case 8: days+=31;
case 7: days+=30;
case 6: days+=31;
case 5: days+=30;
case 4: days+=31;
case 3: if(leap(y)) days+=29;
else days+=28;
case 2: days+=31;
case 1: days+=0;
}
w=(w+days)%7;
return w; /*返回输入月份1号的星期*/
}

void print(int y,int m)
{
int w=getdate(y,m);
printf("%d年%d月的月历表:\n\n",y,m);
printf("\n==========================="
"========================\n\n");
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(leap(y)) month[1]=29;

printf("SUN\tMON\tTUE\tWED\tTHU\tFRI\tSAT\n");
int i,j;
for(i=0;i<w;i++) printf("\t");

for(i=w,j=1;j<=month[m-1];i++,j++)
{
if(i%7==0) printf("\n");
printf("%d\t",j);
}
printf("\n\n========================"
"===========================\n\n");
}

int leap(int y)
{
if((y%4==0&&y%100!=0)||y%400==0) return 1;
return 0;
}本回答被提问者采纳
相似回答