(方法一)只用主函数解决问题!!
#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; } } |
|