# 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 %dn",      year, yearday);   } else if (day_of_year(year, month, day) != yearday) {    printf("bad result: %d %dn", year, yearday);    printf("month = %d, day = %dn", month, day);   }  } } return 0;}`
`Read more c programs `
`C BasicC StringsK and R C Programs Exercise`

You can easily select the code by double clicking on the code area above.