码迷,mamicode.com
首页 > 其他好文 > 详细

计算星期

时间:2016-04-11 07:03:37      阅读:625      评论:0      收藏:0      [点我收藏+]

标签:

题目内容:

给出任意一个年月日(年>1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。

 

输入格式:

年 月 日

 

输出格式:

0~6。
    星期日用 0 表示,星期一用 1 表示,星期二用 2 表示......星期六用 6 表示。

假设年份大于1900。先想一想:我们现在只会使用 if 语句,该如何建立数学模型?

 

输入样例:

2013 3 11

输出样例:

1

 

输入样例:

2013 13 15

输出样例:

month is error.

 

程序代码:*

#include "stdio.h"
void CaculateWeekDay(int y,int m, int d);
int JudgeDay(int y, int m, int d);
int leap (int y);


int main()
{
  int year=0,month=0,day=0;

  scanf("%d%d%d",&year,&month,&day);
  if(month>12||month<1)
  {
  printf("month is error.");
  if(JudgeDay(year,month,day))
  printf("day is error.");
  }
  else if(JudgeDay(year,month,day))
  printf("day is error.");
  else
    CaculateWeekDay(year,month,day);

  return 0;

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

void CaculateWeekDay(int y,int m, int d)//计算是星期几
{

  int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  int i;

  if(m>2&&leap(y))d++;
  for(i=1;i<m;i++)
  {
  d+=mon[i];
  }
d=y-1+(y-1)/4-(y-1)/100+(y-1)/400+d;

switch(d%7)
{
case 0: printf("0\n"); break;
case 1: printf("1\n"); break;
case 2: printf("2\n"); break;
case 3: printf("3\n"); break;
case 4: printf("4\n"); break;
case 5: printf("5\n"); break;
case 6: printf("6\n"); break;
}
}
int JudgeDay(int y, int m, int d)//判断输入是否合法
{
if (d <= 0 || d> 31)
return 1;
else if (leap(y))
{
  switch (m)
  {
case 4:
case 6:
case 9:
case 11: if (d== 31) return 1; break;
case 2: if (d> 29) return 1; break;
default : return 0; break;
  }
}
else
{
switch (m)
  {
case 4:
case 6:
case 9:
case 11: if (d== 31) return 1; break;
case 2: if (d> 28) return 1; break;
default : return 0; break;
  }
}
return 0;
}

技术分享技术分享

计算星期

标签:

原文地址:http://www.cnblogs.com/entrepre/p/5376807.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!