本节的问题,与上一节的问题类似。上一节是求指定年月日距离1990年1月1日的天数;本节是给定出生年月日及现在年月日,计算天数。本节计算也是由两部分组成,一是现在年到出生年是几年并算出这些年天数之和,二是算出现在月日距出生月日的天数——如果现在月日比出生月日大,所得天数是正的;反之,如果现在月日比出生月日小,所得天数是负的。这两部分天数之和即为所求。
/***************************************************************/ /* 1.c 给定出生年月日及现在年月日,计算天数*/ /***************************************************************/ #include<stdio.h> void main() { int sum_day(int,int); int leap(int year); int year1,month1,day1,days1; int year,month,day,days,j,dayss=0; printf("请输入出生年月日(yyyy,mm,dd):"); scanf("%d,%d,%d",&year1,&month1,&day1); printf("请输入现在年月日(yyyy,mm,dd):"); scanf("%d,%d,%d",&year,&month,&day); days1=sum_day(month1,day1); if(leap(year1)&& month1>=3) days1=days1+1; days=sum_day(month,day); if(leap(year)&& month<=3) days=days+1; if(year1>year) printf("输入有误"); else if(year1==year){ printf("\n"); printf("总天数是%d天。\n",days-days1); printf("总小时数是%d。\n",24*(days-days1)); } else { for(j=year1+1;j<=year-1;j++){ if(leap(j)==1) dayss=dayss+366; else dayss=dayss+365; } if(leap(year1)==1) dayss=dayss+days+366-days1; else dayss=dayss+days+365-days1; printf("\n"); printf("总天数是%d天。\n",dayss); printf("总小时数是%d。\n",24*dayss); } } int sum_day(int month,int day) { int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int i; for(i=1;i<=month-1;i++) day+=day_tab[i]; return(day); } int leap(int year) { int leap; leap=year%4==0 && year%100!=0||year%400==0; return(leap); }
【例1.5】给定出生年月日及现在年月日,计算天数及小时数。
解:打开“给定出生年月日及现在年月日,计算天数及小时数”文件夹,双击扩展名为DSW的文件,进入Visual C++ 6.0编译环境,编译程序并执行,根据屏幕提示,输入出生年月日及现在年月日,运行结果如下:
由运行结果可见,从1947年12月4日到2016年5月19日共25004天,或600096小时。