标签:
题目内容:
给出任意一个年月日(年>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