為什么用switch語句,一樣的代碼順序不一樣輸出的結果也不一樣?
#include <stdio.h>
int main()?
{?
? ? /* 定義需要計算的日期 */
? ? int year = 2008;
? ? int month = 8;
? ? int day = 8;
? ? /*
? ? ?* 請使用switch語句,if...else語句完成本題
? ? ?* 如有想看小編思路的,可以點擊左側任務中的“不會了怎么辦”
? ? ?* 小編還是希望大家獨立完成哦~
? ? ?*/
? ? int sum=0;
? ? switch(month)
? ? {
? ? ? ? case 12:sum+=30;
? ? ? ? case 11:sum+=31;
? ? ? ? case 10:sum+=30;
? ? ? ? case 9:sum+=31;
? ? ? ? case 8:sum+=31;
? ? ? ? case 7:sum+=30;
? ? ? ? case 6:sum+=31;
? ? ? ? case 5:sum+=30;
? ? ? ? case 4:sum+=31;
? ? ? ? case 3:if(year%4==0&&year%100!=0||year%400==0)sum+=29;else sum+=28;
? ? ? ? case 2:sum+=31;
? ? ? ? case 1:sum+=day;
? ? ? ??
? ? }
? ? printf("%d年%d月%d日是該年的第%d天。",year,month,day,sum);
return 0;
}
#include <stdio.h>
int main()?
{?
? ? /* 定義需要計算的日期 */
? ? int year = 2008;
? ? int month = 8;
? ? int day = 8;
? ? /*
? ? ?* 請使用switch語句,if...else語句完成本題
? ? ?* 如有想看小編思路的,可以點擊左側任務中的“不會了怎么辦”
? ? ?* 小編還是希望大家獨立完成哦~
? ? ?*/
? ? int sum=0;
switch(month)
{
? ? ? ? case 1:sum+=day;
case 2:sum+=31;
? ? ? ? case 3:if(year%4==0&&year%100!=0||year%400==0)sum+=29;else sum+=28;
case 4:sum+=31;
case 5:sum+=30;
case 6:sum+=31;
case 7:sum+=30;
case 8:sum+=31;
case 9:sum+=31;
case 10:sum+=30;
case 11:sum+=31;
case 12:sum+=30;
? ? }
? ? printf("%d年%d月%d日這一天,是該年中的第%d天。",year,month,day,sum);
? ??
return 0;
}
2017-02-25
你和我開始犯的錯誤是一樣的,就是說他給的是一個月份,如8月,那么按照你的程序,是不是sum=0+31?
但實際上八月指的是一月到八月的總天數。
另外還要多加上day!
switch分支結構不管順序怎么變,只執行對應case值后的代碼塊的,所以結果也應該一樣。
希望對你有幫助。
2017-02-25
第一個程序輸出的是一到八月的天數221,用其他的數值驗證也沒有錯,是故意沒有加上break讓數值從上往下加的,程序應該是正確的不信你復制運行看看,但是第二個我只是把第一個的從12到1反過來從1到12驗證,但是得到的結果好像是150幾還是多少來著不記得了,反正就是不一樣