Open In App

C program to display month by month calendar for a given year

Improve
Improve
Like Article
Like
Save
Share
Report

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
    
    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; 
  
    // 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.



Last Updated : 13 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads