我必須用C語言編寫一個程序,該程序給定一天的名字,返回本月的所有日期。如何才能找出本月某一天的所有日期?
例如,如果輸入的是「星期日」的輸出應該是:5,12,19,26
(這是日(星期日)將在本月底。)
是否有任何人有任何想法如何做到這一點?我嘗試了很多。
我必須用C語言編寫一個程序,該程序給定一天的名字,返回本月的所有日期。如何才能找出本月某一天的所有日期?
例如,如果輸入的是「星期日」的輸出應該是:5,12,19,26
(這是日(星期日)將在本月底。)
是否有任何人有任何想法如何做到這一點?我嘗試了很多。
您可以使用time()函數獲取當前時間。
然後使用localtime()函數獲取包含當前時間的信息(年,月,日,...)的struct(struct tm)。
從「struct tm」獲取tm_mday和tm_wday。使用這些字段來確定下一個或上一個星期日。例如如果tm_mday是12,而tm_wday是3(星期三),那麼我們現在是本月9號是星期日(12-3 = 9)。從這個數字簡單地加上或減去7來獲得所有其他星期日。
的#include
你會得到什麼錯誤?我看到那天並沒有被定義。 – Patrick 2010-09-01 15:35:17
你也需要知道它給定的一年嗎?或者這僅僅是今年?如果你需要知道它的任何一年,你可以做一個「每月幾天」的枚舉,有一個爲閏年,一個爲非閏年。
你只需要知道在一週中的哪一天開始一年(即:「星期一」,「星期二」,等等)
你,至少,對任何給定的每月5日,所以,你可以有一個固定長度的整數數組。
你知道公曆不斷重複每個年,並且,如果X年開始一天「Y」,那麼,今年X + 1將一天開始(「Y」 + 1) %7如果x不是閏年,如果是閏年,則以天(「Y」+ 2)開始。 可以給你任何一年的第一次約會,並且知道任何一年的所有月份有多少天,你可以很容易地得到該月份的開始日期(「星期一」等)。
然後,所有你需要做的,是一樣的東西
int offset = 0;
int i;
while (myDate + offset != monthStartingDate) {
offset++;
}
i = offset + monthStartingDate;
(指明MyDate是星期幾的數量,並且monthStartingDate是星期幾的該月的第一天數)
當你走出那個循環時,你將會有第一次發生,然後,你只需加7,直到我超出月份界限。
您可以將每個我入陣..
int res[5] = {0,0,0,0,0}
for (; i < daysOfMonth(month, year); i += 7) {
int res[i/7] = i;
}
,那麼你只返回水庫。
哦,我dind't知道你能使用最新功能:PI想鍛鍊; Tibial的想法練C:從輸入P
Bu,當我寫回答的時候,問題是另一回事。這就像「給予一個月和一週的一天......」Blah。 – Marco 2010-09-01 12:59:05
1)取一個字符串(工作日名稱)(使用2)將它轉換爲一個數字(使用循環和strcmp
在平日表格中找到它的索引),將0分配給星期天,1分配給星期一...
3)獲取當前時間time
功能,並將其與localtime
功能
4)轉換爲tm
結構從tm
結構計算的第一天,在給定工作日的當月
first_mday_of_given_wday = (tm_struct.tm_mday + given_wday - tm_struct.tm_wday + 6) % 7 + 1
5)查明當前有多少天。要做到這一點:
tm_mday
和0到您的tm
結構tm_isdst
複製結構的重複(看上個月的1 tm_mon
tm_year
!由圖1和設置tm_mon
爲1)time_t
與mktime
功能和計算差(只是減去這些time_t
值),從秒轉換結果到幾天(除以b收率60 * 60 * 24)6)運行的環路雖然計算範圍:
for (i = first_mday_of_given_wday; i <= num_days_in_month; i += 7) printf("%d, ", i)
第五步驟可以在某些情況下被省略。我們知道一個月可以有28到31天。如果當月的任何假設天數29,30,31不能爲給定的工作日,我們可以假設當前月份有28天。
所以簡單 - 假設first_mday_of_given_wday
大於3,我們在本月有28天,否則計算如第5步所示的數字。
您可以告訴我們您嘗試過什麼,以便我們更輕鬆地爲您提供幫助。 – 2010-09-01 12:30:29
@ prateeksaluja20僅僅是當前月份,還是需要一個月份名稱作爲輸入? – Stephen 2010-09-01 12:34:07
它只會顯示 當前月份的日期。 – PrateekSaluja 2010-09-01 12:40:01