因爲自己初學,代碼有很多地方待優化!
歡迎大家指點!
#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;
}
運行結果: