用C語言實現計算日期相關的問題一直是各個學校考研復試中重點問題,今天帶大家實現一個小例子:給定兩個日期,計算相隔的天數 輸入:輸入兩組日期數據,格式為:xxxx xx xx(分別為年、月、日),計算相隔天數 示例:請輸入第一個日期:2012 3 4 請輸入第二個日期:2012 3 6 相隔天數為2 代碼:
#define _CRT_SECURE_NO_WARNINGS //我用的是vs2013,使用scanf函 //數需要關閉安全檢查,以后同理,不再贅述 #include<stdio.h>#include<stdlib.h>typedef struct DATE{ int year; int month; int day;}DATE; //定義日期結構體int isEqual (DATE date1, DATE date2); //判斷兩個日期是否相等int isrunyear (int year); //判斷是否為閏年int month_day (int month, int year); //計算每月的天數int riqicha (DATE date1, DATE date2); //計算日期差int main (){ DATE date1, date2; PRintf ("請輸入第一個日期:"); scanf ("%d%d%d", &date1.year, &date1.month, &date1.day); printf ("/n"); printf ("請輸入第二個日期:"); scanf ("%d%d%d", &date2.year, &date2.month, &date2.day); printf ("/n"); //請輸入第一個日期 //請輸入第二個日期 //日期格式為:xxxx xx xx printf ("日期差為:%d", riqicha (date1, date2)); system ("pause"); //等待一下,如不加這句話程序完成之后會自動退 //出, 以后不再贅述 return 0;}int isEqual (DATE date1, DATE date2){ if (date1.year == date2.year&&date1.month == date2.month&&date1.day == date2.day) return 1; else return 0;}int isrunyear (int year){ if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) /*判斷一年是否為閏年的條件:是4的整數倍,不能是100的整數倍,可以是400的整數倍*/ return 1; else return 0;}int month_day (int month, int year){ switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: return isrunyear (year) ? 29 : 28; default: return -1; }}int riqicha (DATE date1, DATE date2){/*核心代碼,請注意領悟思想,很多同學第一次看見本題時第一想法是先計算兩個日期相隔多少年,再算月數,再將每月天數相加,再加多出來的日數,這種思想沒有錯誤,但人類思考的工作太大,程序員都是懶惰的,盡量將工作交給計算機來做,本算法思想為:設置一個相隔天數num,初始為0,第一個日期沒往后推一天,num自身加一,等到第一個日期和第二個日期相等時,num即為相隔天數*/ int num = 0; while (!isEqual (date1, date2)) { if (date1.day != month_day (date1.month, date1.year)) { date1.day++; } else { if (date1.month != 12) { date1.month++; date1.day = 1; } else { date1.year++; date1.month = 1; date1.day = 1; } } num++; } return num;}歡迎關注微信公眾號:C語言二偉 
新聞熱點
疑難解答