소연의_개발일지
article thumbnail

 

윤년 계산기 만들기

C언어로 윤년 계산기를 만들어 봤다.

목표: IF문, 함수 바깥으로 최대한 빼서 만들기


윤년 규칙:

1. 4로 나눠지는 숫자여야 한다.

2. 하지만 100으로 나눠지는 숫자는 윤년이 아니다.

3. 2의 숫자들 중에서 400으로 나눠지는 숫자는 제외한다.

 

이렇게 생각하면 너무나 어려움. 한국말이 제일 어렵다(??)

구글링해보니까 쉽게 이해할 수 있는 순서도가 있었다.

난 이걸 그대로 따라해서 만들었다.


 

윤년 계산기 VER_1

#include <stdio.h>

int leap_year_cal(int year)
{
    if(year % 4 == 0)
        if(year % 100 == 0)
            if(year % 400 ==0){
                return 1;
            }
            else{
                return 0;
            }
        else{
            return 1;
        }
    else{
        return 0;
    }
}

int result(int leap_result, int year)
{
    if(leap_result == 1)
    {
        printf("%d년은 윤년입니다.\n", year);
    }
    else if(leap_result == 0)
    {
        printf("%d년은 윤년이 아닙니다.\n", year);
    }
}

int main(void)
{
    int year;
    printf("윤년 계산기에 오신것을 환영합니다!\n");
    printf("확인하고 싶은 년도를 입력하세요: ");
    scanf("%d", &year);
    result(leap_year_cal(year), year);

    return 0;
}
 

윤년이 잘 출력된다.


 

하지만 코드를 줄일 수 있다는 교수님의 말씀..

어떻게 하지?

그래서 가능한 조건만 윤년으로 하고 -> 나머지는 윤년 아님 으로 결과를 출력하자!라고 생각했다.

생각한 조건

그럼 (4로 나눠떨어지고 100으로 안 나눠떨어지고) OR (4, 100, 400으로 다 나눠떨어지면) 윤년이다!

그래서 코드를 다시 줄여봤다.

 

 

윤년계산기ver2

#include <stdio.h>

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

int result(int leap_result, int year)
{
    if(leap_result == 1)
    {
        printf("%d년은 윤년입니다.\n", year);
    }
    else if(leap_result == 0)
    {
        printf("%d년은 윤년이 아닙니다.\n", year);
    }
}

int main(void)
{
    int year;
    printf("윤년 계산기에 오신것을 환영합니다!\n");
    printf("확인하고 싶은 년도를 입력하세요: ");
    scanf("%d", &year);
    result(leap_year_cal(year), year);
    
    return 0;
}
 

훨씬 코드가 짧아졌다.

++

else를 지우고 return 0;으로 생략하니 코드가 더 짧아졌다. 0은 false니까 어차피 상관 없을 듯하다.

아주깔끔하다. 만족!

 

profile

소연의_개발일지

@ssoyxon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!