打鱼还是晒网

/*
题目:打鱼还是晒网
内容:中国有句俗语“三天打鱼两天晒网”。某人从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; 
 } 
  
  
  
  
  

猜你喜欢

转载自blog.csdn.net/janmesyang/article/details/83187439
今日推荐