A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
需求:小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,
编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
思路:1,先算出任意一天据2006年,1月1日多少天。
    1,算出差距年的总天数、
    2.算出差距月的总天数
    3.算出差距年月日的总天数。
    2.利用%2与%3是否有余数判断结识的事美女还是帅哥。
*/
#include <stdio.h>
//所用到的三个函数的声明;
int getDays(int y, int m, int d);
void estimate(int days);
int isRun(int y);
int main()
{   //初始化年,月,日,用于接收输入键盘录入。
int year,month,day;
   do
   {
      printf("请输入2006.1.1之后的任意一天,年月日之间以.隔开\n");        
      scanf("%d.%d.%d", &year, &month, &day);
   } while (year<2006 || month<1 || month>12 ||day>31);
   //调用函数getDays获得这天离2006年1月1日相差的天数。
   int days=getDays(year, month, day);
   //调用函数判断遇到的是美女还是帅哥。
   estimate(days);
   return 0;
   
}
int getDays(int y,int m,int d)
{
//闰年每月的天数
int leapYearMonths[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
    //正常年每月的天书
int yearMonths[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
//初始化一个月份差距的天数和,默认值为0。
int sumOfMonth=0;
//初始化一个年差距的天数和,默认值为0.
int sumOfYear=0;
//从2006年开始遍历,算出年差距的总天数。
for(int x=2006;x<y;x++)
{
  if(isRun(x))
   sumOfYear+=366;
  else
   sumOfYear+=365;   
}
//从1月份算起,算出月差距的总天数。
for(int i=1;i<m;i++)
{
  if(isRun(y))
   sumOfMonth+=leapYearMonths[i];
  else
   sumOfMonth+=yearMonths[i];
}
//返回一个年月日差距的总天数。
return sumOfMonth+sumOfYear+d;
}
void estimate(int days)
{
//利用%的特性来判断是否遇见美女和帅哥。
if(days%2==0)
  printf("这天小明碰到的是帅哥\n");
if(days%3==0)
  printf("这天小明碰到的是美女\n");
if(days%2!=0 && days%3!=0)
  printf("这天小明既没有碰到美女,也没有碰到帅哥");  
}
//判断是否是闰年的函数。
int isRun(int y)
{
//闰年的计算是1,能被4整除,且不能被100整除,
  //     2。能被400整除。两者满足其一即可。
    if((y/4==0 && y/100!=0)||(y/400==0))
    {
         return 1;
    }
    else
    {
         return 0;
}   
}

6 个回复

倒序浏览
您需要登录后才可以回帖 登录 | 加入黑马