根據日期得到今天是星期幾
阿新 • • 發佈:2019-01-22
問題描述:
怎樣能通過一個年月日的輸入而得到該日期所處的星期呢?
解決思路:
(1)、首先我們知道一個星期是七天,而且這七天是周而復始,不斷迴圈的!(重要條件之一)
(2)、其次如果我們知道一個確定的日期,而且知道它對應的是星期幾。那麼我們就可以通過條件(1)來
計算出一個指定日期對應的星期了!
這裡,有同學可能就要問了:知道了一個確定的日期(我們稱該日期為基準日期)和其對應的星
期(基準星期),怎麼就可以知道其他日期(目標日期)
嗯,這就是演算法的核心所在! 首先我們可以通過“基準日期”和“目標日期”計算得出它倆之間的天
數(AllDays),然後用該天數對7(一星期的天數)求餘再加上基準星期就是目標星期了!說出來有
點繞,我列出下面的公式就可以一目瞭然了:
(3)、好了,最後一個條件:怎麼得到一個基準日期和其對應的基準星期呢?
我是通過手機的日曆功能檢視知道,我的手機能翻到的最早的日期是1970年1月1日,那天是星期四。
好,那麼萬事俱備,只差擼程式碼了!
原始碼:
執行截圖:#include<stdio.h> #include<string.h> /* *功能:判斷是否是閏年 *@year : 年號 *返回值: 是閏年返回1 ,不是返回0 */ int JudgeLeapYear(int year) { return (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)); } /* *功能:計算1970年1月1日到指定年月日總共多少天 *引數說明: *@year, @month, @day 指定年月日 *返回值: 總共天數 */ int GetAllDays(int year, int month, int day) { int i, j; int AllDays = 0; for (i = 1970;i < year;i++) //1970.1.1 是 星期四 { if (JudgeLeapYear(i)) //閏年366天,平年365天 { AllDays += 366; } else { AllDays += 365; } } //計算最後一年的非整年的天數 for (j = 1;j < month;j++) { switch (j) { case 2: { AllDays += (28 + JudgeLeapYear(year)); break; } case 1: case 3: case 5: case 7: case 8: case 10: case 12: { AllDays += 31; break; } default: { AllDays += 30; break; } } } AllDays += day; return AllDays; } /* *功能: 根據總天數來計算當前日期為星期幾,並輸出 *引數說明: *@AllDays: 1970年1月1日到指定日期經過的總天數 *返回值: 無 */ void JudgeWeek(int AllDays) { switch (AllDays % 7) { case 1:printf("星期四");break; case 2:printf("星期五");break; case 3:printf("星期六");break; case 4:printf("星期日");break; case 5:printf("星期一");break; case 6:printf("星期二");break; case 7:printf("星期三");break; } printf("\n"); } int main(void) { int year, month, day; int AllDays = 0; int i; do { printf("請輸入日期: xxxx.xx.xx\n"); scanf("%d.%d.%d", &year, &month, &day); if (month <= 0 || month > 12 || day > 31 || year < 1970) { printf("輸入錯誤,請重新輸入\n"); continue; } AllDays = GetAllDays(year, month, day); JudgeWeek(AllDays); break; } while (1); }