分享

求出生天数

 龙驹游子 2009-03-08
方法一)只用主函数解决问题!!
#include<stdio.h>
struct Date
{
    int year;
    int month;
    int day;
}begindate,mydate;
/*定义date结构体函数*/
void main()
{ int sumday;
   sumday=0;
printf("请输入您的出生日和当前日期(格式如19890101,19890101)\n");
scanf("%4d%2d%2d,%4d%2d%2d",&begindate.year,&begindate.month,&begindate.day,&mydate.year,&mydate.month,&mydate.day);
for(int i=begindate.year;i<mydate.year;i++)
      if((i%4 == 0 && i%100 !=0)||i%400 == 0)
 {sumday+=366;}
       else
 {sumday+=365;}/*先总体求出从出生年到当年为止出生的天数*/
for(int j=1;j<mydate.month;j++)
        {
         if(j==1 || j== 3 || j==5 || j==7 || j==8 || j==10 || j==12)
         {
          sumday+=31;
          }
         else
          {
           if(j==2)
           {
 if((mydate.day%4 == 0 && mydate.day%100 !=0)||mydate.day%400 == 0)
            {
             sumday+=29;
             }
              else
                 {
                    sumday+=28;
                    }
                }
                else
                {
                    sumday+=30;
                }
            }
        }
 sumday+=mydate.day;/*加上当年已经过的天数*/
 for(i=1;i<begindate.month;i++)
        {
         if(i==1 || i== 3 || i==5 || i==7 || i==8 || i==10 || i==12)
            {
                sumday-=31;
            }
            else
            {
                if(i==2)
                {
      if((begindate.day%4 == 0 && begindate.day%100 !=0)||begindate.day%400 == 0)
                    {
                        sumday-=29;
                    }
                    else
                    {
                        sumday-=28;
                    }
                }
                else
                {
                    sumday-=30;
                }
            }
        }
 sumday-=begindate.day;/*减去出生年在出生前已经过去的日子*/
printf("从出生到现在已经%d天了",sumday);/*输出总天数*/
}
方法二用功能函数
#include<stdio.h>
 struct Date
  {
    int year;
    int month;
    int day;
 }begindate,mydate;/*定义date结构体函数*/
 int leap(int n)
  {if((n%4 == 0 && n%100 !=0)||n%400 == 0)
   return 1;
  else return 0;
  }/*判断是否是闰年的函数*/
 int pass_year(int b_y,int m_y)
  {int i,sumday=0;
     for(i=b_y;i<m_y;i++)
      if(leap(i))
 {sumday+=366;}
       else
 {sumday+=365;}
        return sumday;
   }/*计算从出生年到当年元旦前总天数*/
 int this_year(int y,int m,int d )
  {int sumday=0;
      for(int j=1;j<m;j++)
       {
        if(j==1 || j== 3 || j==5 || j==7 || j==8 || j==10 || j==12)
         {
          sumday+=31;
          }
        else
          {
          if(j==2)
          {
             if(leap(y))
             {
              sumday+=29;
              }
              else
             {
              sumday+=28;
              }
          }
        else
            {
              sumday+=30;
            }
         }
     }
   sumday+=d;/*加上当年已经过的天数*/
    return sumday;}/*可以计算当年已过天数或出生年在出生日之前的天数*/
void main()
{ int sumday,flag; char a;
   sumday=0;
while(flag)/*用while循环可以实现反复计算*/
 {
   printf("请输入您的出生日和当前日期(格式如19890101,19890101)\n");
   scanf("%4d%2d%2d,%4d%2d%2d",&begindate.year,&begindate.month,&begindate.day,&mydate.year,&mydate.month,&mydate.day);
sumday=pass_year(begindate.year,mydate.year);/*调用函数计算从出生年到当年元旦前总天数*/
sumday+=this_year(mydate.year,mydate.month,mydate.day);/*调用函数加上当年已经过的天数*/
sumday-=this_year(begindate.year,begindate.month,begindate.day);/*调用函数减去出生年已经过的天数
*/
printf("从出生到现在已经%d天了\n",sumday);/*输出总天数*/
sumday=0;
printf("是否继续查询y(Y)/n(N):");
a=getchar();
scanf("%c",a);
if(a=='n'||a=='N')
flag=0;
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多