我按照日期計算器的形式寫的不知道對不對,請求大家?guī)臀铱聪聦Σ粚?我自己沒發(fā)現(xiàn)問題
#include <stdio.h>
int main()
{
??? int year = 2008;
??? int month = 8;
??? int day = 8;
??? int sum;
??? switch(year%400==0||(year%4==0&&year%100!=0))
??? {
??????? case 1:
??????????? if(month%2==0)
??????????? {
??????????????? sum = ((month-1)-1)/2*31 + (((month-1)-1)/2-1)*30 + 31 + 29 + day;
??????????? }else
??????????? {
??????????????? sum = (month-1)/2*31 + ((month-1)-1)/2*30 + 29 + day;
??????????? }
??????????? break;
??????? case 0:
??????????? if(month%2==0)
??????????? {
??????????????? sum = ((month-1)-1)/2*31 + (((month-1)-1)/2-1)*30 + 31 + 28 + day;
??????????? }else
??????????? {
??????????????? sum = (month-1)/2*31 + ((month-1)-1)/2*30 + 28 + day;
??????????? }
??????????? break;
??? }
??? printf("%d年%d月%d日是該年的第%d天",year,month,day,sum);
2017-12-29
switch中sum的表達(dá)式不對,看你的意思應(yīng)該是想計算單數(shù)月的個數(shù)*31加上偶數(shù)月的個數(shù)*30,而且要拋出2月另作運算。就以當(dāng)前為例,那么程序會進(jìn)入到case為1的if語句對吧。這個時候,((month-1)-1)/2是等于3的,然而8月之前的大月有四個。再例如,考慮當(dāng)month為9時,這是會進(jìn)入case為0的else語句吧。這時(month-1)/2為4;但是9月前的大月有5個,1 3 5 7 8;其次((month-1)-1)/2為3(因為變量都是int類型,3.5會轉(zhuǎn)成3),但是如果你把二月單一拿出來在后面+28;9月前的小月就只有4和6兩個月,這也是個錯誤。 ?你要判斷大月小月個數(shù),還要把二月拋出來另外考慮,算法還蠻復(fù)雜的。因為我們的月份就很復(fù)雜,二月的天數(shù)因為年份的不同而不同外,八月和九月這兩個相連的月還都是大月,所以判斷是很復(fù)雜的。