| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5456 人关注过本帖
标题:给定一个日期,输出这个日期是该年的第几天。
只看楼主 加入收藏
日寂
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2013-11-1
结帖率:81.82%
收藏
 问题点数:0 回复次数:0 
给定一个日期,输出这个日期是该年的第几天。
程序代码:
/*题目描述:给定一个日期,输出这个日期是该年的第几天。
输入数据:
第一行为正整数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 编辑 ]
搜索更多相关主题的帖子: 正整数 include 
2014-01-03 21:28
快速回复:给定一个日期,输出这个日期是该年的第几天。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.065701 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved