各位程式猿/媛們,來用程式碼算一算在這個世界上活了多少天吧

zhs1994發表於2018-08-28

為了提升小程式的使用者體驗,不讓使用者做過多的輸入,我們引入C語言中的<time.h>這個標頭檔案,讓程式自動讀取本機時間,使用者只需要輸入自己的生日,即可獲悉自己的存活天數。

首先介紹一下<time.h>的部分用法:

與日期和時間相關的資料結構

由此可知,tm是一個結構體,裡面的一系列成員即是與本機時間相關的引數。 需要注意的是,tm_year並不是實際的公元紀年,tm_year+1900才是實際的公元紀年,tm_mon也不是實際的月份,tm_mon+1才是實際的月份。例如,今天是2018年8月13日,tm_year的實際值是118,tm_mon的實際值是7。

下面我們嘗試列印一下本機時間,裡面的部分程式碼是獲取本機時間的固定形式。

下面進入核心演算法部分:

整個小程式雖然只有一行輸入和一行輸入,裡面設計的內容卻複雜的很。需要涉及閏年的問題,(year%4==0&&year%100!=0||year%400==0)為真的即為閏年,閏年的2月有29天。

上程式碼:

為了體現整個思路的流暢性,我幾乎將所有的程式碼都放到了主函式中,請大家見諒。

由上述程式碼可知,我將天數的計算分成了三部分,一部分是前向天數,一部分是中間天數,一部分是後向天數。所謂的前向天數是指出生日期當年剩餘的天數,例如出生日期為1999年6月18日,則前項天數為自1999年6月19日0時起至1999年12月31日24時止的總天數;後向天數是指本機日期當年已經經過的天數;例如本機時間為2018年8月13日,則後向天數為自2018年1月1日0時起至2018年8月13日24時止的總天數。而中間天數是指間隔年的所有天數,舉個例子,1998年3月2日和2000年6月18日,間隔年就是1999年這一整年;若是1998年3月2日和1999年6月18日,則沒有間隔年,只有前向天數和後向天數。間隔年若為閏年則天數加上366,間隔年若為正常年份則天數加上365。此外,在前向天數和後向天數的計算中,也要注意考慮閏年和正常年份,以及2月這個特殊的月份。

最後為大家展示一下實驗結果:

人生不過三萬天,你有多少的時間虛度了,又有多少的時間用來敲了程式碼,又有多少的時間陪了家人和朋友。希望各位程式猿/媛們可以拿出更多的時間做更有意義的事。共勉。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31546605/viewspace-2213010/,如需轉載,請註明出處,否則將追究法律責任。

相關文章