#include <stdio.h>
int main()
{
int year = 2008;
int month = 8;
int day = 8;
int sum;
switch(year%400==0||(year%4==0&&year%100!=0))
{
case 1:
if(month%2==0)
{
sum = ((month-1)-1)/2*31 + (((month-1)-1)/2-1)*30 + 31 + 29 + day;
}else
{
sum = (month-1)/2*31 + ((month-1)-1)/2*30 + 29 + day;
}
break;
case 0:
if(month%2==0)
{
sum = ((month-1)-1)/2*31 + (((month-1)-1)/2-1)*30 + 31 + 28 + day;
}else
{
sum = (month-1)/2*31 + ((month-1)-1)/2*30 + 28 + day;
}
break;
}
printf("%d年%d月%d日是该年的第%d天",year,month,day,sum);
switch中sum的表达式不对,看你的意思应该是想计算单数月的个数*31加上偶数月的个数*30,而且要抛出2月另作运算。就以当前为例,那么程序会进入到case为1的if语句对吧。这个时候,((month-1)-1)/2是等于3的,然而8月之前的大月有四个。再例如,考虑当month为9时,这是会进入case为0的else语句吧。这时(month-1)/2为4;但是9月前的大月有5个,1 3 5 7 8;其次((month-1)-1)/2为3(因为变量都是int类型,3.5会转成3),但是如果你把二月单一拿出来在后面+28;9月前的小月就只有4和6两个月,这也是个错误。 你要判断大月小月个数,还要把二月抛出来另外考虑,算法还蛮复杂的。因为我们的月份就很复杂,二月的天数因为年份的不同而不同外,八月和九月这两个相连的月还都是大月,所以判断是很复杂的。