中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言实现程序解决问题。
//**三天打鱼,两天晒网程序**
//作者:软件工程1502班 汪强
//创建时间:2017年3月10日
//主要功能:求出渔夫在2010.1.1后的每一天在打鱼还是晒网
//
//***************************
#include<stdio.h>
#include<stdlib.h>
void file1(int year,int month,int day)//向文件中写入数据
{
FILE *in;
if((in=fopen("file1.dat","w"))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
fprintf(in,"%d %d %d\n",year,month,day);
fclose(in);
}
void file2(int year,int month,int day)//从文件中读入数据
{
FILE *in;
if((in=fopen("file1.dat","r"))==NULL)
{
printf("无法打开此文件!");
exit(0);
}
fscanf(in,"%d %d %d",&year,&month,&day);
fclose(in);
}
int months(int year,int month)//months函数用来求当前年1月1日到当前年指定月份的总天数
{
int i;
static int days;
int month1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},month2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};//定义两个存各个月份天数的数组
if((year%4==0&&year%100!=0)||(year%400==0))//判断当前年是闰年还是平年
{
for(i=0;i<month;i++)
days+=month2[i];
}
else
{
for(i=0;i<month;i++)
days+=month1[i];
}
return days;
}
int sumday(int year,int month,int day)//求出到当前年的总天数
{
int i,days;
for(i=2010;i<year;i++)
{
if((i%4==0&&i%100!=0)||(i%400==0))
days+=366;
else days+=365;
}
days=days+months(year,month)+day-1;
return days;
}
void juge()//用来判断输入错误及判断渔夫在打鱼还是晒网
{int year,month,day;
int days;
int i,j;
int month1[12]={31,28,31,30,31,30,31,31,30,31,30,31},month2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
printf("Please enter year month and day:");
scanf("%d %d %d",&year,&month,&day);
file1(year,month,day);//文件函数的调用
file2(year,month,day);///文件函数的调用
FILE *out;
if((out=fopen("file2.dat","w"))==NULL)
{
printf("无法打开此文件\n");
exit(0);
}
if((year%4==0&&year%100!=0)||(year%400==0))
{
if((year<2010)&&(month<1||month>12))
{fprintf(out,"%d年%d月%d日 Year and month are error.\n",year,month,day);
printf("%d年%d月%d日 Year and month are error.\n",year,month,day); }
else
{
if((year<2010)&&(day>month2[month-1]))
{
fprintf(out,"%d年%d月%d日 Year and day are error.\n",year,month,day);
printf("%d年%d月%d日 Year and day are error.\n",year,month,day);}
else
{
if(year<2010)
{
fprintf(out,"%d年%d月%d日 Year is error.\n",year,month,day);
printf("%d年%d月%d日 Year is error.\n",year,month,day);}
else
{
if(month<1||month>12)
{
fprintf(out,"%d年%d月%d日 Month is error.\n",year,month,day);
printf("%d年%d月%d日 Month is error.\n",year,month,day);}
else
{
if(day>month2[month-1])
{
fprintf(out,"%d年%d月%d日 Day is error.\n",year,month,day);
printf("%d年%d月%d日 Day is error.\n",year,month,day);}
else {days=sumday(year,month,day);//调用函数sumday()
if(days%5==0||days%5==1||days%5==2)
{ fprintf(out,"%d年%d月%d日渔夫在打鱼。\n",year,month,day);//输出到文件上
printf("%d年%d月%d日渔夫在打鱼。\n",year,month,day);}
else {
fprintf(out,"%d年%d月%d日渔夫在晒网。\n",year,month,day);//输出到文件上
printf("%d年%d月%d日渔夫在晒网。\n",year,month,day);}
}
}
}
}
}
}
else
{
if((year<2010)&&(month<1||month>12))
{
fprintf(out,"%d年%d月%d日 Year and month are error.\n",year,month,day);
printf("%d年%d月%d日 Year and month are error.\n",year,month,day);}
else
{
if((year<2010)&&(day>month1[month-1]))
{
fprintf(out,"%d年%d月%d日 Year and day are error.\n",year,month,day);
printf("%d年%d月%d日 Year and day are error.\n",year,month,day);}
else
{
if(year<2010)
{
fprintf(out,"%d年%d月%d日 Year is error.\n",year,month,day);
printf("%d年%d月%d日 Year is error.\n",year,month,day);}
else
{
if(month<1||month>12)
{ fprintf(out,"%d年%d月%d日 Month is error.\n",year,month,day);
printf("%d年%d月%d日 Month is error.\n",year,month,day);}
else
{
if(day>month1[month-1])
{ fprintf(out,"%d年%d月%d日 Day is error.\n",year,month,day);
printf("%d年%d月%d日 Day is error.\n",year,month,day);}
else {days=sumday(year,month,day);
if(days%5==0||days%5==1||days%5==2)
{ fprintf(out,"%d年%d月%d日渔夫在打鱼。\n",year,month,day);
printf("%d年%d月%d日渔夫在打鱼。\n",year,month,day);}
else {
fprintf(out,"%d年%d月%d日渔夫在晒网。\n",year,month,day);
printf("%d年%d月%d日渔夫在晒网。\n",year,month,day);}
}
}
}
}
}
}
fclose(out);
}
int main()//主函数
{
printf("\t\t\t\t\t题目:三天打鱼,两天晒网\n");
juge();
return 0;
}
三天打鱼,两天晒网
最新推荐文章于 2023-10-20 22:26:42 发布