C 언어: 알 고 있 는 임의의 연도 와 달 에 그 달의 달력 을 표시 합 니 다.

12464 단어 지식 점
임의의 연도 와 월 표시 달력 을 알 고 있 습 니 다.
짐 랄 슨 의 계산 공식 에 따 르 면 알고리즘 은 다음 과 같다. w = (day + 2month + 3 (month - 1) / 5 + year + year / 4 - year / 100 + year / 400)% 7;
설명: 공식 적 인 날짜 중의 일수, month 는 날짜 중의 월 수 를 나타 낸다. year 는 날짜 중의 연 도 를 나타 낸다. 그 중에서 서기 원년 을 참고 로 서기 원년 1 월 1 일 은 월요일 이 고 1 월과 2 월 을 전년 의 13 월과 4 월 로 본다.
코드 는 다음 과 같 습 니 다:
#include 
#include 

//      
int leapyear(int year)
{
	if((year % 4 ==0 && year % 100 !=0)||year %400 == 0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

int main(void)
{
	int year,month;
	printf("input year:");
	scanf("%d",&year);
	printf("input month:");
	scanf("%d",&month);
	if(month == 1||month == 2)
	{
		month += 12;
		year--;
	}

	//              
	int daycount = 0;
	switch(month)
	{
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
	case 13:
		daycount = 31;
		break;
	case 4:
	case 6:
	case 9:
	case 11:
		daycount = 31;
		break;
	case 14:
		{
			if(leapyear(year))
			{
				daycount = 29;
			}
			else
			{
				daycount = 28;
			}
			break;
		}
	default:
		break;
	}

	
	int blank = 0;
	blank = (1+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
	if(month > 12)
	{
		month = month -12;
		year++;
	}
	printf("-------------------%d,%d----------------
"
,year,month); printf("Mon\tTue\tWed\tThr\tFri\tSat\tSun
"
); int i = 0; for(i = 0;i<blank;i++) { printf("\t"); } for(i = 1;i<=daycount;i++) { printf("%d\t",i); if((i+blank)%7 == 0) { printf("
"
); } } }

요약: 매달 1 일이 무슨 요일 인지 정확히 나 누 면 됩 니 다.그래서 알고리즘: w = (day + 2month + 3 (month - 1) / 5 + year + year / 4 - year / 100 + year / 400)% 7;중 day = 1.

좋은 웹페이지 즐겨찾기