定义一个结构体变量,包括年,月,日。计算该日在本年中是第几天。写一个days函数,实现其运算。

由main函数将年,月,日传递给days函数,计算后将日子数传回主函数输出。

求代码啊啊啊

struct time_s
{
    int year;
    int month;
    int day;
};

int days(struct time_s * pTime)
{
    int a[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //每个月的天数
    int year;
    int loop;
    int day = 0;

    if(pTime == NULL)
    {
        return -1;
    }

    year = pTime->year;
    //闰年
    if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
    {
        a[2] = 29; //2月有29天
    }

    for(loop = 1; loop < pTime->month; loop++)
    {
        day += a[loop];
    }

    day += pTime->day;

    return day;
}

int main()
{
    int day;
    struct time_s sTime;

    sTime.year = 2000;
    sTime.month = 3;
    sTime.day = 5;

    day = days(&sTime);

    printf("%d\n", day);

    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-05

请参考以下代码。

不过请注意,该代码中,没有检查月、日是否合法的逻辑,比如月份不能大于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;
}

相似回答