"三天打鱼两天晒网"从文件读入数据输出到文件结果的C程序

本文介绍了一个使用C语言编写的程序,该程序能够计算从2010年1月1日起某人在任意指定日期是处于‘三天打鱼两天晒网’的哪个阶段——打鱼还是晒网。通过计算距离起始日期的天数并判断余数,程序准确地告诉用户该日期对应的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目: 中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。

二、使用语言:C语言

  • 算法思路:
  1. 语言描述:

1)计算从2010年1月1日开始至指定日期共有多少天;

2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;

3)根据余数判断他是在“打鱼”还是在“晒网”;

    若  余数为1,2,3,则他是在“打鱼”

    否则  是在“晒网”

2、流程图:

 源代码:

 /**
   *file_name:三天打鱼两天晒网 
   *author:商嘉鑫
   *creation date:2019/2/26
   *modification date: 2019/3/2
   *OS:Windows
   *IDE:Dev-C++
  
   *brief:某人从2010年1月1日起开始“三天打鱼两天晒网”,
          问这个人在以后的某一天中是“打鱼”还是“晒网”。 
   *version:1.0
 **/

#include<stdio.h>/*预处理命令*/
#include<stdlib.h>/*预处理命令*/ 
#define N 10000/*宏定义*/
 
int main()
{	
	FILE* fp1;/*申请一个文件指针*/
	FILE* fp2;/*申请一个文件指针*/
	
	/*fopen函数,返回就是上面定义的文件指针了,
	文件以a模式进行文件添加*/
	fp2 = fopen("G://out.txt","a");
	fp1 = fopen("G://in.txt","r");
	 if(fp1 == NULL||fp2==NULL)
        {
            printf("ERROR!\n");
        }
        
	char a,b;/*分隔符*/ 
	int year,month,day,sum,leap,i,j;/*年,月,日,距2010-1-1多少天*/
	{
	
	for(j=0;j<N;j++)
	{
 
		fscanf(fp1,"%d%c%d%c%d%*[^0-9.]",&year,&a,&month,&b,&day); 
	}
	if(year<2010) /*判断所输入日期在2010-1-1之前还是之后*/ 
	{
		fprintf(fp2,"他现在还没有开始打鱼晒网,请重新输入!\n\n");
		exit(1);	
	}

	sum=0;
	{
	
	switch(month)  
	{
		case 1:sum=0;
		if(day>31) 
		{
		fprintf(fp2,"日期错误,请确定1月有这一天吗?\n\n");
		exit(1);
		}
		break;
		case 2:sum=31;
		if(day>28) 
		{
		fprintf(fp2,"日期错误,请确定2月有这一天吗?\n\n");
		exit(1);
		}
		break;
		case 3:sum=59;
		if(day>31) 
		{
		fprintf(fp2,"日期错误,请确定三月有这一天吗?\n\n");
		exit(1);
		}
		break;/*平年*/ 
		case 4:sum=90;
		if(day>30) 
		{
		fprintf(fp2,"日期错误,请确定4月有这一天吗?\n\n");
		exit(1);
		}
		break;
		case 5:sum=120;
		if(day>31) 
		{
		fprintf(fp2,"日期错误,请确定5月有这一天吗?\n\n");
		exit(1);
		}
		break;
		case 6:sum=151;
		if(day>30) 
		{
		fprintf(fp2,"日期错误,请确定6月有这一天吗?\n\n");
		exit(1);
		}
		break;
		case 7:sum=181;
		if(day>31) 
		{
		fprintf(fp2,"日期错误,请确定7月有这一天吗?\n\n");
		exit(1);
		}
		break;
		case 8:sum=212;
		if(day>31) 
		{
		fprintf(fp2,"日期错误,请确定8月有这一天吗?\n\n");
		exit(1);
		}
		break;
		case 9:sum=243;
		if(day>30) 
		{
		fprintf(fp2,"日期错误,请确定9月有这一天吗?\n\n");
		exit(1);
		}
		break;
		case 10:sum=273;
		if(day>31) 
		{
		fprintf(fp2,"日期错误,请确定10月有这一天吗?\n\n");
		exit(1);
		}
		break;
		case 11:sum=304;
		if(day>30) 
		{
		fprintf(fp2,"日期错误,请确定11月有这一天吗?\n\n");
		exit(1);
		}
		break;
		case 12:sum=334;
		if(day>31) 
		{
		fprintf(fp2,"日期错误,请确定12月有这一天吗?\n\n");
		exit(1);
		}
		break;
		default:fprintf(fp2,"日期错误,请确定一年有这个月份吗?\n\n");
		exit(1);
		 
	}
}
	
	sum=sum+day;
	if(year%400==0||year%100!=0&&year%4==0) /*判断是否为闰年*/ 
	leap=1;
	else
	leap=0;
	if(leap==1&&month>2&&month<13)
	sum=sum++;
	
	i=year-2012;
	if(i>0) /*i>0说明已经超过2012年*/
	 
	/*以每年为365天,闰年每四年一次,
	再加上2010和2011两个过去的年的总天数*/
	sum+=365*i+(i-1)/4+1+365*2;  
	
	/*单算2010年和2011年*/ 
	else if(year==2010)
	sum=sum;
	else if(year==2011)
	sum+=365;
	else if(year==2012)
    sum=sum+730; 
    
	/*输出结果到out.txt*/ 
	fprintf(fp2,"现在距2010-1-1已经%d天了\n",sum);
	if(sum%5==3||sum%5==2||sum%5==1)
	fprintf(fp2,"%d-%d-%d他在打鱼++++++++>\n\n",year,month,day);
	else
	fprintf(fp2,"%d-%d-%d他在晒网-------->\n\n",year,month,day);
	
}
	fclose(fp1);
	fclose(fp2);
	return 0; 
}

 

三、调试与测试:

  1. 调试:略。

 

2、测试截屏:

(1)合法日期2012-2-2

在文件in.txt中输入2012-2-2运行程序,控制台不输出,结果被输出到out.txt

  1. 不合法日期
  • 2010年之前的日期:2009-2-2

在文件in.txt中输入2009-2-2运行程序,控制台不输出,提示语句被输出到out.txt

 

  • 2010年之后的日期:
  1. 某个月天数不合法:2019-1-32

在文件in.txt中输入2019-1-32运行程序,控制台不输出,提示语句被输出到out.txt

  1. 月份不合法:2012-13-1

在文件in.txt中输入2012-13-1运行程序,控制台不输出,提示语句被输出到out.txt

撒花撒花~~~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值