C program to display month by month calendar for a given year (original) (raw)

Last Updated : 12 Jul, 2025

**Prerequisite: Find day of the week for a given date Given a year **N, the task is to print the calendar for every month of the given year. **Implementation:

C `

// C program to print the month by month // calendar for the given year

#include <stdio.h>

// Function that returns the index of the // day for date DD/MM/YYYY int dayNumber(int day, int month, int year) {

static int t[] = { 0, 3, 2, 5, 0, 3, 
                5, 1, 4, 6, 2, 4 }; 
year -= month < 3; 
return (year + year / 4 
        - year / 100 
        + year / 400 
        + t[month - 1] + day) 
    % 7; 

}

// Function that returns the name of the // month for the given month Number // January - 0, February - 1 and so on char* getMonthName(int monthNumber) { char* month;

switch (monthNumber) { 
case 0: 
    month = "January"; 
    break; 
case 1: 
    month = "February"; 
    break; 
case 2: 
    month = "March"; 
    break; 
case 3: 
    month = "April"; 
    break; 
case 4: 
    month = "May"; 
    break; 
case 5: 
    month = "June"; 
    break; 
case 6: 
    month = "July"; 
    break; 
case 7: 
    month = "August"; 
    break; 
case 8: 
    month = "September"; 
    break; 
case 9: 
    month = "October"; 
    break; 
case 10: 
    month = "November"; 
    break; 
case 11: 
    month = "December"; 
    break; 
default:
    month = "Invalid"; // Warning: Improper usage of function can lead to undefined behavior.
    break;

} 
return month; 

}

// Function to return the number of days // in a month int numberOfDays(int monthNumber, int year) { // January if (monthNumber == 0) return (31);

// February 
if (monthNumber == 1) { 
    // If the year is leap then Feb 
    // has 29 days 
    if (year % 400 == 0 
        || (year % 4 == 0 
            && year % 100 != 0)) 
        return (29); 
    else
        return (28); 
} 

// March 
if (monthNumber == 2) 
    return (31); 

// April 
if (monthNumber == 3) 
    return (30); 

// May 
if (monthNumber == 4) 
    return (31); 

// June 
if (monthNumber == 5) 
    return (30); 

// July 
if (monthNumber == 6) 
    return (31); 

// August 
if (monthNumber == 7) 
    return (31); 

// September 
if (monthNumber == 8) 
    return (30); 

// October 
if (monthNumber == 9) 
    return (31); 

// November 
if (monthNumber == 10) 
    return (30); 

// December 
if (monthNumber == 11) 
    return (31);

}

// Function to print the calendar of // the given year void printCalendar(int year) { printf(" Calendar - %d\n\n", year); int days;

// Index of the day from 0 to 6 
int current = dayNumber(1, 1, year); 

// i for Iterate through months 
// j for Iterate through days 
// of the month - i 
for (int i = 0; i < 12; i++) { 
    days = numberOfDays(i, year); 

    // Print the current month name 
    printf("\n ------------%s-------------\n", 
        getMonthName(i)); 

    // Print the columns 
    printf(" Sun Mon Tue Wed Thu Fri Sat\n"); 

    // Print appropriate spaces 
    int k; 
    for (k = 0; k < current; k++) 
        printf("     "); 

    for (int j = 1; j <= days; j++) { 
        printf("%5d", j); 

        if (++k > 6) { 
            k = 0; 
            printf("\n"); 
        } 
    } 

    if (k) 
        printf("\n"); 

    current = k; 
} 

return; 

}

// Driver Code int main() { int year = 2016; // Warning: For beginners, it may not be clear how to input a custom year. // Suggest replacing this with a scanf() for user input.

// Function Call 
printCalendar(year); 
return 0; 

}

`

Output

... 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

------------September------------- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

------------October------------- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

------------November------------- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

------------December------------- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

**Time Complexity: O(1)
**Auxiliary Space: O(1), As constant extra space is used.