1. 程式人生 > 其它 >C語言題目_1:三天打魚兩天晒網

C語言題目_1:三天打魚兩天晒網

技術標籤:C語言題目做答記錄

題 目:某人從1990年1月1號開始三天打魚,兩天晒網,問今天他在打魚還是晒網?
提示:閏年:能被4整除且不能被100整除 或者 能被400整除的年份

all_days = from_1990_to_year_days + sum_month + date - 31;	//得到總天數。31是1900.0.0-1990.1.1的起始。

上面這個計算不合理,屬於投機取巧了:因為如果不是從1.1號開始計算,而是從1.11這種時間開始計算,這個計算方式就不對了。先暫時記錄著,以後看再回來修改。

int year, month, date, all_days; 

int is_leap_year_or_not
(int year) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { return 0; } } void get_year_month_date(void) { flag_year: printf("請輸入現在年份:"); scanf("%d", &year); if (year < 1990) { printf("輸入有誤,請輸入大於1990的年份\r\n"); goto flag_year; } flag_month:
printf("請輸入現在月份:"); scanf("%d", &month); if (month > 12 || month < 1) { printf("輸入有誤,月份範圍在1~12\r\n"); goto flag_month; } flag_date: printf("請輸入現在日期:"); scanf("%d", &date); if (month == 1 || month == 3 || month == 5 || month ==
7 || month == 8 || month == 10 || month == 12) { if (date > 31 || date < 1) { printf("輸入有誤,請重新輸入,範圍在1~31\r\n"); goto flag_date; } } else if (month == 2) { if (!is_leap_year_or_not(year)) //如果是閏年 { if (date > 30 || date < 1) { printf("輸入有誤,請重新輸入,範圍在1~29\r\n"); goto flag_date; } } else //如果不是閏年 { if (date > 29 || date < 1) { printf("輸入有誤,請重新輸入,範圍在1~28\r\n"); goto flag_date; } } } else if (month == 4 || month == 6 || month == 9 || month == 11) { if (date > 30 || date < 1) { printf("輸入有誤,請重新輸入,範圍在1~30\r\n"); goto flag_date; } } } void count_days_form_1990_to_today(void) { int i, cnt = 0, sum_month = 0, from_1990_to_year_days; for (i=1990; i<=year; i++) //遍歷這些年份之間所有閏年出現的次數 { if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) { cnt++; } } from_1990_to_year_days = (year - 1990) * 365 + cnt; //計算出從1990到現在的所有年份的天數 switch (month) //計算出從1.1號到現在月份的天數 { case 12: sum_month = sum_month + 31; case 11: sum_month = sum_month + 30; case 10: sum_month = sum_month + 31; case 9 : sum_month = sum_month + 30; case 8 : sum_month = sum_month + 31; case 7 : sum_month = sum_month + 31; case 6 : sum_month = sum_month + 30; case 5 : sum_month = sum_month + 31; case 4 : sum_month = sum_month + 30; case 3 : sum_month = sum_month + 31; case 2 : if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) //判斷今年是否是閏年 { sum_month = sum_month + 29; } else { sum_month = sum_month + 28; } case 1 : sum_month = sum_month + 31; } all_days = from_1990_to_year_days + sum_month + date - 31; //得到總天數。31是1900.0.0-1990.1.1的起始。 // printf("all_days=%d\r\n", all_days); // printf("from_1990_to_year_days= %d\r\n", from_1990_to_year_days); // printf("sum_month = %d\r\n", sum_month); } void judge_fishing_or_not(void) { if (all_days % 5 == 0 || all_days % 5 == 4) { printf("他今天在晒網\r\n"); } else { printf("他今天在打魚\r\n"); } } int main(void) { get_year_month_date(); count_days_form_1990_to_today(); judge_fishing_or_not(); }