請(qǐng)學(xué)帝看看哪里不對(duì)? 為什么不能累加
#include <stdio.h>
int main()
{
??? int year = 2008;
??? int month = 8;
??? int day = 8;
??? int sum = 0;
??? int i = 1;
??? switch(month)
??? {
??????? case 1 :sum==31;
??????? case 2 :sum+=29;
??????? case 3 :sum+=31;
??????? case 4 :sum+=30;
??????? case 5 :sum+=31;
??????? case 6 :sum+=30;
??????? case 7 :sum+=31;
??????? case 8 :sum+=31;break;
??????? case 9 :sum+=30;break;
??????? case 10 :sum+=31;break;
??????? case 11 :sum+=30;break;
??????? case 12 :sum+=31;break;
??????? default :;break;
??? }
??? if(year%4==0&&year%100!=0)
??? sum=sum+day;
??? else
??? sum=sum+day+i;
??? printf("%d年%d月%d日是該年中的第%d天",year,month,day,sum);
?return 0;
}
2016-06-03
理解你的思維,可是寫(xiě)反了,改為如下:
#include <stdio.h>
int main()?
{?
??? int year = 2008;
??? int month = 8;
??? int day = 8;
??? int sum = 0;
??? int i = 1;
??? 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 :sum+=28;
??????? case 2 :sum+=31;
??????? case 1:sum+=0;
??????? default :;break;
??? }
??? if(year%4==0&&year%100!=0)
??? sum=sum+day;
??? else
??? sum=sum+day+i;
??? printf("%d年%d月%d日是該年中的第%d天",year,month,day,sum);
?return 0;
}
2016-07-11
應(yīng)該是這樣吧
#include <stdio.h>
int main()
{
??? int year = 2008;
??? int month = 12;
??? int day = 8;
??? int sum = 0;
??? int i = 1;
??? 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 :sum+=28;
??????? case 2 :sum+=31;
??????? case 1:sum+=0;
??????? default :;break;
??? }
??? if((year%4==0&&year%100!=0)||year%400==0)
??? sum=sum+day+i;
??? else
??? sum=sum+day;
??? printf("%d年%d月%d日是該年中的第%d天",year,month,day,sum);
?return 0;
}
2016-06-04
month=8; ?進(jìn)入switch后就直接找case8了,然后break。就相當(dāng)于只算了一個(gè)8月份的天數(shù)。
2016-06-03
這道題中你對(duì)case語(yǔ)句后不加break;情況的理解有些偏差。
首先,我們先看看為什么結(jié)果不累加
你的程序結(jié)果為39,很明顯是31+8(day)得來(lái)的,那么這個(gè)31是怎么來(lái)的?有人可能理解為來(lái)自case 1:? ,但這里沒(méi)有break;? 即然程序到這里為什么沒(méi)有繼續(xù)執(zhí)行,而是跳出來(lái)了呢?很顯然這個(gè)31并不是這里的。那么我們看前面,因?yàn)閙outh=8,所以程序進(jìn)入swich內(nèi),應(yīng)該直接執(zhí)行case 8: 的語(yǔ)句,然后跳出來(lái),這樣就可以說(shuō)清了。
那為什么不是按照你的想法讓前8個(gè)疊加后再跳出呢,這就是理解的偏差問(wèn)題了。雖然咱們前面看到過(guò)這樣的知識(shí)點(diǎn):“在case子句后如果沒(méi)有break;會(huì)一直往后執(zhí)行一直到遇到break;才會(huì)跳出switch語(yǔ)句?!睂?shí)際上這句話的前提是“符合條件的正被執(zhí)行的case子句后如果沒(méi)有…………”,你程序中因?yàn)閙outh=8,所以程序進(jìn)入swich內(nèi),直接執(zhí)行case 8: 的語(yǔ)句,而不是case 1: 的,那也就用不上剛才提到的規(guī)則了。
希望對(duì)你有幫助!
?