C语言:输入两个日期,计算出两个日期之间相差的天(并且计算出两个日期分别是同年的第几天)!

因为自己初学,代码有很多地方待优化!

欢迎大家指点!

#include
/*计算当年的月份天数*/
int sum_day(int month,int day);
/*判断当年是否为闰年*/
int is_whether_leap(int year);
/*计算两个年份之间的天数*/
int interval_year_day(int year, int year2);
/*给出年月日 计算该日是该年的第几天
  -1 输入日期
  -2 判断该年是否为闰年 如果为闰年天数+1
  -3 计算同年天数 直接加上这个月的天数就行了
  -4 计算同年的月份天数 循环 数组首位为1月份 然后依次循环为每个月份赋值 然后相加 计算天数
  -5 计算相差年份天数 用后一个年份直接减去前一个年份 然后是循环的初值为小的年份 终止条件为大的年份 一次判断是否为
     闰年 如果为闰年 则对应的天数+1  (后一年-前面一年)*365就是相差的天数
  -6 同年是否为闰年需要单独进行判断
  -6 输出
*/    
void main() {
	int year_intveral;//相差年份之间的天数
	int day_intveral; //相差天数之间的间隔
	int sum_intveral; //总的相差天数
	int year, month, day, sum_days,or_year_flag;  //定义年 月 日 总天数 是否为闰年标记
	int year2, month2, day2,sum_days2, or_year_flag2;
	printf("请输入日期:(格式为2019 12 14 日期建议从前往后!)\n");
	scanf_s("%d%d%d", &year, &month, &day);
	printf("您输入的日期为:\t%d-%d-%d\n", year, month, day);
	printf("--------------------------------------------------\n");
	printf("请输入日期:(格式为2019 12 14 日期建议从前往后!)\n");
	scanf_s("%d%d%d", &year2, &month2, &day2);
	printf("您输入的日期为:\t%d-%d-%d\n", year2, month2, day2);
	//判断第一个输入日期的是否为闰年
	or_year_flag = is_whether_leap(year);
	//计算第一个输入的日期是当前的第几天
	sum_days = sum_day(month, day);
	//判断第二个输入日期的是否为闰年
	or_year_flag2 = is_whether_leap(year2);
	//计算第二个输入的日期是当前的第几天
	sum_days2 = sum_day(month2, day2);
	//计算两个不同年份之间相差的天数
	year_intveral = interval_year_day(year, year2);
	//判断两个日期当年是否为闰年
	//如果是闰年 or_year_flag=1是闰年 不是为0 而且月份大于3才能1 不然 没输入到2月的日期就把2月多一天加上了
	if (or_year_flag == 1 && month >= 3) {
		sum_days += 1;  //天数加1
	}
	if (or_year_flag2 == 1 && month2>=3) {
		sum_days2 += 1;  //天数加1
	}
	//输出该日期是本年的第几天
	printf("--------------------------------------------------\n");
	printf("%d-%d-%d 是本年的第%d天\n", year, month, day, sum_days);
	printf("%d-%d-%d 是本年的第%d天\n", year2, month2, day2, sum_days2);
	printf("--------------------------------------------------\n");
	//计算同年相差的天数
	day_intveral = (sum_days - sum_days2) * -1;
	//总的相差的天数
	sum_intveral = day_intveral + year_intveral;
	//输出两个日期之间相差的天数
	printf("两个日期相差:%d天\n", sum_intveral);
}

/*计算当年的月份天数*/
int sum_day(int month, int day)
{
	//定义十二月的天数
	int month_day[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	//因为这个月的天数已经明确 所以只需要加到上个月份就行
	for (int i = 0; i < month-1; i++) {
		day += month_day[i];  //对天数进行累加
	}
	return day;
}
/*计算年份之间的天数*/
int interval_year_day(int year,int year2) 
{
	int day;
	day = (year2 - year) * 365;
	for (int i = year; i < year2; i++) {
		//把两个日期之间相差年份 中闰年的天数加上
		//i的初始是小的年份  循环到大的年份 正好是相差的年份
		if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
			day = day + 1;
		}

	}
	return day;
}
/*判断是否位闰年*/
int is_whether_leap(int year)
{
	int day = 0;
	//判断输入的年份是否为闰年 是
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
		day = 1;
	}
	return day;
}

运行结果:

C语言:输入两个日期,计算出两个日期之间相差的天(并且计算出两个日期分别是同年的第几天)!_第1张图片

你可能感兴趣的:(C语言,计算日期相差的天数,计算日期是本年的第几天,C语言函数)