MOOC北京理工《C语言程序设计(上)》第4周第3题:计算星期

题目内容:

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


输入格式:

年 月 日


输出格式:

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

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


输入样例:

2013 3 11

输出样例:

1


输入样例:

2013 13 15

输出样例:

month is error.


#include 
int main()
{
	int year,month,day,leapyear,error,sumleapyear,i,sumday,week;
	scanf("%d %d %d",&year,&month,&day);
	error=0;
	if(year<=1900){error=1;printf("year is error.");}/*判断年是否合法*/
	if((year%400==0)||(year%100!=0&&year%4==0))leapyear=1;/*判断闰年,为判断2月日期是否合法做准备*/ 
	else leapyear=0;
	if(month<1||month>12){error=1;printf("month is error.");}/*判断月是否合法*/
	switch(month)
	{
		case 1:if(day<1||day>31){error=1;printf("day is error.");}break;
		case 2:if(leapyear=1)
		           {if(day<1||day>29){error=1;printf("day is error.");}break;}
		        else if(day<1||day>28){error=1;printf("day is error.");}break;
		case 3:if(day<1||day>31){error=1;printf("day is error.");}break;
		case 4:if(day<1||day>30){error=1;printf("day is error.");}break;
		case 5:if(day<1||day>31){error=1;printf("day is error.");}break;
		case 6:if(day<1||day>30){error=1;printf("day is error.");}break;
		case 7:if(day<1||day>31){error=1;printf("day is error.");}break;
		case 8:if(day<1||day>31){error=1;printf("day is error.");}break;
		case 9:if(day<1||day>30){error=1;printf("day is error.");}break;
		case 10:if(day<1||day>31){error=1;printf("day is error.");}break;
		case 11:if(day<1||day>30){error=1;printf("day is error.");}break;
		case 12:if(day<1||day>31){error=1;printf("day is error.");}break;
	}/*判断日是否合法*/
    switch(month)
    {
    	case 1:sumday=day;break;
    	case 2:sumday=31+day;break;
    	case 3:sumday=31+28+leapyear+day;break;
    	case 4:sumday=31+28+leapyear+31+day;break;
    	case 5:sumday=31+28+leapyear+31+30+day;break;
    	case 6:sumday=31+28+leapyear+31+30+31+day;break;
    	case 7:sumday=31+28+leapyear+31+30+31+30+day;break;
    	case 8:sumday=31+28+leapyear+31+30+31+30+31+day;break;
    	case 9:sumday=31+28+leapyear+31+30+31+30+31+31+day;break;
    	case 10:sumday=31+28+leapyear+31+30+31+30+31+31+30+day;break;
    	case 11:sumday=31+28+leapyear+31+30+31+30+31+31+30+31+day;break;
    	case 12:sumday=31+28+leapyear+31+30+31+30+31+31+30+31+30+day;break;
	}/*计算目标年年内已经走过了多少天*/
	sumleapyear=0;/*闰年清零*/
	for(i=1900;i<=(year-1);i++)  
    {  
       if((i%400==0)||((i%100!=0)&&(i%4==0)))sumleapyear+=1;/*找出1900年到目标年的前一年之间有几个闰年*/  
    } 
    week=((year-1-1899)*365+sumleapyear+sumday)%7;/*计算从1900年1月1日(星期一)起到目标日一共走过了多少天*/
	if(error==0)printf("%d",week);
	return 0;
}


你可能感兴趣的:(C/C++,MOOC北京理工C)