天数转换成具体日期:给出某年的第多少天,算出这天的日期;
具体日期转换成天数:给定日期得出是该年的第多少天
#includeint isleap(int year);
int day_of_year(int year, int month, int day);
void monthday(int year, int yearday, int* pmonth, int* pday);//多一列是为了下标直接对应月份,方便
int 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 main() {int x, month, day, year;//天数转换成具体日期scanf("%d %d", &year, &x);monthday(year, x, &month, &day);printf("%d年的第%d天是%d月%d日\n", year, x, month, day);//具体日期转换成天数scanf("%d %d %d", &year, &month, &day);printf("%d年%d月%d日是%d年的第%d天\n", year, month, day, year, day_of_year(year, month, day));return 0;
}int day_of_year(int year, int month, int day) {int i, sum;sum = 0;for (i = 1; i < month; i++)sum += daytab[isleap(year)][i]; //对month之前的每个月的天数求和sum += day; //再加上第month个月的天数就是所有的天数return sum;
}//要返回多于一个参数时用指针
void monthday(int year, int yearday, int* pmonth, int* pday) {int leap = isleap(year);int i;for (i = 1; yearday > daytab[leap][i]; i++)yearday -= daytab[leap][i]; //总天数依次减去每个月的天数直到不够为止,和上面的函数相反*pmonth = i;*pday = yearday;
}int isleap(int year) { //判断一个年份是否闰年return year % 4 == 0 && year % 100 || year % 400 == 0 ? 1 : 0;
}