At last I had some time to knock up some code. I used VC++ 2008 to build as those who are curious can build the code without having to purchase a nice IDE!
Code:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define GEORGIAN_LEAP 4
#define NOT_LEAP_YEAR 100
#define IS_LEAP_YEAR 400
#define HAS_DAYS_31 31
#define HAS_DAYS_30 30
#define HAS_DAYS_28 28
#define HAS_DAYS_29 29
const char* months[] =
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
struct monthDays
{
char* mths;
int numdays;
};
int main()
{
// We initialise all months apart from Febuary until we determine a leap year!
monthDays yearMonths[12];
for(int i = 0; i < 12; i++)
{
yearMonths[i].mths = (char*)months[i];
if(i == 1) // DON'T set February number of days yet!
{
continue;
}
// Fill the months and associated days!
if(strstr(yearMonths[i].mths, months[0]) || // January
strstr(yearMonths[i].mths, months[2]) || // March
strstr(yearMonths[i].mths, months[4]) || // May
strstr(yearMonths[i].mths, months[6]) || // July
strstr(yearMonths[i].mths, months[7]) || // August
strstr(yearMonths[i].mths, months[9]) || // October
strstr(yearMonths[i].mths, months[11])) // December
{
yearMonths[i].numdays = HAS_DAYS_31;
continue;
}
if(strstr(yearMonths[i].mths, months[3]) || // April
strstr(yearMonths[i].mths, months[5]) || // June
strstr(yearMonths[i].mths, months[8]) || // September
strstr(yearMonths[i].mths, months[10])) // November
{
yearMonths[i].numdays = HAS_DAYS_30;
continue;
}
printf("%s has %d days.\n", yearMonths[i].mths, yearMonths[i].numdays);
}
// seed the year and days entered by user.
int year = 0, days = 0;
puts("Enter a year: ");
scanf("%i", &year);
puts("Enter the days: ");
scanf("%i", &days);
int daysSum = 0;
int exactDate = 0;
char* currentMonth = (char *) malloc(sizeof(char) * 30);
if((year % GEORGIAN_LEAP) == 0) // We've fulfilled the condition for a 'Georgian leap'
{
if(((year % NOT_LEAP_YEAR) != 0) || ((year % IS_LEAP_YEAR) == 0)) // Other conditions fulfilled.
{
yearMonths[1].numdays = HAS_DAYS_29; // Feb has 29 days in a leap year.
printf("We have a leap year! (%d)\n", year);
// Work out the date.
int i = 0;
while(i < 11)
{
if((daysSum + yearMonths[i].numdays) >= days)
{
break;
}
daysSum += yearMonths[i].numdays;
i++;
}
currentMonth = yearMonths[i].mths;
if((days - daysSum) == 0)
exactDate = 31;
else
exactDate = days - daysSum;
printf("It is %s %d\n", currentMonth, exactDate);
}
}
else
{
yearMonths[1].numdays = HAS_DAYS_28; // Feb has 28 days in a common year.
printf("We do not have a leap year, alas... (%d)\n", year);
// Work out the date.
int i = 0;
while(i < 12)
{
if((daysSum + yearMonths[i].numdays) >= days)
{
break;
}
daysSum += yearMonths[i].numdays;
if(i < 11)
i++;
}
currentMonth = yearMonths[i].mths;
if((days - daysSum) == 0)
exactDate = 31;
else
exactDate = days - daysSum;
printf("It is %s %d\n", currentMonth, exactDate);
}
}
I've left it monolithic so that it's easier to work through. given that this is a homework assignment I've made the commenting rather scant forcing the OP to do some significant analysis. Am happy to take questions, though. 
Also feel free to point out any bugs and I might fix them.
Bookmarks
Algorithms and Data Structures
Java tutorials
Algorithms Forum