C语言中输入一个日期计算他是今年的第几天

程序填空题
tk304.c首先定义了一个结构体变量(包括年、月、日),然后从键盘上输入任意的一天(包括年月日),最后计算该日在当年中是第几天,此时当然要考虑闰年问题。
现在程序是一个不完整的程序,请你在下划线空白处将其补充完整,以便得到正确的答案,但不得增删原来的语句。

#include <stdio.h>
struct datetype{
int year;
int month;
int day;
}date;
void main( )
{
int i,day_sum;
static int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("\nPlease input your date:\n");
scanf("%d%d%d",&date.year, &date.month, &date.day);
day_sum=0;
for(i=1;i<date.month;i++)day_sum+=day_tab[i];
day_sum+=_______(1)_________;
if((date.year % 4 == 0 && date.year % 100 != 0 || date.year % 400 ==0) && date.month>=3 )
day_sum+=___(2)_______;
printf("%d-%d-%d is No. %d of this year.\n",date.year,date.month,date.day,day_sum);
}

输入年月日三个值,先累加该年之前各个月的每月天数,最后累加日期天数即可获取结果。

一、算法设计:

1、输入年月日三个值;

2、为保证程序健壮性,可以对三个值的合法性进行判断,只对合法数据进行操作;

3、累加之前各月天数;

4、累加当前日值;

5、输出结果。

二、注意点:

可以使用数组存储各个月份的天数,用循环累加。需要注意的是闰年的判断。对于闰年,2月要多加一天。

三、参考代码:

#include <stdio.h>
int main()
{
    int mdays[12] = {31,28,31,30,31,30,31,31,30,31,30,31};//十二个月的天数。
    int y,m,d,r=0,i;
    scanf("%d%d%d",&y,&m,&d);
    if(y%400==0 || (y%4==0 && y %100 != 0))//闰年。
        mdays[1] = 29;//设置闰年二月值。
    if(y<0 || m<=0 || m>12 || d<=0 || d>mdays[m-1])//输入非法。
    {
        printf("输入年月日不合法\n");//提示并退出。
        return -1;
    }
    for(i = 0; i < m-1; i ++)//累加之前各个月。
        r+=mdays[i];
    r+=d;//累加日期值。
    printf("%d\n",r);//输出结果。
    return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-19
date.day//要加上该月的第几天,比如输入2010 5 19 <enter>day_sum就要加上1、2、3、4月分总共的天数,然后再加上19天,这就是这一年的第几天

第二个空就填1//因为闰年比平年多一天。本回答被提问者采纳
第2个回答  2010-05-19
date.day
1
第3个回答  2010-05-19
day
1
相似回答