实例24 计算一年内两天间隔天数

#include <stdio.h>
#include <stdlib.h>	

//日期结构体  
typedef struct D  
{  
    int year;  
    int month;  
    int day;  
}Date;  

int getDays(Date date1,Date date2);
int IsLeapYear(int year) ;
int GetMaxDay(int year,int month);
//主函数
int main(int argc,char** argv)
{
	int days;
	Date start,end;
	printf("请输入第一个日期(1949.10.1):");
	scanf("%d.%d.%d",&start.year,&start.month,&start.day);

	printf("请输入第二个日期(1949.10.1):");
	scanf("%d.%d.%d",&end.year,&end.month,&end.day);

	days=getDays(start,end);

	printf("两个日期间隔着%d天\n",days);

	system("pause");
	return 0;
}
//判断是否是闰年  
int IsLeapYear(int year)  
{  
    return (year % 400 == 0 || year % 4 == 0 && year % 100 != 0);  
}  

//获得某年某月的最大天数  
int GetMaxDay(int year,int month)  
{  
    switch(month)  
    {  
    case 1:  
    case 3:  
    case 5:  
    case 7:  
    case 8:  
    case 10:  
    case 12:  
        return 31;  
    case 4:  
    case 6:  
    case 9:  
    case 11:  
		return 30;  
    case 2:  
        return IsLeapYear(year)?29:28;  
    default:  
        return -1;  
    }  
}  

int getDays(Date date1,Date date2)
{
	int days=0;	//预留中间求和使用
	if(date1.year==date2.year && date1.month==date2.month && date1.day==date2.day)
		return 0;
	else
	{
		if(date1.year==date2.year && date1.month==date2.month)	//同一年同一个月中的两天
		{
			days=date2.day-date1.day;
			return days;
		}
		else if(date1.year==date2.year)		//同一年不同月
		{
			int start_maxday=GetMaxDay(date1.year,date1.month);
			days = start_maxday-date1.day;
			if(date2.month==date1.month+1)	//结束月是起始月之后的一个月
			{
				days+=date2.day;
				return days;
			}
			else		//同年,不同月,且结束月不是起始月之后挨着的一个月
			{
				int m=date2.month,n=date1.month+1;
				if(n!=m)
				{
					days+=GetMaxDay(date1.year,n);
					n++;
				}
				days+=date2.day;
				return days;

			}
		}
		

	}
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值