C&C++_Basic/C_Condition
C언어 윤년 구하기
mrawesome
2020. 3. 19. 13:04
- 년도(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;
}