C-C++语言趣味程序设计编程百例精解(2).txt 再过几十年,我们来相会,送到火葬场,全部烧成灰,你一堆,我一堆,谁也不认识谁,全部送到农村做化肥。11.打鱼还是晒网 中国有句俗语叫“三天打鱼两天晒网”。某人从1990 年1 月1 日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。 *问题分析与算法设计 根据题意可以将解题过程分为三步: 1)计算从1990 年 1 月 1 日开始至指定日期共有多少天; 2)由于“打鱼”和“晒网”的周期为5 天,所以将计算出的天数用5 去除; 3)根据余数判断他是在“打鱼”还是在“晒网”; 若 余数为1, 2, 3,则他是在“打鱼” 否则 是在“晒网” 在这三步中,关键是第一步。求从1990 年 1 月 1 日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29 天,平年为28 天。闰年的方法可以用伪语句描述如下: 如果 ((年能被4 除尽 且 不能被100 除尽)或 能被400 除尽) 则 该年是闰年; 否则 不是闰年。 C 语言中判断能否整除可以使用求余运算(即求模) *程序说明与注释 #include int days(struct date day); struct date{ int year; int month; int day; }; int main() { struct date today,term; int yearday,year,day; printf("Enter year/month/day:"); scanf("%d%d%d",&today.year,&today.month,&today.day); /*输入日期*/ term.month=12; /*设置变量的初始值:月*/ term.day=31; /*设置变量的初始值:日*/ for(yearday=0,year=1990;year0&&day<4) printf("he was fishing at that day.\n"); /*打印结果*/ else printf("He was sleeping at that day.\n"); } int days(struct date day) { static int day_tab[2][13]= {{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/ {0,31,29,31,30,31,30,31,31,30,31,30,31,}, }; int i,lp; lp=day.year%4==0&&day.year%100!=0||day.year%400==0; /*判定year 为闰年还是平年,lp=0 为平年,非0 为闰年*/ for(i=1;i