초보자를 위한 C/C++ 연습

C와 C++로 윤년 판별하기

이 레슨에서는 그레고리력의 규칙에 따라 어떤 해가 윤년인지 판별합니다.

소개

그레고리력에서는 4로 나누어떨어지는 해가 윤년이지만, 100으로 나누어떨어지면서 400으로는 나누어떨어지지 않는 해는 제외합니다. 그래서 2000년은 윤년이었지만 1900년은 아니었습니다. 여러 논리 조건을 조합하는 연습으로 좋습니다.

핵심 정리

  • 컴파일러 경고(compiler warnings)를 켜고 모두 고치세요.
  • 각 값의 타입과 수명(lifetime)을 정확히 이해하세요.
  • 입력 데이터와 배열 인덱스의 범위를 항상 확인하세요.

C와 C++ 코드 예제

C
실행 →
main.c
#include <stdio.h>
int main(void) {
    int year = 2024;
    // Apply the Gregorian calendar rules in one expression.
    int leap = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
    printf("%d is %sa leap year\n", year, leap ? "" : "not ");
}
실행 결과
2024 is a leap year
C++
실행 →
main.cpp
#include <iostream>
int main() {
    int year = 2024;
    // Apply the Gregorian calendar rules in one expression.
    bool leap = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
    std::cout << year << " is " << (leap ? "" : "not ") << "a leap year\n";
}
실행 결과
2024 is a leap year

C와 C++ 비교

식 year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)은 규칙 전체를 한 줄로 나타냅니다. 앞부분은 400으로 나누어떨어지는 해를, 뒷부분은 4로 나누어떨어지지만 100으로는 나누어떨어지지 않는 해를 다룹니다. 2024년은 뒷부분을 만족하므로 윤년입니다.

C

C는 작은 절차형 함수를 쓰고, 데이터가 메모리에 어떻게 표현되는지 그대로 드러냅니다.

C++

C++는 여전히 저수준 작업을 할 수 있으면서, 라이브러리 타입과 더 안전한 추상화를 더합니다.

연습 문제

두 버전을 모두 실행한 다음 코드를 바꿔 보면서 각 언어가 주는 안전성의 차이를 살펴보세요.

  • 잘못된 입력과 경계값으로 테스트해 보세요.
  • -Wall -Wextra -Wpedantic 옵션으로 컴파일해 경고를 더 많이 켜 보세요.
  • 공통 선언은 헤더 파일에, 구현은 별도의 파일에 두어 보세요.

챌린지로 연습하기

이 레슨에서 배운 내용으로 실제 문제를 풀어 보세요. 모든 챌린지는 브라우저에서 실행되며 즉시 테스트와 AI 리뷰를 받을 수 있습니다.

모든 챌린지