____万年历____
网友“追影”写的发给我的。starwing版主曾提了个输出2009年的日历的问题,我写的时候没用函数,后来网友梁子改进成万年历的时候也没用函数,追影不但用了函数,而且code很简单很清晰很规范,有兴趣的朋友可以看看
————————————————————————————我是分割线——————————————————————————————
#include <stdio.h>
int rn(int nianfen)/*判断某年是否是闰年*/
{
if( ((nianfen % 4 == 0) && (nianfen % 100 != 0)) || (nianfen % 400 == 0))
return 1;
else
return 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 yuandan(int nian)/*元旦是星期几*/
{
return (nian-1+(nian-1)/4-(nian-1)/100+(nian-1)/400 + 1) % 7;
}
void prin(int yuefen,int nian)/*输入月份表*/
{
int i,dyts,xqdw,sun=0,x=0;
dyts = yf(yuefen,rn(nian));/*获得当月天数*/
printf("\n\t%d年%d月\n",nian,yuefen);
printf(" 日 一 二 三 四 五 六\n");
for(i=1; i<yuefen; i++)/*计算这个月的第一天是星期几*/
{
sun += yf(i,rn(nian));
}
xqdw = (sun+yuandan(nian)) % 7;
for(i=0; i<xqdw; i++)/*把当月1日的前几天空过去*/
{
printf(" ");
x++;
}
for(i=1; i<=dyts; i++)/*输入月份表*/
{
printf("%3d",i);
x++;
if(x == 7)
{
printf("\n");
x=0;
}
else
{
printf(" ");
}
}
printf("\n");
}
void gn()
{
int nian,x=1,i;
char pd;
printf("请输入要打印的年份(格式:xxxx):");
scanf("%d",&nian);
do
{
if(x == 1)/*正常输出*/
{
printf("\n\n");
for(i=1; i<=12; i++)/*输出月份表*/
{
prin(i,nian);
}
}
printf("是否继续打印(Y/N)?");
fflush(stdin);//清除输入年份时“回车”的缓冲流
scanf("%c",&pd);
if(pd == 'y' || pd == 'Y')
{
x = 1;
gn();
}
else
{
if(pd == 'n' || pd == 'N')
{
x = 1;
}
else
{
x = 0;
printf("选择错误请重新输入:\n");
}
}
}
while(x != 1);
}
int caidan()/*菜单项*/
{
int x;
printf("万年历功能菜单\n1. 打印某年的全年日历\n2. 退出\n");
printf("请输入您的选择:");
scanf("%d",&x);
switch(x)
{
case 1:gn();return 0;
case 2:return -1;
default:printf("输入错误请重新输入!\n");return 0;
}
}
int main()
{
int pd=0;
do
{
printf("\n\n");
if(pd == 0)
{
pd = caidan();
}
}
while(pd != -1);
printf("程序成功退出!\n");
return 0;
}
————————————————————————————我是分割线——————————————————————————————
ps:相比我原来的有点小不同,它不是3行4列的格式输出的,现在有兴趣的朋友可以想想玩,怎么在不大改动的情况下实现每3个月换行的功能.