改错题: [程序功能] 输入两个正确日期且年份在1900-9999范围内,计算 并输出两个日期之间间隔的天数,例如:2008-8-1 和2009-8-1之间间隔的天数为365 提示:能被4整除并且不能被100整除的年份是闰年,能 被400整除的年份也是闰年,其他年份则是平年 [测试数据与运行结果] 显示:first date: 输入:1980-2-1 显示:second date:2009-8-1 输出:10774 days [含有错误的源程序] #include <stdio.h> #define leap(int y) ((y)%4==0 && (y)%100!=0||(y)%400==0) struct d {int y,m,d;}; int days(struct d d1,struct d d2) {int mon[2][13]= {{0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}}; int i; long td=0; for(i=d1.y;i<d2.y;i++) td=leap(i)?366:365; for(i=1;i<d1.m;i++) td-=mon[leap(d1.y)][i]; td-=d1.d-1; for(i=1;i<d2.m;i++) td+=mon[leap(d2.y)][i]; td+=d2.d-1; return td; }
void main() {struct d d1,d2; long td; printf("first date:"); scanf("%d-%d-%d",d1.y,d1.m,d1.d); printf("second date:"); scanf("%d-%d-%d",d2.y,d2.m,d2.d); td=days(d1,d2); printf("%ld",td); }
|