初来乍到,发个万年历小程序
本万年历只可查询本月日历,但也可在main()函数中稍加修改即可查询全年日历小弟新手,还望各位大侠不吝赐教!
#include <stdio.h>
int rn(int nianfen)/*判断某年是否是闰年*/
{
return ( ((nianfen % 4 == 0) && (nianfen % 100 != 0)) || (nianfen % 400 == 0));
}
int yf(int yuefen, int runnian)/*获得当月天数*/
{
int dyts;
switch(yuefen)
{
case 1: dyts=31;break;
case 2: dyts=28 + runnian;break;
case 3: dyts=31;break;
case 4: dyts=30;break;
case 5: dyts=31;break;
case 6: dyts=30;break;
case 7: dyts=31;break;
case 8: dyts=31;break;
case 9: dyts=30;break;
case 10: dyts=31;break;
case 11: dyts=30;break;
case 12: dyts=31;break;
}
return dyts;
}
int first(int y,int m)/*计算每月第一天是星期几*/
{
int yuandan,r,sum=0,i;
yuandan= (y-1+(y-1)/4-(y-1)/100+(y-1)/400 + 1) % 7;/*元旦是星期几*/
r=rn(y);
for(i=1;i<m; i++)/*计算这个月的第一天是星期几*/
sum += yf(i,r);
return (sum+yuandan) % 7;
}
print(int y,int m)/*打印当月日历*/
{
int i,fd,tianshu;
fd=first(y,m);
tianshu=yf(m,rn(y));/*当月天数*/
printf("\n\t%d年%d月\n",y,m);
printf(" 日 一 二 三 四 五 六\n");
for(i=0;i<fd;i++)/*输出一号前空出的星期天数*/
printf(" ");
for(i=1;i<=tianshu;i++)
{
printf("%3d ",i);
if((i+fd)%7==0)printf("\n");
}
printf("\n");
}
int main()
{
int pd=0,y,m;
char pp;
do
{
int x;
printf("本万年历只可查询每月日历!\n");
printf("请输入年月(格式:xxxx,xx):");
scanf("%d,%d",&y,&m);
print(y,m);
printf("是否继续?(Y继续,其他退出!)");
fflush(stdin);/* 清除输入年份时“回车”的缓冲流 */
scanf("%c",&pp);
if(pp == 'y' || pp == 'Y')
pd=0;
else
pd=-1;
printf("\n");
}while(pd != -1);
printf("程序成功退出!\n");
getch();
}
[ 本帖最后由 ggyy4k 于 2010-7-20 09:36 编辑 ]