Code:
#include <stdio.h>
int julian(int yr, int mn, int dy)
{ long k1, jln;
int kyr, k2;
kyr = yr+4712;
k1 = (long)365*kyr+(kyr+3)/4;
k2 = (int)(30.6*mn- (mn<3?30.1:(kyr%4==0)?31.3:32.3))-1;
jln = k1+k2+dy;
if (jln>2361221) {
kyr = yr-300;
if (mn<3)
kyr--;
jln -= kyr/100*3/4+1;
}
return jln;
}
/*
Function for printing a month
Takes name of month, number of days in month, and start day of month
*/
pmonth(char month[13],int days,int start)
{ printf("%d\n", month);
printf("S M T W T F S");
/* To print first calandar line */
switch (start)
{ case 0: printf("%d %d %d %d %d %d %d\n", 1, 2, 3, 4, 5, 6, 7);
break;
case 1: printf(" %d %d %d %d %d %d\n", 1, 2, 3, 4, 5, 6);
break;
case 2: printf(" %d %d %d %d %d\n", 1, 2, 3, 4, 5);
break;
case 3: printf(" %d %d %d %d\n", 1, 2, 3, 4);
break;
case 4: printf(" %d %d %d\n", 1, 2, 3);
break;
case 5: printf(" %d %d\n", 1, 2);
break;
case 6: printf(" %d\n", 1);
break;
}
/* Print remaining calandar lines */
for (int i=1; i<=days; )
{
if(days-i>=7)
{
for (int x=0; x<7 ; x++)
{
printf("%d ",i++);
}
}
else
{
for (;days-i>0;i++)
{
printf("%d",i);
}
printf("\n");
}
}
}
main ()
{ int year, start, jan, feb, mar, apr, may, jun, jul, aug, sep, nov, dec;
/*Prompt for year */
printf("Enter Calandar Year");
/* Read in year */
scanf(%i,year);
/* Check if leap year */
if(year/100==0)
{ if(year/400==0)
{ leap=1;
}else{
leap=0;
}
}else{
if(year/4==0)
{ leap=1;
}else{
leap=0;
}
}
/* Set month start dates */
jan = (julian(year, 1, 1) +1)%7;
feb = (jan + 31)%7;
mar = if(leap==0)
{ (feb+28)%7;
} else {
(feb+29)%7;
}
apr = (mar +31)%7;
may = (apr +30)%7;
jun = (may +31)%7;
jul = (jun +30)%7;
aug = (jul +31)%7;
sep = (aug +31)%7;
oct = (sep +30)%7;
nov = (oct +31)%7;
dec = (nov +30)%7;
/* Print out this years calandar */
switch(leap)
{ case 0: pmonth(" January",31,jan);
pmonth(" February",28,feb);
pmonth(" March ",31,mar);
pmonth(" April",30,apr);
pmonth(" May",31,may);
pmonth(" June",30,jun);
pmonth(" July",31,jul);
pmonth(" August",31,aug);
pmonth(" September",30,sep);
pmonth(" October",31,oct);
pmonth(" November",30,nov);
pmonth("December",31,dec);
break;
/* Leap year calandar */
case 1: pmonth(" January",31,jan);
pmonth(" February",29,feb);
pmonth(" March ",31,mar);
pmonth(" April",30,apr);
pmonth(" May",31,may);
pmonth(" June",30,jun);
pmonth(" July",31,jul);
pmonth(" August",31,aug);
pmonth(" September",30,sep);
pmonth(" October",31,oct);
pmonth(" November",30,nov);
pmonth("December",31,dec);
break;
}
}