You/谊 发表于 2014-3-11 23:15:52

c语言编写万年日历

如何编写一个万年日历,其功能是输入年份 就输出每个月,知道每一天是星期几,就是和日历上的一样

吸烟吐寂寞 发表于 2014-3-12 15:19:46


看一看 学习学习

超级忍者龟 发表于 2014-3-12 15:51:44

#include <stdio.h>
void main()
{
   extern void calendar(int,int);
   int year,month;
   scanf("%d,%d",&year,&month);       //输入年-月,格式如:2000,1
   printf(" 一 二 三 四 五 六 日\n");
   calendar(year,month);
}
void calendar(int year,int month)
{
   int days=0,day=0;
   int xq=1;         //记录星期
   int x,i=0;         //x是记录当前输入月份天数
   long all=0;         //all
   int date=1;
   if(year>=2007)
   {
x=year-2007;
L:
if(i<x)
{
if((2007+i)%4==0&&(2007+i)%100!=0||(2007+i)%400==0)
{
   all+=366;
   i++;
}
else
{
   all+=365;
   i++;
}
goto L;
}
   }
   if(year<2007)
   {
x=2007-year;
M:
if(i<x)
{
    if((2007-i)%4==0&&(2007-i)%100!=0||(2007-i)%400==0)
    {
all-=366;
i++;
    }
    else
    {
all-=365;
i++;
    }
    goto M;
}
   }
   if(year%4==0&&year%100!=0||year%400==0)
days=366;
   else
days=365;
   for(i=1;i<=month;i++)
   {
switch(i)
{
    case 1:day+=31;x=31;break;
    case 2:
    if(365==days)
{
day+=28;
x=28;
}
    else
{
day+=29;
x=29;
}
    break;
    case 3:day+=31;x=31;break;
    case 4:day+=30;x=30;break;
    case 5:day+=31;x=31;break;
    case 6:day+=30;x=30;break;
    case 7:day+=31;x=31;break;
    case 8:day+=31;x=31;break;
    case 9:day+=30;x=30;break;
    case 10:day+=31;x=31;break;
    case 11:day+=30;x=30;break;
    case 12:day+=31;x=31;break;
}
   }
   all+=day-x;
   while(all<0)
   {
   if(year%4==0&&year%100!=0||year%400==0)
   {
   all+=366;
   year--;
   if(all>0)
   {
   all--;
   goto LOOP;
   }
}
   else
   {
   all+=365;
   if(all>0)
   {
   all--;
   goto LOOP;
   }
   }
   }
LOOP:
   while(all)
   {
all--;
xq++;
if(xq>7)
    xq=1;
   }
   while(x)
   {
if(1==date)
{
if(xq==2)
printf("   ");
if(xq==3)
printf("      ");
if(xq==4)
printf("         ");
if(xq==5)
printf("            ");
if(xq==6)
printf("               ");
if(xq==7)
printf("                  ");
}

if(1==xq)
{
    for(i=1;i<=7;i++)
    {
printf("%3d",date);
xq++;
date++;
x--;
if(0==x)
goto A;
    }
    printf("\n");
xq=1;
}
if(2==xq)
{
    for(i=2;i<=7;i++)
    {
printf("%3d",date);
xq++;
if(xq>7)
         break;
date++;
x--;
if(0==x)
goto A;
    }
    printf("\n");
xq=1;
}
if(3==xq)
{
    for(i=3;i<=7;i++)
    {
printf("%3d",date);
xq++;
date++;
x--;
if(0==x)
goto A;
    }
    printf("\n");
xq=1;
}
if(4==xq)
{
    for(i=4;i<=7;i++)
    {
printf("%3d",date);
xq++;
date++;
x--;
if(0==x)
goto A;
    }
    printf("\n");
xq=1;
}
if(5==xq)
{
    for(i=5;i<=7;i++)
    {
printf("%3d",date);
xq++;
date++;
x--;
if(0==x)
goto A;
    }
    printf("\n");
xq=1;
}
if(6==xq)
{
    for(i=6;i<=7;i++)
    {
printf("%3d",date);
xq++;
date++;
x--;
if(0==x)
goto A;
    }
    printf("\n");
xq=1;
}
if(7==xq)
{
    printf("%3d\n",date);
xq=1;
    date++;
    x--;
    if(0==x)
goto A;
}
   }
A:
   printf("\n********************");
}
页: [1]
查看完整版本: c语言编写万年日历