打鱼还是晒网
一、问题描述:
中国有句俗话叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天种是“打鱼”还是“晒网”。
二、设计思路:
1、输入当前日期today。
2、求出指定日期距离1990年1月1日的天数totalday。
3、将天数与5进行求余计算。
4、如果余数为1、2、3则输出今天大鱼;如果余数为4或5则输出今天晒网。
三、程序流程图:
四、代码实现:
#include<stdio.h> typedef struct date{ int year; int month; int day; }DATE; int countDay(DATE);/*函数声明*/ int runYear(int);/*函数声明*/ void main() { DATE today;/*指定日期*/ int totalDay;/*指定日期距离1990年1月1日的天数*/ int result;/*todalDay对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,30,31,30,31,30,31,30,31,30};/*每月天数数组*/ int totalDay=0,year,i; /*求出指定日期前的每一天的天数累加和*/ for(year=1990;year<currentDay.year;year++) { if(runYear(year)) totalDay=totalDay+366; else totalDay=totalDay+365; } /*如果为闰年,则2月份为29天*/ if(runYear(currentDay.year)) perMonth[2]+=1; /*将本年内的天数累加到totalDay中*/ for(i=0;i<currentDay.month;i++) totalDay+=perMonth[i]; /*将本月内的天数累加到totalDay中*/ totalDay+=currentDay.day; /*返回totalDay*/ return totalDay; }