計算某天在當年是第幾天

2022-04-06 11:57:02 字數 1492 閱讀 6767

1.先貼我自己的**

1 #include2 #include3

4int

main() date;

11int num=0;12

inttue;

13date date;

1415 printf("

input the date:\n");

16 scanf("

%d/%d/%d

",&date.year,&date.month,&date.day);

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

))18 tue=29;19

else

20 tue=28;21

22switch(date.month-1)23

37 num=num+date.day;

38 printf("

%d/%d is the %dth day of %d!\n

",date.month,date.day,num,date.year);

39return0;

40 }

tue用來存放二月的天數,閏年為29天,非閏年為28天。某年為閏年的條件真是不容易記憶,能被4整除但是不能被100整除,或者能被400整除。

演算法核心為switch語句,月份為month時,把從1~month-1月的天數全部加起來。利用switch語句中當每個case後面沒有break語句時就順序執行的特點。編譯時有好多警告,提示缺少break語句,直接忽略。

2.答案書上有兩種方法,我只貼關鍵的演算法:

1

switch

(date.month)217

if(((date.year%4==0&&date.year%100!=0)||(date.year%400==0))&&date.month>=3

)18 num+=1;

第一種方法中,有乙個思想值得借鑑:先計算閏年和平年相同的部分,兩者的2月都有28天,先按2月有28天計算,全部計算完成之後,再把不同的那一天加上去。幾乎所有**都有一些邊緣的東西需要處理,像這個例子中的多出的那天,這些問題一般是將這些邊緣的東西先擱置不予處理,等處理完一般情況或者共性的情況之後,再把這些邊緣的東西加上去。

1

int day_tab[13]=;

2for(i=1;i)

3 num+=day_tab[i];

4 num+=date.day;

5if(((date.year%4==0&&date.year%100!=0)||(date.year%400==0))&&date.month>=3

)6 num+=1;

第二個演算法就簡潔多了,把每月的天數放到乙個陣列中來處理。把day_tab定義為13位,day_tab[0]=0,然後day_tab[i]就是第i月的天數,這個也是很值得效仿的。

計算輸入的是當年的第幾天

題目 輸入某年某月某日,判斷這一天是這一年的第幾天?1.程式分析 以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊 情況,閏年且輸入月份大於3時需考慮多加一天。1 include 2 include 34 int main 5 18 else 19 2223 計算基本的天...

陣列求,某年某月某天是當年的的第幾天

作 者 李家豪 完成日期 2013 年11月27日 版 本 號 v1.0 問題描述 定義乙個函式,其引數為年 月 日的值,返回這一天為該年的第幾天.要求在main函 數中輸入年月日,然後呼叫這個函式求值,並在main函式中輸出結果。樣例輸入 2013 10 31 樣例輸出 304 問題分析 incl...

計算某天是一年的第幾天

大致思路 輸入年月日 獲取1月1號到上個月月末的天數 加上輸入的日期值 注意 閏年且輸入月份大於3時需考慮多加一天 year input year n month input month n day input day n months 0,31,59,90,120,151,181,212,243,...