亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么用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;

}


正在回答

2 回答

你和我開始犯的錯誤是一樣的,就是說他給的是一個月份,如8月,那么按照你的程序,是不是sum=0+31?

但實際上八月指的是一月到八月的總天數。

另外還要多加上day!

switch分支結構不管順序怎么變,只執行對應case值后的代碼塊的,所以結果也應該一樣。

希望對你有幫助。

0 回復 有任何疑惑可以回復我~
#1

Hu丶0403 提問者

第一個程序輸出的是一到八月的天數221,用其他的數值驗證也沒有錯,是故意沒有加上break讓數值從上往下加的,程序應該是正確的不信你復制運行看看,但是第二個我只是把第一個的從12到1反過來從1到12驗證,但是得到的結果好像是150幾還是多少來著不記得了,反正就是不一樣
2017-02-25 回復 有任何疑惑可以回復我~
#2

程序媛ing 回復 Hu丶0403 提問者

上面從12月到一月那個代碼,由于month為8,所以程序跳到case 8:,然后執行下面的代碼,由于沒有break,所以計算機會默認一直到switch代碼塊結束或遇到break的這段代碼都會被執行。所以就是八月開始,31+30+31+30+31+29+31+8=221; 同樣的,下面一月到12月的代碼,從case 8開始加:31+31+30+31+30=153.
2017-02-25 回復 有任何疑惑可以回復我~
#3

Hu丶0403 提問者 回復 程序媛ing

哦!原來不是按照case后面那個順序讀的啊,只是自上而下讀的??!我知道了,謝謝啦
2017-02-25 回復 有任何疑惑可以回復我~
#4

Hu丶0403 提問者

非常感謝!
2017-02-25 回復 有任何疑惑可以回復我~
#5

程序媛ing 回復 Hu丶0403 提問者

沒事!
2017-02-25 回復 有任何疑惑可以回復我~
查看2條回復

第一個程序輸出的是一到八月的天數221,用其他的數值驗證也沒有錯,是故意沒有加上break讓數值從上往下加的,程序應該是正確的不信你復制運行看看,但是第二個我只是把第一個的從12到1反過來從1到12驗證,但是得到的結果好像是150幾還是多少來著不記得了,反正就是不一樣

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么用switch語句,一樣的代碼順序不一樣輸出的結果也不一樣?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號