我按照日期计算器的形式写的不知道对不对,请求大家帮我看下对不对?我自己没发现问题

来源:4-16 分支结构之switch语句

Joooe

2017-12-29 19:39

#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);

写回答 关注

1回答

  • 划水人
    2017-12-29 21:57:43
    已采纳

    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两个月,这也是个错误。  你要判断大月小月个数,还要把二月抛出来另外考虑,算法还蛮复杂的。因为我们的月份就很复杂,二月的天数因为年份的不同而不同外,八月和九月这两个相连的月还都是大月,所以判断是很复杂的。

    Joooe

    666,说得很好,写这么多辛苦了,非常感谢!!!

    2017-12-30 17:38:39

    共 1 条回复 >

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926025 学习 · 20793 问题

查看课程

相似问题