使用C语言解决:某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
2019-03-02 08:52
253 查看
1. 程序说明
此程序使用C语言编写,运行此程序时,需要在工程文件夹下建立in.txt文件,并存储8位数表示日期。
2. 算法设计
根据题意可以将解题过程分为三步:
(1)计算从2010年1月1日开始至指定日期共有多少天;
(2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
(3)根据余数判断他是在“打鱼”还是在“晒网”;若余数为1,2,3,则他是在“打鱼”,否则是在“晒网”
3. 流程图
4. 程序代码
#include<stdio.h> int sum_days(); //计算给定日期与20100101相差天数 int mon_days(); //计算平年给定月份是当年的第多少天 bool judge_data(); //判断所读取的数据是否合理 void judge(); //判断某日期打鱼还是晒网 void duwendang(); //从in.txt里读取八位字符并转化为整型赋值给year,month,day int year,month,day; //声明全局变量 void main() { duwendang(); if(judge_data()) printf("数据不合理\n"); else judge(); } int sum_days() //计算给定日期与20100101相差天数 { int days; //days为相差的总天数 if(year-2010==0) //判断是否是2010年 if(month<3) //2010年1月和2月与20100101相差天数的计算方法 days=day+mon_days(); else days=mon_days()+day+1; //2010年其他月份相差天数的计算方法 else days=(year-2010)*365+mon_days()+day+(year-2010)/4; //其他年份总天数计算方法 return days; } int mon_days() ////计算平年给定月份前的月份有多少天 { int mondays; switch(month) { case 1:mondays=0;break; case 2:mondays=31;break; case 3:mondays=59;break; case 4:mondays=90;break; case 5:mondays=120;break; case 6:mondays=151;break; case 7:mondays=181;break; case 8:mondays=212;break; case 9:mondays=243;break; case 10:mondays=273;break; case 11:mondays=304;break; case 12:mondays=334;break; } return mondays; //返回天数为整型数据 } bool judge_data() //判断所读取的数据是否合理 { if(year<2010 || year>2019 || month<1 ||month>12 ||day<1 || day>31) { { { if((year-2010)%4==0 && month==2 && day>29) return true; if(month==4 || month==6 || month==9 || month==11) if(day>30) return true; } return true; } return true; } else return false; } void judge() //判断某日期打鱼还是晒网 { FILE *fp; if(sum_days()%5<4 && sum_days()%5>0) //判断相差天数除5的余数,若为1,2,3则打鱼,否则晒网 { fp=fopen("out.txt","wt+"); char st[20]="该天打鱼"; fputs(st,fp); fclose(fp); } else { fp=fopen("out.txt","wt+"); char st[20]="该天晒网"; fputs(st,fp); fclose(fp); } printf("已生成文件out.txt\n"); } void duwendang() //从in.txt里读取八位字符并转化为整型赋值给year,month,day { int i=0; FILE *fp; char ch,c[8]; fp=fopen("in.txt","rt"); while(ch!=EOF) //读取文件中的字符 { c[i]=fgetc(fp); i++; } year=(c[0]-48)*1000+(c[1]-48)*100+(c[2]-48)*10+(c[3]-48); month=(c[4]-48)*10+(c[5]-48); day=(c[6]-48)*10+(c[7]-48); //将文档里的字符型数字转化为整型数据 } /* 系统版本:Windows 7 旗舰版 版本6.1(内部版本 7601: Service Pack 1) 编写软件版本:Visual C++ 6.0 */
相关文章推荐
- 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。使用javaGUI实现代码如下:
- 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用java实现程序解决问题。
- 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。
- 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。
- 中国有句俗语叫“三天打鱼两天晒网”。 某人从1990年1月1日起开始“三天打鱼两天晒网”, 问这个人在以后的某一天中是“打鱼”还是“晒网”?
- 中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”。问这个人在以后的某一天中是“打鱼”还是“晒网”。
- 题目: * 中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
- 功能:中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”, 编写程序判断这个人在以后的某天中是“打鱼”还是“晒网”。要求结果用“fishing”或“sleepin
- 中国有句俗语叫“三天打鱼两天晒网”,《某人从1990年1月1日起开始“三天打鱼两天晒网”,即工作三天,然后再休息两天。问这个人在以后的某一天中是在工作还是在休息》博主_luojingcong_改进版.
- 某人从2010年1月1日开始“三天打鱼,两天晒网”问这个人在以后的某天是“打鱼“”还是“晒网”
- 三天打鱼 两天晒网 某人从2010年1月1日开始,计算以后的某一天此人是在打鱼还是晒网
- “三天打渔,两天晒网”,从2010年1月1日开始,计算后来的任意一天是打鱼还是晒网
- 【三天打鱼两天晒网】JAVA实现计算从2000年1月1日开始任意一天农夫是在打鱼还是
- VS2003和VS2005的Web项目访问局域网中的MS SQL Server2000数据库都报这个错误,安装上SP4以后还是不能解决?(已解决)
- C语言使用回调函数解决内存申请和释放的问题
- 使用纯C语言开始win32 sdk编程
- 解决使用FusionCharts以后从后台获取数据中文乱码的问题
- C语言学习笔记--------伊能C语言学习笔记----使用指针来解决函数的副本机制
- 使用栈解决表达式求值(C语言)及问题总结
- vi使用说明(总用,总忘,还是抄在这里,以后好找)