问题 打鱼还是晒网

编程思路:三天打鱼 两天晒网
实现的思路主要是要求出输入的指定的时间和距离1990 01 01这个时间的天数
我们知道年份有闰年和平年之分 闰年2月份是29天 平年2月份28天
因此 定义一个函数runyear()用来判断程序是否是闰年,这个程序模块化的思想我们一定要有
这样能从本质上将代码功能之间的耦合降低 实现低耦合 
我们知道闰年,接着去定义一个函数 专门去计算总共的天数,
countDay();实现对天数的计算。用一个数组实现对月份的计算,数组下标0 可以不用 直接用 1-12来存储
每月的天数,因为2月的天数是不固定的,我们定义为28天,然后去判断是否是闰年,如果是就加1操作
循环每年的天数,但是 从键盘上的输入的这个年的的月份 也是应该加上,接着去判断这个年份。
加上对应的月份 该月的天数,就实现对总天数的计算
程序的最后 就是对%5求余数。1-3是打鱼 4-5 晒网

 

#include<stdio.h>
/*
程序:三天打鱼 两天晒网
实现的思路主要是要求出输入的指定的时间和距离1990 01 01这个时间的天数
我们知道年份有闰年和平年之分 闰年2月份是29天 平年2月份28天
因此 定义一个函数runyear()用来判断程序是否是闰年,这个程序模块化的思想我们一定要有
这样能从本质上将代码功能之间的耦合降低 实现低耦合 
我们知道闰年,接着去定义一个函数 专门去计算总共的天数,
countDay();实现对天数的计算。用一个数组实现对月份的计算,数组下标0 可以不用 直接用 1-12来存储
每月的天数,因为2月的天数是不固定的,我们定义为28天,然后去判断是否是闰年,如果是就加1操作
循环每年的天数,但是 从键盘上的输入的这个年的的月份 也是应该加上,接着去判断这个年份。
加上对应的月份 该月的天数,就实现对总天数的计算
程序的最后 就是对%5求余数。1-3是打鱼 4-5 晒网
**/
//定义一个结构体类型 年 月 日
typedef struct date{

	int year;
	int month;
	int day;

}DATE;

int countDay(DATE );
int runyear(int );

void main(){

	DATE today;
	int totalDay;
	int result;

	printf("请输入指定日期 年月日 1991 01 02\n");
	scanf("%d%d%d",&today.year,&today.month,&today.day);

   totalDay= countDay(today);
   result = totalDay%5;
   if(result>0&&result<4)
	   printf("今天打鱼");
   else
	   printf("今天晒网");

}

//判断这个年份是不是闰年
int runyear(int year){
	if((year%4==0&&year/100!=0)||(year/400==0))
		return 1;
	else
		return 0;
}

//计算这个年份总天数
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= totalDay+366;
		else
			totalDay = totalDay+365;
	}

	if(runyear(currentDay.year))
		perMonth[2]+=1;

	for(i=0;i<currentDay.month;i++){
		totalDay+=perMonth[i];
	}
	
	totalDay+=currentDay.day;
	
	return totalDay;
}