2014年第五届蓝桥杯决赛C组题目 第三题 标题:日期差

这篇博客介绍了如何计算两个公元纪年日期之间的天数差值。通过一个C语言程序展示了如何将日期转换为天数,并计算两个日期之间的差值。程序逻辑包括检查闰年并累加月份天数,最终通过`diff`函数得出两个日期的差值。示例计算了1864年12月31日至1865年1月1日的天数差。
摘要由CSDN通过智能技术生成

第三题 标题:日期差

 

标题:日期差

 

    历史上,不同的人类聚居地可能有不同的历法,因而记录下来的资料中日期的换算就很麻烦。幸好今天我们统一使用公元纪年法。当然,这种历法对求两个日期差多少天也不是十分简便,但毕竟是可以忍受的。

 

    下面的程序计算了两个日期的差值,两个日期都使用公元纪年法。

 

    请分析程序逻辑,并推断划线部分缺失的代码。

 

intto_day(int y, int m, int d)

{

         int mon[] ={0,31,28,31,30,31,30,31,31,30,31,30,31};

         int day = 0;

         int i;

         for(i=1; i<y; i++){

                   day += (i%4==0 &&i%100!=0 || i%400==0)? 366 : 365;

         }

        

         if(y%4==0 && y%100!=0 ||y%400==0) mon[2]++;

        

         for(i=1; i<m; i++){

                   _____________________;  //填空位置

         }

        

         return day + d;

}

 

intdiff(int y1, int m1, int d1, int y2, int m2, int d2)

{

         int a = to_day(y1, m1, d1);

         int b = to_day(y2, m2, d2);

         return b-a;

}

 

intmain()

{

         int n = diff(1864,12,31,1865,1,1);

         printf("%d\n", n);

         return 0;

}

 

注意:通过浏览器提交答案。只填写缺少的内容,不要填写任何多余的内容(例如:说明性文字或已有符号)。

 

解题思路:

         第一次看到这种题目,感觉还是有把握的!有把握的题目就有拿分!

 

代码:

#include<stdio.h>

 

intto_day(int y, int m, int d)

{

         int mon[] ={0,31,28,31,30,31,30,31,31,30,31,30,31};

         int day = 0;

         int i;

         for(i=1; i<y; i++){

                   day += (i%4==0 &&i%100!=0 || i%400==0)? 366 : 365;

         }

        

         if(y%4==0 && y%100!=0 ||y%400==0) mon[2]++;

        

         for(i=1; i<m; i++){

                   day+=mon[i];  //填空位置

         }

        

         return day + d;

}

 

intdiff(int y1, int m1, int d1, int y2, int m2, int d2)

{

         int a = to_day(y1, m1, d1);

         int b = to_day(y2, m2, d2);

         return b-a;

}

 

intmain()

{

         int n = diff(1864,12,31,1865,1,1);

         printf("%d\n", n);

         return 0;

}

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值