改錯題: [程序功能] 輸入兩個正確日期且年份在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); }
|