C_C++

(C언어) 달력 만들기(한 달)

고니자니 2024. 7. 7. 07:48
반응형

C 언어를 사용하여 특정 년월의 달력을 출력하는 코드를 작성할 수 있습니다. 이를 위해 달력의 시작 요일을 계산하고, 각 날짜를 알맞게 출력해야 합니다.

우선, 2024년 7월 1일이 무슨 요일인지 알아야 합니다. 이를 계산한 후, 해당 요일로부터 날짜를 출력하는 코드를 작성합니다.

다음은 2024년 7월, 한 달의 달력을 출력하는 C 프로그램 예제입니다.

 

이 코드는 다음과 같이 작동합니다:

  1. dayOfWeek 함수는 주어진 날짜의 요일을 계산합니다. 이는 Zeller's Congruence 알고리즘을 변형하여 사용합니다.
  2. printCalendar 함수는 지정된 연도와 월에 대한 달력을 출력합니다.
  3. main 함수는 2024년 7월의 달력을 출력하기 위해 printCalendar 함수를 호출합니다.
#include <stdio.h>

// Function to determine the day of the week for a given date
int dayOfWeek(int d, int m, int y) {
    static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
    y -= m < 3;
    return (y + y / 4 - y / 100 + y / 400 + t[m - 1] + d) % 7;
}

void printCalendar(int month, int year) {
    const char* months[] = { "January", "February", "March", "April", "May", "June",
                             "July", "August", "September", "October", "November", "December" };
    const int daysInMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

    int days = daysInMonth[month - 1];

    // Check for leap year in case of February
    if (month == 2) {
        if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
            days = 29;
    }

    // Print the calendar header
    printf("     %s %d\n", months[month - 1], year);
    printf(" Su Mo Tu We Th Fr Sa\n");

    // Get the starting day of the week
    int startDay = dayOfWeek(1, month, year);

    // Print initial spaces
    for (int i = 0; i < startDay; i++)
        printf("   ");

    // Print the days of the month
    for (int day = 1; day <= days; day++) {
        printf("%3d", day);
        if ((day + startDay) % 7 == 0)
            printf("\n");
    }
    if ((days + startDay) % 7 != 0)
        printf("\n");
}

int main() {
    int month = 7;
    int year = 2024;

    printCalendar(month, year);
    
    return 0;
}

 

(C언어) 달력 만들기(한 달)

 

main 함수 내의 년, 월을 변경해서 다른 년월의 달력을 출력할 수 있습니다.

반응형