c++关于switch case 中case问题

来源:百度知道 编辑:UC知道 时间:2024/07/13 05:19:00
下面是一个关于计算某年某月某天是这一年第几天的程序。想请高手具体帮忙分析下,为什么case是12然后11再10......,不能倒过来吗?
#include "iostream.h"
int main()
{
int year,month,date,numOfDay=0;
cout <<"请输入日期(eg.2005 2 28):";
cin >>year >>month >>date;
switch (month)
{
case 12:
numOfDay=numOfDay+30;
case 11:
numOfDay=numOfDay+31;
case 10:
numOfDay=numOfDay+30;
case 9:
numOfDay=numOfDay+31;
case 8:
numOfDay=numOfDay+31;
case 7:
numOfDay=numOfDay+30;
case 6:
numOfDay=numOfDay+31;
case 5:
numOfDay=numOfDay+30;
case 4:
numOfDay=numOfDay+31;
case 3:
numOfDay=numOfDay+((year%4==0 && year%100!=0)||(year%400==0)?29:28);
case 2:
numOfDay=numOfDay+31;
case 1:
numOfDay=numOfDay+date;
cout <<year <<"年" <<month <<"月" <<date <<"日是" <<year

》对本程序来说:不可以》》:
》原因(不懂hi我,随时恭候)》》:
对于有些程序可以倒过来,比如,课本上常见的根据成绩来判断成绩等级的那一串代码就可以倒过来。但对这一个程序来说,不可以。
在课本上我们都学过,一个程序一般上都是顺序执行的(函数调用或者用了goto转向语句的例外)。这个程序的算法便是妙用了这一思想。
执行完一个case语句后,如果没遇到break,程序会接下来顺序执行其他的case语句。
就说算2009年12月29日这一天是这一年的第几天来说吧。执行顺序是这样的:由于是12月份,以case 12为入口,先把11月的30天加到累计天数的numofday里,然后遇到执行case 11后面的语句,把10月份的31天加到numofday里,然后顺序执行其他的case语句,分别把9、8、7、6、5、4、3、2、1月份的天数累加到numofday里。执行到case 1时,把29加到numofday上,遇到break,跳出switch语句。
如果你打乱了顺序,比如,你把case 2放在了最前面:
case 2:
numOfDay=numOfDay+31;
case 12:
numOfDay=numOfDay+30;
case 11:
numOfDay=numOfDay+31;
case 10:
numOfDay=numOfDay+30;
case 9:
numOfDay=numOfDay+31;
case 8:
numOfDay=numOfDay+31;
case 7:
numOfDay=numOfDay+30;
case 6:
numOfDay=numOfDay+31;
case 5:
numOfDay=numOfDay+30;
case 4:
numOfDay=numOfDay+31;
case 3:
numOfDay=numOfDay+((year%4==0 && year%100!