SPRING :: NOTE

[C] 연수와 월수를 입력하면 달력이 출력되는 프로그램 본문

Development Language/C · C++ · MFC

[C] 연수와 월수를 입력하면 달력이 출력되는 프로그램

RAYZIE 2016. 10. 26. 11:45
반응형

연수와 월수를 입력하면 달력이 출력되는 프로그램을 작성하시오.


조건:


1년 1월 1일은 월요일이다


4년마다 한 번씩 윤년(원래 2월은 28일까지지만, 윤년 때의 2월은 29일까지임)


그런데 100년마다는 윤년이 아니다.


그런데! 400년마다는 또 윤년이다.


(따라서 300년은 윤년이 아니지만, 2000년은 윤년)




연수를 입력하시오: 2006


월수를 입력하시오: 8




 일   월   화   수   목   금   토


              1     2    3    4    5


  6     7    8     9   10  11   12


13    14   15   16   17  18   19


20    21   22   23   24  25   26


27    28   29   30   31

#include <stdio.h>
void calendar(int year, int month);
main(){
	int year = 0, month = 0;
	
	printf("연 수를 입력하시오 : ");
	scanf("%d", &year);

	printf("\n");

	printf("월수를 입력하시오 : ");
	scanf("%d", &month);

	printf("\n");
	printf("일\t월\t화\t수\t목\t금\t토\n");

	

	calendar(year, month);

}

void calendar(int year, int month)
{

	int day[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	int days = 0;
	int first_date = 0;
	int count = 0;



	days = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;

	for (int i = 0; i < month - 1; i++)
	{
		if (i == 1){
			if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) //윤년(2/29)
				day[1] = 29;
			else
				day[1] = 28;
		}

		days += day[i];
	}
	// 7일씩 나눠주면 전달에서 다음달로 넘어갈때 첫주 칸을 채울 count
	first_date = days % 7; 

	//1년 1월 1일은 월요일. (시작은 일요을부터)
	for (int i = 0; i <= first_date; i++)
	{
		printf("\t");
		count++;
	}


	for (int i = 1; i <= day[month - 1]; i++)
	{  
		if (count >= 7)
		{ 
			printf("\n");
			count = 0;
		}
		printf("%d\t", i);
		count++;
	}
	printf("\n\n");

}


반응형
Comments