C語言題目_1:三天打魚兩天晒網
阿新 • • 發佈:2020-12-29
技術標籤: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();
}