Exercise 5.9. Rewrite the routines day_of_year and month_day with pointers instead of indexing.
/* day_of_year */
int day_of_year(int year, int month, int day)
{
int leap;
char *p;
if(year < 1)
return -1;
leap = (year%4 == 0 && year%100 != 0) || year%400 == 0;
p = daytab[leap];
if(month < 1 || month > 12)
return -1;
if(day < 1 || day > *(p + month))
return -1;
while(month > 0)
{
day += *p++;
month--;
}
return day;
}
/* month_day */
void month_day(int year, int yearday, int *pmonth, int *pday)
{
int leap;
char *p;
char *tmp;
if(year < 1 || yearday < 1)
{
*pmonth = -1;
*pday = -1;
return;
}
leap = (year%4 == 0 && year%100 != 0) || year%400 == 0;
p = daytab[leap];
tmp = p;
if(leap == 1 && yearday > 366)
{
*pmonth = -1;
*pday = -1;
return;
}
if(leap == 0 && yearday > 365)
{
*pmonth = -1;
*pday = -1;
return;
}
while(yearday > *p++)
{
yearday -= *p;
}
*pmonth = p - tmp;
*pday = yearday;
}
Комментариев нет:
Отправить комментарий