乙個日期處於該年的第幾天 c語言實現

2021-07-30 10:43:37 字數 1645 閱讀 8146

覺得不同的解法還挺有意思的,就分享一下~

問題描述:輸入乙個日期,格式yyyy-mm-dd,判斷這個日期是當年的第幾天。建議使用switch。

方便起見,直接寫在主函式了。

思路一、沒有使用switch,用了迴圈,陣列儲存月份的最大天數,最後累加。

#include

int main()

; //平年的月份

int commonyear[12] = ;

printf("input date(yyyy-mm-dd):");

int year,month,day;

scanf("%d-%d-%d",&year,&month,&day); //沒有處理字元輸入。

//isleapyear - 是否是閏年。 invalidinput - 是否有錯誤輸入。

//發現gcc編譯器居然不支援bool。有說法是c++才支援bool型,覺得還是很神奇,以前沒遇到過。

int isleapyear = 0, invalidinput = 0;

if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))

//檢查年份

if(year > 9999)

//檢查月份

if(month <= 0 || month > 12)

//檢查天數,閏年則檢查learyear陣列,平年則檢查commonyear陣列.

if( (isleapyear && day <=0 || day > leapyear[month - 1])

||(!isleapyear && day <= 0 || day > commonyear[month - 1])

)//假設輸入都合法了,這裡沒有處理invalidinput

int result = 0;

//累加月份天數

int i = 0; //以及竟然不支援for迴圈內部宣告i

for(i = 0; i < month - 1; i++)

else

}//加上天數

result += day;

//輸出結果

printf("the date is in the %d day of the year.",result);

}

思路二:利用switch自動往下執行的特性,寫出簡潔的**:

#include

int main()

case

2: res += 31;

}printf("the date is in the %d day of the year\n",res);

printf("input 0 to try again,otherwise exit: ");//輸入0繼續測試,其他輸入會退出。

scanf("%d",&exit);

}}

因為switch如果沒有遇到break語句會繼續執行下乙個case的語句,利用這個特性,把月份逆序排下來。

期間遇到 在codeblocks上可以執行的**拷貝到vc上無法正常出結果 的問題,把year、month、day和res的宣告放到迴圈外部即可解決。

這個問題還可以再拓展一下,比如算出兩個日期的間隔天數,或者反過來求特定間隔天數的日期。

c語言計算日期為該年的第幾天。

函式功能 輸入日期並判斷日期輸入是否正確,以指標方式返回輸入值 pyear 為 年份指標 pmonth 為 月份指標 pday 為 日份指標 months 為 每月多少天陣列 void indata int pyear,int pmonth,int pday,int months 函式功能 判斷是否...

計算日期是該年中的第幾天

include struct date 定義乙個日期結構 定義乙個函式,計算該日期是第幾天 int daysofyear struct date day int main 定義乙個函式,計算該日期是第幾天 int daysofyear struct date day break case 2 bre...

題目 從鍵盤輸入乙個日期,判斷是該年的第幾天

首先我們需要了解一下什麼是閏年 判斷任意年份是否為閏年,需要滿足以下條件中的任意乙個 該年份能被 4 整除同時不能被 100 整除 該年份能被400整除。1 include 2 intmain 3 陣列 a 存放閏年每月的天數 7int b 12 陣列 b 存放平年每月的天數89 從鍵盤輸入日期 1...