C program to display month by month calendar for a given year
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.
Please Login to comment...