C语言 打渔晒网

来源:互联网 发布:编程实现arp协议c语言 编辑:程序博客网 时间:2024/05/18 15:07

题目:中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”?


#include<stdio.h>
#include<string.h>
#include<math.h>

const int year=1990;
const int num[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 GetDate()
{
 int number=0;
 char a[20];
 scanf("%s",a);
 for(int i=0;i<strlen(a);i++)
 {
  if(a[i]<'1'||a[i]>'9')
  {
   printf("/n不能包含非数字字符!请重新输入:");
   break;
  }
  else
  {
   number=(a[i]-'0')*(int)pow(10,(strlen(a)-1-i))+number;
  }
 }

 return number;
}

///计算是否闰年
int CalculateYear(int y)
{
 if((y%4==0&&y%100!=0)||y%400==0)
  return 1;
 else
  return 0;
}

///获取月份的间隔天数
int GetM_Days(int y,int m,int d)
{
 int M_days=0;
 for(int i=1;i<m;i++)
  M_days=M_days+num[CalculateYear(y)][i];
 M_days=M_days+d;
 return M_days;
}

///计算年份的间隔天数
int GetY_Days(int y)
{
 int Y_days=0;
 for(int i=year;i<y;i++)
 {
  if(CalculateYear(i))
   Y_days=Y_days+366;
  else
   Y_days=Y_days+365;
 }
 return Y_days;
}

///获取全部的间隔天数
int GetDays(int y,int m,int d)
{
 int days=0;
 if(y==year)
  return GetM_Days(y,m,d);
 else
  return (GetY_Days(y)+GetM_Days(y,m,d));
}

void main()
{
 int y=0,m=0,d=0,f=1;
 //f作为是否正确输入日期的判断标志
 while(f)
 {
  printf("请输入1990年1月1日之后的一个日期(只能使用数字,回车键作为年月日数字之间的间隔):/n");
  printf("请输入年份:");
  y=GetDate();
  printf("请输入月份:");
  m=GetDate();
  printf("请输入日期:");
  d=GetDate();

  if(y<year||m<1||d<1)
  {
   printf("输入日期错误!(日期不能早于1990年1月1日,月份与日期不能小于1)/n/n");
   continue;
  }
  else if(m>12||d>num[CalculateYear(y)][m])
   printf("输入日期错误!(月份不能大于12,日期不能超出当月最大日期)/n/n");
  else
  {
   f=0;
  }
 }
 
 printf("***************/n");
 printf("今天是第%d天。/n",GetDays(y,m,d));
 switch(GetDays(y,m,d)%5)
 {
  case 0:
   printf("今天晒网。/n");
   break;
  case 1: //与3同
  case 2: //与3同
  case 3:
   printf("今天打渔。/n");
   break;
  case 4:
   printf("今天晒网。/n");
   break;
 }
 printf("***************/n");
}

原创粉丝点击