三天打渔两天晒网程序代码

/*File name:1          //文件名
 Auther:陈款    Version: windows7       Date:2017.3.8 // 作者、版本及完成日期
*/
#include<stdio.h>
#include<stdlib.h>
int X,Y;//全局变量
struct date{
    int year;
    int month;
    int day;
};
//判断是否是闰年
int judge(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 m,LP;
LP=day.year%4==0&&day.year%100!=0||day.year%400==0;
      /*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
m=day_tab[LP][day.month];
return m;
}
//判断起始日期是否有效
struct date BeginDay()
{
struct date term;
int R;
for(;;)
{


        scanf("%d",&Y); //输入日期
if(Y>=10101&&Y<=99991231) 
{
   term.year=Y/10000;/*将输入数改成设备能识别的日期*/
term.month=Y/100%100;
term.day=Y%100;
if(term.month<=12) 
{
R=judge(term);/*判断日数是否有效*/
if(term.day<=R)
break;
else
  { printf("您输入的日数有误,请重新输入日期:");
continue;
}
}
else
{ printf("您输入的月数有误,请重新输入日期:");
continue;
   }
}
else
      { printf("您输入的年数有误,请重新输入日期:");
continue;
}
}
    return(term);
}
//判断终止日期是否有效
struct date EndDay()
{
struct date today;
int R;
for(;;)
{


        scanf("%d",&X); //输入日期
if(X>=Y&&X<=99991231) 
{
   today.year=X/10000;/*将输入数改成设备能识别的日期*/
       today.month =X/100%100;
   today.day=X%100;
if(today.month<=12)
{
R=judge(today);
if(today.day<=R)/*判断日数是否有效*/
break;
else
  { printf("您输入的日数有误,请重新输入日期:");
continue;
}
}
else
{ printf("您输入的月数有误,请重新输入日期:");
continue;
   }
}
else
      { printf("您输入的年数有误,请重新输入日期:");
continue;
}
}
return(today);
}






int days1(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为闰年*/
     day.day =day_tab[lp][day.month]-day.day ;   
for(i=day.month+1;i<13;i++)            /*计算起始年的天数*/
        day.day+=day_tab[lp][i];
    return day.day;
}


int days2(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<day.month;i++)            /*计算起始年起的后一年的总天数*/
        day.day+=day_tab[lp][i];
    return day.day;
}
int days3(struct date dayterm,struct date daytoday)
{
    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=dayterm.year%4==0&&dayterm.year%100!=0||dayterm.year%400==0;
      /*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
     
if(dayterm.month ==daytoday.month)
{
dayterm.day =daytoday.day -dayterm.day ;
}
else
{  dayterm.day =day_tab[lp][dayterm.month]-dayterm.day ; 
for(i=dayterm.month+1;i<daytoday.month ;i++)            /*计算起始年的天数*/
             dayterm.day+=day_tab[lp][i];
   dayterm.day +=daytoday.day;
}
    return dayterm.day;
}




int main(void)
{
FILE  *fp;
fp=fopen("1508010310.txt","wt+");
if(fp==NULL)
{ printf("can't open this file!\n");
exit(0);
}
fputs("起始日期为:",fp);//向文件中写入
    struct date today,term;
    int yearday,year,day,i;
printf("请输入日期:示例20100101\n");
printf("请输入起始日期:");
term=BeginDay();
fprintf(fp,"%d",Y);
while(i)/*实现多次输入*/
{
printf("请输入计算日期:");
  today=EndDay();
    fputs("\n计算日期为:",fp);//向文件中写入
fprintf(fp,"%d",X);
if(term.year ==today.year )
{
yearday=days3(term,today);
}
else
{
yearday=days1(term);/*计算起始年的天数*/
term.month =12;/*整年天数,方便计算*/
term.day =31;
for(year=term.year+1;year<today.year;year++)
{
term.year=year;
yearday+=days2(term);     /*计算从起始年后一年至指定年的前一年共有多少天*/
}
yearday+=days2(today); /*加上指定年中到指定日期的天数*/
}
    day=yearday%5+1;               /*求余数*/
    if(day>0&&day<4) 
{ printf("今天打渔!\n");   /*打印结果*/
fputs("         打渔\n",fp);
}
    else
{ printf("今天晒网!\n");
   fputs("         晒网\n",fp);
}
printf("距起始日期的天数:");
printf("%d\n",yearday);
printf("输入1继续计算,输入0退出:");
scanf("%d",&i);
}
fclose(fp);
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值