C語言:輸入兩個日期,計算出兩個日期之間相差的天(並且計算出兩個日期分別是同年的第幾天)!

因爲自己初學,代碼有很多地方待優化!

歡迎大家指點!

#include<stdio.h>
/*計算當年的月份天數*/
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;
}

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章