#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;
}
理解你的思维,可是写反了,改为如下:
#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;
}
应该是这样吧
#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;
}
month=8; 进入switch后就直接找case8了,然后break。就相当于只算了一个8月份的天数。
这道题中你对case语句后不加break;情况的理解有些偏差。
首先,我们先看看为什么结果不累加
你的程序结果为39,很明显是31+8(day)得来的,那么这个31是怎么来的?有人可能理解为来自case 1: ,但这里没有break; 即然程序到这里为什么没有继续执行,而是跳出来了呢?很显然这个31并不是这里的。那么我们看前面,因为mouth=8,所以程序进入swich内,应该直接执行case 8: 的语句,然后跳出来,这样就可以说清了。
那为什么不是按照你的想法让前8个叠加后再跳出呢,这就是理解的偏差问题了。虽然咱们前面看到过这样的知识点:“在case子句后如果没有break;会一直往后执行一直到遇到break;才会跳出switch语句。”实际上这句话的前提是“符合条件的正被执行的case子句后如果没有…………”,你程序中因为mouth=8,所以程序进入swich内,直接执行case 8: 的语句,而不是case 1: 的,那也就用不上刚才提到的规则了。
希望对你有帮助!