day_datev3#

day_datev3.c

#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}
};

int day_of_year(int year,int month,int day);
void month_day(int year,int yearday,int *pmonth,int *pday);

int main(void)
{
    int day,dat,mon;

    day=day_of_year(1981,10,2);
    printf("%d\n",day);

    month_day(1981,252,&mon,&dat);
    printf("%d,%d",mon,dat);

    return 0;
}

/* day_of_year: set day of year from month and day */
int day_of_year(int year,int month,int day)
{
    int leap;
    char *p;

    leap = year%4 == 0 && year % 100 !=0 || year %400 == 0;
    p = daytab[leap];

    while(--month)
        day += *++p;
    return day;
}

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

    leap = year%4 == 0 && year %100 !=0 || year % 400 == 0;

    p = daytab[leap];

    while(yearday > *++p)
        yearday -= *p;

    *pmonth = p - *(daytab + leap);
    *pday = yearday;
}