给定一个日期,输出这个日期是该年的第几天。
程序代码:
/*题目描述:给定一个日期,输出这个日期是该年的第几天。 输入数据: 第一行为正整数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 编辑 ]