這道題有幾種方法,可以直接用陣列做,也可以呼叫函式來解決。
這道題有考到陣列,迴圈,邏輯表示式,等基礎知識。
並不是很難,只要釐清思路。
唯一值得注意的地方是對閏年的判斷,解決閏年,這個問題就會簡單很多。
方法1:陣列累加法求天數
思路:1st:定義乙個長度為12的整型陣列,將每個月的天數放入這12個陣列元素中去。
2ed:定義整型變數分別代表 年,月, 日,還有有用與迴圈的變數,和累加的容器(乙個用於儲存的變數)
3rd:從鍵盤輸入年月日的資料,賦給年月日變數。
4th:用邏輯表示式分出閏年的情況,並將閏年的a改為29;
最後我們進行累加,然後輸出累加值要加上輸入的天數。
下面貼出我的操作**
include int main();
int years,months,days,i,j=0,flag = 1;
printf("請輸入年月日來判斷\n");
scanf("%d%d%d",&years,&months,&days);
if(years%4==0&&years%100!=0||years%400==0)
for(i=0;i但是,我們並不能避免人們輸入錯誤的月份的日子。或是提示錯誤後依舊給出諸如第378天的數子。
我們應該怎麼辦呢?
方法是我們設乙個整形作為標記,將標記的初始為1,若是月份數超過12,日子超過31,便把標記賦為0;
最後我們把輸出日數放到乙個if語句中,就可以遮蔽在錯誤的月份和日數中輸出天數。
下面給出我的操作**
#include int main();
int years,months,days,i,j=0,flag = 1;//j為累加容器,flag為標記//
printf("請輸入年月日來判斷\n");
scanf("%d%d%d",&years,&months,&days);
if(years%4==0&&years%100!=0||years%400==0)//判斷是否為閏年//
if(months>12||days>31)//如遇到輸入錯誤,則把標記便為假,就遮蔽了天數的輸出//
for(i=0;i現在,我們來看利用呼叫函式的方法來解決這個問題。
月份仍然是關鍵,我們定義乙個子函式,以它來實現月份的累加,
我們在子函式內定義乙個陣列,仍然把月份的天數放在內,
這裡只需要乙個簡單的迴圈,將裡面的元素累加,
結束後再把累加的天數作為返回值帶回主函式
這樣我們在主函式內呼叫這個月份累加函式就可以完成,
如果是閏年,則將日加以即可.
下面給出我的操作**
#include int main()
printf("這是第%d天",leijia(months)+days);
}int leijia(int a)
; for(i=0;i這個**並不能阻止對月份的月份與日子的錯誤輸入,大家可以自己想想如何阻止錯誤的輸入,比如用上面的標記法。
根據年月日判斷這一年第幾天
演算法描述 輸入某年某月某日,判斷這一天是這一年的第幾天?輸入格式 輸入三個整數,分別代表 年 月 日。輸出格式 乙個整數,代表這一天是這一年的第幾天。樣例資料輸入 2018 3 5 樣例資料輸出 65思路 本題要做到容錯的話,需要對輸入的年月日進行判斷,看其值是否符合,例如 0 2 3 2018 ...
C語言 鍵盤輸入年月日,計算這一天是這一年的第幾天
對一維字串陣列按照字典順序排序輸出 c語言簡單練習題之鍵盤輸入乙個字元陣列,將其中的大寫字母刪除 比如輸入20201010,計算10號這一天是2020年的第幾天 首先要考慮這一年是平年還是閏年,其次考慮所有的月份有多少天,最後是考慮怎麼去把所有的天數加在一起。平年的二月份有28天,閏年的二月有29天...
判斷輸入的年月日是哪一天
def whichday y,m,d 每個月都是多少天 mlist 31 28,31 30,31 30,31 31,30 31,30 31 sum 0 如果是9月25號,算出來前8個月有多少天 for i in range m 1 sum mlist i 把9月份的那幾天也加上 如果是閏年並且月份大...