解题思路:

代码整体逻辑为,利用子代码判断年份是否闰年,和判断闰平一年的天数,接着先算结束日期在结束年份中的天数(day2),再计算起始日期在起始年份中的天数(day1),然后再根据其年份之间的差值,加上n个365(或366),n为年与年的差值。计算差值天数关系式:days=day2+365(或366)n+day1。 



注意事项:可先看主函数的代码一步步慢慢理解

参考代码:

#include<stdio.h>

int leapyear(int year)//判断给定的年份是否为闰年。

{//能被4整除且不能被100整除,或者能被400整除,则该年就是闰年。

    return (year%4==0&&year%100!=0)||(year%400==0); //函数返回1表示闰年,返回0表示平年。

}

 

 //该函数用于计算从给定年份的1月1日到指定月份和日期的天数总和。

int daycha(int year,int month,int day)

{

    int sum=0;

    //二维数组a来存储平年和闰年每个月的天数。

    int a[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,//平年

    31,29,31,30,31,30,31,31,30,31,30,31};//闰年

    

    for(int i=0;i<month-1;i++) //循环累加从1月到指定月份前一个月的天数,然后加上当前月的天数day。

    {

        sum=sum+a[leapyear(year)][i];

    }

    sum+=day;

    

    return sum;

}

 

//该函数用于计算两个日期之间相差的天数.

int datecha(int startYear,int startMonth,int startDay,int endYear,int endMonth,int endDay)

{

    int day1=0,day2=0,days=0;

     

    day1=daycha(startYear,12,31)-daycha(startYear,startMonth,startDay); //计算此日期一直到明年的天数

    day2=daycha(endYear, endMonth, endDay); //计算此日期在该年中的天数

    days=day1+day2; //据days=day2+365(366)n+day1关系式,可先算day2+day1,再通过循环添加年份天数 

     

    for(int i=startYear+1;i<endYear;i++)

    {

        if(leapyear(i)==1)

            days+=366; //添加年份天数,闰年+366 

        else

            days+=365; //平年+365 

    }

    return days;

}

 

int main()

{

    int startYear, startMonth, startDay;

    int endYear, endMonth, endDay;

    scanf("%d %d %d", &startYear, &startMonth, &startDay);//输入起始日期

    scanf("%d %d %d", &endYear, &endMonth, &endDay);//输入结束日期

    int days=datecha(startYear,startMonth,startDay,endYear,endMonth,endDay);

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

    return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论