我只学到循环,知道方法比较笨,大家批评指点一下~谢谢~
#include<stdio.h>
#include<math.h>
void main()
{
int year1,year2,month1,month2,day1,day2,run,t=0,m,n,j,k,day;
printf("请输入您的出生日期,如1986-8-4:");
scanf("%d-%d-%d",&year1,&month1,&day1);
printf("请输入今天的日期,如2005-3-21:");
scanf("%d-%d-%d",&year2,&month2,&day2);
/*先算出出生后的第二年到去年一共有多少天*/
j=year1+1; /*j为出生后第二年的年份*/
while (j<year2) /*循环条件是比今年小,即到去年的年份为止*/
{
if (j%4==0&&j%100!=0||j%400==0) run=1;
else run=0; /*判断j这个年份是否为润年,是的话赋值run为1,否为0*/
t=t+run; /*t为多出来的天数,即年份是闰年就会会多一天,累加起来*/
j=j++; /*年份加1后再循环*/
}
k=(year2-year1-1)*365+t; /*出生年到去年的年数乘365后再加上多出来的天数*/
/*算出生后那天起到来年有几天*/
switch(month1)
{
case 1:m=0;break;
case 2:m=31;break;
case 3:m=31+28;break;
case 4:m=31+28+31;break;
case 5:m=31+28+31+30;break;
case 6:m=31+28+31+30+31;break;
case 7:m=31+28+31+30+31+30;break;
case 8:m=31+28+31+30+31+30+31;break;
case 9:m=31+28+31+30+31+30+31+31;break;
case 10:m=31+28+31+30+31+30+31+31+30;break;
case 11:m=31+28+31+30+31+30+31+31+30+31;break;
case 12:m=31+28+31+30+31+30+31+31+30+31+30;break; /*m为出生那年过去的月份有几天*/
}
m=365-m-day1; /*算出生后那天起到出生那年结束有几天*/
/*算今年的天数*/
switch(month2)
{
case 1:n=0;break;
case 2:n=31;break;
case 3:n=31+28;break;
case 4:n=31+28+31;break;
case 5:n=31+28+31+30;break;
case 6:n=31+28+31+30+31;break;
case 7:n=31+28+31+30+31+30;break;
case 8:n=31+28+31+30+31+30+31;break;
case 9:n=31+28+31+30+31+30+31+31;break;
case 10:n=31+28+31+30+31+30+31+31+30;break;
case 11:n=31+28+31+30+31+30+31+31+30+31;break;
case 12:n=31+28+31+30+31+30+31+31+30+31+30;break; /*n为过去的月份有几天*/
}
if (year2%4==0&&year2%100!=0||year2%400==0) run=1;
else run=0; /*判断今年是否为闰年*/
if (run=1&&month2>=2) n=n+++day2; /*如果是闰年的话而且过了二月,就加一天*/
else if (run=1) n=day2; /*如果是闰年,但是一月的话直接就是日期了*/
else n=n+day2; /*不是闰年,就直接加上日期*/
day=k+m+n;/*把三个结果加起来*/
printf("到今天为止您活了%d天\n",day);
}