1.先貼我自己的**
1 #include2 #include34int
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.答案書上有兩種方法,我只貼關鍵的演算法:
1switch
(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天計算,全部計算完成之後,再把不同的那一天加上去。幾乎所有**都有一些邊緣的東西需要處理,像這個例子中的多出的那天,這些問題一般是將這些邊緣的東西先擱置不予處理,等處理完一般情況或者共性的情況之後,再把這些邊緣的東西加上去。
1int 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,...