C语言:输入起始日期与截至日期,计算相距天数。

C语言:输入起始日期与截至日期,计算相距天数。

#include <stdio.h>
//输入两个日期,计算它们相隔的天数。
//判断是不是闰年
int year(int year) {
	if ((year % 4==0) && (year % 100!=0)|| year % 400 ==0)
	   return 1;
	else
	return 0;
}
//根据年份(润or平)输出月份有多少天
int month(int month,int year1) {
	int day = 0;
	if ((year(year1))==1) 
	{   
		//为润年
		switch (month) 
		{
		case(1):day = 31; break;
		case(2):day = 29; break;
		case(3):day = 31; break;
		case(5):day = 31; break;
		case(7):day = 31; break;
		case(8):day = 31; break;
		case(10):day = 31; break;
		case(12):day = 31; break;
		default: day = 30;
		}
	}
	else
	    //为平年
		switch (month)
		{
		case(1):day = 31; break;
		case(2):day = 28; break;
		case(3):day = 31; break;
		case(5):day = 31; break;
		case(7):day = 31; break;
		case(8):day = 31; break;
		case(10):day = 31; break;
		case(12):day = 31; break;
		default: day = 30;
		}
	return day;
}
int yearday(int j) {
	int dd = 0;
	int year = j;
	for (int i = 1; i <= 12; i++)
		dd += month(i,year);
	return dd;
}
int main() {
	int year1, month1, day1;
	int year2, month2, day2;
	//dy是年差,dm是月差,dd是天差
	int dy = 0, dm = 0, dd = 0;
	printf("起始日期:");
	scanf_s("%d/%d/%d", &year1, &month1, &day1);
	printf("截至日期:");
	scanf_s("%d/%d/%d", &year2, &month2, &day2);
	//起始日期为year1/month1/day1
	//截至日期为year2/month2/day2
	
	//如果两个日期在同一年
	if (year1 == year2) 
	{
	    //如果两个日期在同年同月
		if (month1 == month2) 
		{
			dd = day2 - day1;
		}
		//如果两个日期是同两不同月
		else
		{   
			//第一步 计算month1没过完的天数,再加上month1与month2之间空白月的总天数。
			int year = year1;
			dm = month2 - month1;
			for (dm = dm - 1; dm > 0; dm--)
			{
			    //再注释:month( month,year)函数是返还对应天数
				dd += month(month1 + dm,year);
			}
			dd += ((month(month1,year) - day1));			
			//第二步 加上month2的day2
			dd += day2;
		}
	}
	//两日期不在同一年
	else
	{
		//计算year1与year2之间空白年之间的总天数
		dy = year2 - year1;
		for (dy = dy - 1; dy > 0; dy--)
		{   
			int year = year1 + dy;
			for(int i=1;i<=12;i++)
			dd += month(i,year);
		}
		//计算year2有多少天
		int year = year2;
		for (int i = 1; i < month2; i++)
		{
			dd += month(i,year);
		}
		dd += day2;
		//计算year1剩余多少天
		year = year1;
		//dd1是year1过了几天
		int dd1 = 0;
		for (int i = 1; i < month1; i++)
		{
			dd1 += month(i,year);
		}
		dd1 += day1;
		//将year1剩余的天数加入dd
		dd += (yearday(year1) - dd1);
	}
	printf("间距%d天", dd);
}

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值