본문 바로가기

C&C++_Basic/C_Condition

C언어 윤년 구하기

  • 년도(year)와 달(month)을 사용자 입력으로 받고, 입력 받은 달의 날짜수를 계산하는 프로그램을 쓰시오. 입력 년도의 윤년(leaf year)인지를 판단해야 하고, enum data type 을 이용하여 JAN, FEB, .. 등의 값을 갖도록 switch 문을 구성하도록 한다. 만약 입력한 달이 1 ~ 12 의 수가 아니면 달을 잘못 입력했다는 문장을 출력하도록 한다.

실행 예)

년도와 월을 입력하시오.>> 2016 2

2016년은 윤년 이고, 2월은 29일입니다.

년도와 월을 입력하시오.>> 2019 5

2019년은 평년 이고, 5월은 31일입니다.

년도와 월을 입력하시오.>> 2019 15

 

#include<stdio.h>
// 윤년의 여부와 달의 일수 표시를 하는 프로그램
// 2019년 5월 14일 20143537 오범준
int main()
{
	int year, input;// 해당 연도 변수는 year로, 
	// 아래 enum data type으로 month들을 정의했으므로
	// input을 통해 각 enum data 에 해당하는
	// 숫자를 입력하도록 정의한다.
	enum month
	{
		JAN, FEB, MAR, APR, MAY,
		JUN, JUL, AUG, SEP, OCT, NOV, DEC
	};// enum data에 swith문을 위한 월들을 정의한다.
	printf("년year를 입력하세요 >>");
	scanf_s("%d", &year);// year를 입력받는다

	printf("월 중에 하나를 입력하세요 >> JAN(1) FEB(2) MAR(3) APR(4) MAY(5) JUN(6) JUL(7) AUG(8) SEP(9) OCT(10) NOV(11) DEC(12)");
	scanf_s("%d", &input);// 월을 입력 받는다. 

	// 윤년이란 4년마다, 그러나 100년 단위일때는 윤년에 해당되지 않도록
	// 400년 단위일때는 어떤 상황이든 간에 윤년으로 설정한다.
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))// year 가 윤년인지 아닌지 판별하기 위한 조건문을 세운다.
	{
		switch (input)
		{
		case JAN: case MAR: case MAY: case JUL: case AUG: case OCT: case DEC:
			printf("%d년은 윤년이고, %d월은 31일 입니다",year,input);
			break;
		case APR: case JUN: case SEP:case NOV:
			printf("%d년은 윤년이고, %d월은 30일 입니다",year,input);
			break;
		case FEB:
			printf("%d년은 윤년이고, %d월은 29일 입니다",year,input);
			break;
		default:
			printf("입력이 잘못되었습니다");
			break;
		}

	}

	else 
	{
		switch (input)
		{
		case JAN: case MAR: case MAY: case JUL: case AUG: case OCT: case DEC:
			printf("%d년은 윤년이고, %d월은 31일 입니다",year,input);
			break;
		case APR: case JUN: case SEP:case NOV:
			printf("%d년은 윤년이고, %d월은 30일 입니다",year,input);
			break;
		case FEB:
			printf("%d년은 윤년이고, %d월은 29일 입니다",year,input);
			break;
		default:
			printf("입력이 잘못되었습니다");
			break;
		}

	}

	return 0;
}