定义一个结构体变量(包括年月日)。计算某日在一年中是第几天?(注意还要有闰年的判断)

定义一个结构体变量(包括年月日)。计算某日在一年中是第几天?(注意还要有闰年的判断)... 定义一个结构体变量(包括年月日)。计算某日在一年中是第几天?(注意还要有闰年的判断) 展开
 我来答
zss2003
2008-06-29 · TA获得超过1005个赞
知道小有建树答主
回答量:684
采纳率:0%
帮助的人:594万
展开全部
#include<stdio.h>
struct date
{
int year;
int month;
int day;
}date;
void main()
{
int sum=0,leap;
printf("\n请输入日期(年,月,日)\n");
scanf("%d,%d,%d",&date.year,&date.month,&date.day);
switch(date.month)//先计算某月以前月份的总天数。
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");
break;
}
sum=sum+date.day;//再加上某天的天数。
if(date.year%400==0||(date.year%4==0&&date.year%100!=0))
leap=1;
else
leap=0;
if(leap==1&&date.month>2)//如果是闰年且月份大于2,总天数应该加一天。
sum++;
printf("这天是当年的第 %d 天。\n",sum);
}
warden_alpha
2008-06-29 · TA获得超过529个赞
知道小有建树答主
回答量:559
采纳率:0%
帮助的人:134万
展开全部
只写关键的部分,仅供参考:

/*结构定义,合法数据的判断比较简单就不写了*/
struct mydate a
{int myyear;
int mymonth;
int myday;
}

/*判断闰年*/
int leap_year(int a)
{if !(a%400) return 1;
else if !(a%100) return 0;
else !(a%4) return 1;
}

/*计算一年中的第几天*/
int cal_day(struct mydate a)
{int sum=0,b[]={31,28,31,30,31,30,31,31,30,31,30,31}
for(int i=0;i++;i<a.mymonth-1)
sum+=b[i];
sum=sum+a.myday+leapyear(a.myyear);
return sum;
}

最后只要在main函数里按顺序调用就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
溥昌Qx
2008-06-29 · TA获得超过538个赞
知道小有建树答主
回答量:292
采纳率:0%
帮助的人:364万
展开全部
struct Date
{
int Year;
int Month;
int Day;
};

//未进行参数检查!
int PassedDays(struct Date *dat)
{
int leapYear = 0;
int passedDays = 0;

//能被4整除,但不能被100整除
if(dat->Year % 100)
{
if(!(dat->Year % 4)) leapYear = 1;
}
//能被100整除,又能被400整除
else
{
if(!(dat->Year % 400)) leapYear = 1;
}

passedDays = (dat->Month-1)*31 + dat->Day
- (dat->Month-1)/2 - (dat->Month>2)*(2-leapYear);

return passedDays;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
永远支持BD
2008-06-29 · TA获得超过1537个赞
知道小有建树答主
回答量:538
采纳率:0%
帮助的人:249万
展开全部
呵呵 记得是以前上C语言第一次考试的题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
缘说jeep
2018-06-25
知道答主
回答量:1
采纳率:0%
帮助的人:857
展开全部
#include"stdio.h"
void main()
{ struct date
{ int year,month,day;}aday;
int i,n=0;
scanf("%d/%d/%d",&aday.year,&aday.month,&aday.day);
for (i=0;i<aday.month;i++)
switch(i)
{case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:n+=31;break;
case 4:
case 6:
case 9:
case 11:n+=30;break;
case 2:if(aday.year%4==0&&aday.year%100!=0||aday.year%400==0)
n+=29;
else
n+=28;
}
n+=aday.day;
printf("%d",n);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式