## Jan 30, 2012

### K & R C Programs Exercise 5-8.

K and R C, Solution to Exercise 5-8:
K and R C Programs Exercises provides the solution to all the exercises in the C Programming Language (2nd Edition). You can learn and solve K&R C Programs Exercise.
There is no error-checking in the function day_of_year or month_day. Remedy this defect.
In day_of_year we check for reasonable values in month and day. If month is less than one or greater than twelve, day_of_year returns -1. If day is less than one or day exceeds the number of days for the month, the function returns -1.
In month_day we first check for negative year. You may want to add this kind of check in day_of_year also. Then we proceed to decrement year day while we check that the month does not exceed 12. Read more about C Programming Language .

```/***********************************************************
* You can use all the programs on  www.c-program-example.com
* for personal and learning purposes. For permissions to use the
* programs for commercial purposes,
* contact info@c-program-example.com
* To find more C programs, do visit www.c-program-example.com
* and browse!
*
*                      Happy Coding
***********************************************************/
#include <stdio.h>

static char daytab[2][13] =  {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
};

/* day_of_year: set day of year from month & day */
int day_of_year(int year, int month, int day)
{
int i, leap;

if (year < 1752 || month < 1 || month > 12 || day < 1)
return -1;

leap = (year%4 == 0 && year%100 != 0) || year%400 == 0;
if (day > daytab[leap][month])
return -1;

for (i = 1; i < month; i++)
day += daytab[leap][i];
return day;
}

/* month_day: set month, day from day of year */
int month_day(int year, int yearday, int *pmonth, int *pday)
{
int i, leap;

if (year < 1752 || yearday < 1)
return -1;

leap = (year%4 == 0 && year%100 != 0) || year%400 == 0;
if ((leap && yearday > 366) || (!leap && yearday > 365))
return -1;

for (i = 1; yearday > daytab[leap][i]; i++)
yearday -= daytab[leap][i];
*pmonth = i;
*pday = yearday;

return 0;
}

/* main: test day_of_year and month_day */
int main(void)
{
int year, month, day, yearday;

for (year = 1970; year <= 2000; ++year) {
for (yearday = 1; yearday < 366; ++yearday) {
if (month_day(year, yearday, &month, &day) == -1) {
printf("month_day failed: %d %d\n",
year, yearday);
} else if (day_of_year(year, month, day) != yearday) {
printf("bad result: %d %d\n", year, yearday);
printf("month = %d, day = %d\n", month, day);
}
}
}

return 0;
}

```
`Read more c programs `
```C Basic
C Strings
K and R C Programs Exercise```
You can easily select the code by double clicking on the code area above.

You can discuss these programs on our Facebook Page. Start a discussion right now,

our page!