/*
题目:打鱼还是晒网
内容:中国有句俗语“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,
问这个人在以后的某一天中是打鱼还是晒网?
分析:1、计算从1990年1月1日开始至指定日期共有多少天。(瑞年:能被4整除且不能被100整除或者能被400整除)
2、由于打鱼和晒网的周期为5天,所以将计算出的天数除以5。
3、根据余数判断他是在打鱼还是在晒网。 若余数为1、2、3,则在打鱼;否则就在晒网。
作答者:小白杨
收获:1、变量名称太过业余化,如num应该换成DayNum;
2、主函数太过繁杂,函数封装法完全没有用到;
*/
#include <stdio.h>
/*
int main()
{
int year,month,day;
int Year,Month,Day;
int num = 0;
int flag = 0; //判断是打鱼还是晒网
printf("请输入要查询哪一天的情况:\n");
scanf("%d%d%d",&Year,&Month,&Day);
for(year=1991;year<=Year;year++) //计算每一年有多少天
{
if((year%4==0 && year%100!=0)&&(year%400==0))
num += 366;
else
num += 365;
}
for(month=2;month<=Month;month++)
{
if(month==3||month==5||month==7||month==8||month==10||month==12)
num += 31;
else if(month==4||month==6||month==9||month==11)
num += 30;
else
{
if((year%4==0 && year%100!=0)&&(year%400==0))
num += 29;
else
num += 28;
}
}
num = num+Day;
printf("\n%d\n",num);
flag = num%5;
if(flag == 1||flag == 2||flag == 3)
{
printf("该同志今天在打鱼\n");
}
else
printf("该同志今天在晒网呐!\n");
return 0;
}
*/
typedef struct data{
int year;
int month;
int day;
}DATE;
int countDay(DATE); //函数声明
int runYear(int); //函数声明
void main()
{
DATE today; //指定的日期
int totalDay; //指定日期距离1990年1月1日 的天数
int result; //totalDay对5取余的结果
/*输入指定日期,包括年,月,日*/
printf("please input 指定日期 包括年,月,日 如: 1990 1 31\n");
scanf("%d%d%d",&today.year,&today.month,&today.day);
/*求出指定日期距离1990年1月1日的天数*/
totalDay = countDay(today);
/*天数%5,判断输出打鱼还是晒网*/
result = totalDay%5;
if(result>0&&result<4)
printf("今天打鱼");
else
printf("今天晒网");
}
/*判断是否为闰年,是返回1,否返回0*/
int runYear(int year)
{
if((year%4==0&&year%100!=0)||(year%400==0))
return 1;
else
return 0;
}
/*计算指定日期距离1990年1月1日的天数*/
int countDay(DATE currentDay)
{
int perMonth[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //每月的天数
int totalDay = 0,year,i;
/*求出指定日期之前的每一年的天数累加和*/
for(year=1990;year<currentDay.year;year++)
{
if(runYear(year)) //判断是否为闰年
totalDay += 366;
else
totalDay += 365;
}
/*如果为闰年,则二月份为29天*/
if(runYear(currentDay.year))
perMonth[2]++;
/*将本年内的天数累加到totalDay中*/
for(i=0;i<currentDay.month;i++)
totalDay += perMonth[i];
/*将本月内的天数累加到totalDay中*/
totalDay += currentDay.day;
/*返回totalDay*/
return totalDay;
}