请参考以下代码。
不过请注意,该代码中,没有检查月、日是否合法的逻辑,比如月份不能大于13等。请自行增加。
#include <stdio.h>
#include <string.h>
/*
由main函数将年,月,日传递给days函数,计算后将日子数传回主函数输出。
*/
/*定义结构体*/
typedef struct year_month_day{
int year;
int month;
int day;
} YMD;
/*定义days函数,该函数的实现在主函数后面*/
int days(YMD);
/*主函数*/
int main(int argv, char* argc[])
{
YMD ymd;
ymd.year = 2014;
ymd.month = 3;
ymd.day = 5;
printf("日期2014/3/5是2014年中的第%d天。", days(ymd));;
getchar();
return 0;
}
/*days函数的实现,通过结构体传入年、月、日,返回该日在本年中是第几天*/
int days(YMD ymd)
{
int iyear, imonth, iday;
int i;
int total_days = 0;
iyear = ymd.year;
imonth = ymd.month;
iday = ymd.day;
/*先计算截至imonth-1月的总天数*/
for (i = 1; i < imonth; i++){
switch (i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
total_days += 31;
break;
case 4:
case 6:
case 9:
case 11:
total_days += 30;
break;
case 2:
/*2月特殊,闰年2月29天,普通年份2月28天*/
if (((iyear % 4 == 0) && (iyear % 100 != 0)) || (iyear % 400 == 0))
{
total_days += 29;
}
else
{
total_days += 28;
}
break;
default:
total_days = -1;
break;
}
}
/*再加上iday天,作为今年内的第几天的结果,并返回*/
return total_days + iday;
}