我按照日期計算器的形式寫的不知道對不對,請求大家幫我看下對不對?我自己沒發現問題
#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的表達式不對,看你的意思應該是想計算單數月的個數*31加上偶數月的個數*30,而且要拋出2月另作運算。就以當前為例,那么程序會進入到case為1的if語句對吧。這個時候,((month-1)-1)/2是等于3的,然而8月之前的大月有四個。再例如,考慮當month為9時,這是會進入case為0的else語句吧。這時(month-1)/2為4;但是9月前的大月有5個,1 3 5 7 8;其次((month-1)-1)/2為3(因為變量都是int類型,3.5會轉成3),但是如果你把二月單一拿出來在后面+28;9月前的小月就只有4和6兩個月,這也是個錯誤。 ?你要判斷大月小月個數,還要把二月拋出來另外考慮,算法還蠻復雜的。因為我們的月份就很復雜,二月的天數因為年份的不同而不同外,八月和九月這兩個相連的月還都是大月,所以判斷是很復雜的。