给定一个日期,输出这个日期是该年的第几天。
程序代码:/*题目描述:给定一个日期,输出这个日期是该年的第几天。
输入数据:
第一行为正整数n,表示接下来有n组日期(1<n<10)
下面n组数据,每组占一行,数据格式为YYYY/MM/DD组成,另外,可以向你确保所有的输入数据是合法的。
对于每组输入数据,输出一行,表示该日期是该年的第几天。*/
//输入第一个日期完毕后回车程序就出错,求解惑!
#include<stdio.h>
#include<stdlib.h>
typedef struct date//结构体包含年、月、日以及天数
{
int year;
int mouth;
int day;
int sum;
struct date *next;
}link;
int calcu(link *p)//天数的计算函数
{
int i,j,k=0;
if(p->year%4!=0) j=59;//j为1、2月天数总和,平年闰年各有不同
else if(p->year%100==0) j=59;
else if(p->year%400!=0) j=59;
else j=60;
if(p->mouth<=2) k=(p->mouth-1)*30+p->day;//月数小于等于2时的计算
else if(p->mouth<9)//月数小于9时的计算
{
k=j;
for(i=3;i<p->mouth;i++)
{
if(i%2!=0) k+=31;
else k+=30;
}
k+=p->day;
}
else
{
k=j+184;
for(i=9;i<p->mouth;i++)//月数大于等于9的计算
{
if(i%2!=0) k+=31;
else k+=30;
}
k+=p->day;
}
return (i);//将计算所得天数结果返回
}
link *creat(int n)//创建链表
{
link *head,*now,*end;
int i;
head=now=(link *)malloc(sizeof(link));
for(i=0;i<n;i++)
{
if(i)
{
end=(link *)malloc(sizeof(link));
scanf("%d/%d/%d",&end->year,&end->mouth,&end->day);//输入年、月、日
end->sum=calcu(end);//预先计算天数赋值给结点中变量
end->next=NULL;
now->next=end;
now=end;
}
else
{
scanf("%d/%d/%d",&now->year,&now->mouth,&now->day);
now->sum=calcu(now);
now->next=NULL;
}
}
return (head);
}
int display(link *p)//将各结点的计算所得天数输出
{
while(p)
{
printf("%d\n",p->sum);
p=p->next;
}
return 0;
}
int freep(link *p)//清空内存
{
link *i;
while(p)
{
i=p->next;
free(p);
p=i;
}
return 0;
}
int main()
{
link *da;
int n;
printf("Input:\n");
scanf("%d",&n);
da=creat(n);
printf("Output:\n");
display(da);
freep(da);
putchar(10);
return 0;
}[ 本帖最后由 日寂 于 2014-1-4 02:01 编辑 ]






