程式設計C 實驗二 題目三 計算生日是星期幾(0078)
阿新 • • 發佈:2018-12-09
Description
Sample Input
Sample Output
輸入一個日期,包括年、月、日。(一組測試資料)
Input輸出這個日期是星期幾。
Output1 2 3 | 1 1 1 2 1 1 2006 7 10 |
1 2 3 | Monday Tuesday Monday |
1、 已知公元1 年1 月1 日是星期一 2、 演算法提示:如果輸入的是2006 年3 月12 日,計算方法是 (1) 先計算從公元0001 年初(0001-1-1)到2005 年末(2005-12-31)共多少天,注意其中 有閏年,閏年是366 天,平年是365 天。閏年的判斷條件滿足(見教材例3.8 題): (( year%4==0 && year%100!=0 )||(year%400==0)) (2) 然後再計算2006 年1 月1 日到2006-3-12 是多少天。注意同樣判斷本年度是否閏年, 即二月份是28 天還是29 天。 (3) 上述兩部分相加即從公元0001 年初(0001-1-1)到2006 年末(2006-3-12)的天數, 用該天數模7(total%7)即得到星期數。
#include <stdio.h> int main() { int year = 0,month = 0,day = 0; int leap = 0,noleap = 0; int days_1 = 0,days_2 = 0; int w = 0,days = 0; scanf("%d %d %d",&year,&month,&day); int i; for (i = 1;i < year;i++) { //判斷是否閏年 if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) { leap ++; } else { noleap ++; } } days_1 = leap * 366 + noleap * 365; //判斷year年是否閏年 int j; for (j = 1;j < month;j++) { switch (j) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days_2 += 31;break; case 4: case 6: case 9: case 11:days_2 += 30;break; case 2: if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) days_2 += 29; else days_2 += 28; break; } } days = days_1 + days_2 + day; w = days % 7; switch (w) { case 0:printf("Sunday\n");break; case 1:printf("Monday\n");break; case 2:printf("Tuesday\n");break; case 3:printf("Wednesday\n");break; case 4:printf("Thursday\n");break; case 5:printf("Friday\n");break; case 6:printf("Saturday\n");break; } return 0; }