概述
题 目:某人从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的年份rn");
goto flag_year;
}
flag_month:
printf("请输入现在月份:");
scanf("%d", &month);
if (month > 12 || month < 1)
{
printf("输入有误,月份范围在1~12rn");
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~31rn");
goto flag_date;
}
}
else if (month == 2)
{
if (!is_leap_year_or_not(year)) //如果是闰年
{
if (date > 30 || date < 1)
{
printf("输入有误,请重新输入,范围在1~29rn");
goto flag_date;
}
}
else //如果不是闰年
{
if (date > 29 || date < 1)
{
printf("输入有误,请重新输入,范围在1~28rn");
goto flag_date;
}
}
}
else if (month == 4 || month == 6 || month == 9 || month == 11)
{
if (date > 30 || date < 1)
{
printf("输入有误,请重新输入,范围在1~30rn");
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=%drn", all_days);
// printf("from_1990_to_year_days= %drn", from_1990_to_year_days);
// printf("sum_month = %drn", sum_month);
}
void judge_fishing_or_not(void)
{
if (all_days % 5 == 0 || all_days % 5 == 4)
{
printf("他今天在晒网rn");
}
else
{
printf("他今天在打鱼rn");
}
}
int main(void)
{
get_year_month_date();
count_days_form_1990_to_today();
judge_fishing_or_not();
}
最后
以上就是着急奇迹为你收集整理的C语言题目_1:三天打鱼两天晒网的全部内容,希望文章能够帮你解决C语言题目_1:三天打鱼两天晒网所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复