︶ㄣ痕迹の天涯 发表于 2013-12-6 18:08:00

输入年月日,输出星期几问题,各位大神速来,谢谢

请大神告知错哪了,可以正常运行,但结果不对啊

#include<stdio.h>
int main(void)
{
        int i,j,a,b,c,s=0;
        int q={0,31,29,31,30,31,30,31,31,30,31,30,31};
        int Q={0,31,28,31,30,31,30,31,31,30,31,30,31};
        printf("input abc:");
        scanf("%d%d%d",&a,&b,&c);
        if((a%4==0&&a%100>0)&&((a%100==0)&&(a%400!=0)))
        {
      printf("%d是闰年",a);
                for(i=(b-1);0<i&&i<12;i--)
                {s=s+q;
                   if(a%4==0&&a%100>0)       
                   switch(((a/4)-(a/100)/5+365*a+s+c)%7)
                   {
                           case 0:printf("星期一");break;
                           case 1:printf("星期二");break;
                           case 2:printf("星期三");break;
                     case 3:printf("星期四");break;
                           case 4:printf("星期五");break;
                           case 5:printf("星期六");break;
                           case 6:printf("星期日");break;
                   }
               }
        }
               
    else
        {
                printf("%d不是闰年",a);
      for(j=(b-1);j<12;j--)
                {s=s+Q;
                   if(a%4==0&&a%100>0)       
                   switch(((a/4)-(a/100)/5+365*a+s+c)%7)
                   {
                           case 0:printf("星期一");break;
                           case 1:printf("星期二");break;
                           case 2:printf("星期三");break;
                     case 3:printf("星期四");break;
                           case 4:printf("星期五");break;
                           case 5:printf("星期六");break;
                           case 6:printf("星期日");break;
                   }
               }
       
        }
   return 0;
}

maomingkun 发表于 2013-12-6 18:08:01

本帖最后由 maomingkun 于 2013-12-6 22:10 编辑

if((a%4==0&&a%100>0)&&((a%100==0)&&(a%400!=0)))你的这句代码有错误!
假设输入2000年,a%100>0为假,所以a%4==0&&a%100>0为假,所以条件不成立输出“不是闰年”,但2000年确实是闰年。

分析一下:
首先:a%4==0&&a%100>0的年份都是闰年
其次:a%100==0&&a%400==0的年份也都是闰年
最后:a%4==0&&a%100>0和a%100==0&&a%400==0只要满足其中一个就是闰年,所以用||(或逻辑运算符)连接两个表达式
正确的代码应该是:
if((a%4==0&&a%100>0)||(a%100==0&&a%400==0))
printf(“%d 是闰年!”,a);因为可以被400整除的数肯定能被100整除,所以代码可以简化为:
if((a%4==0&&a%100>0)|| a%400==0)
printf(“%d 是闰年!”,a);




maomingkun 发表于 2013-12-6 21:20:43

判断闰年的代码如下:

#include <stdio.h>

void main()
{
        int yeas,leap;
        scanf("%d",&yeas);
       

        if (yeas%4==0)    //能被4整除的数
        {
                if ((yeas%100==0)&&(yeas%400!=0))
                {
                        leap=0;
                }
                else
                {
                        leap=1;
                }
               
        }
        else//不能被4整除的数leap=0,不是闰年
        {
                leap=0;
        }


        if (leap)
        {
                printf("%d is a leap yeas!\n",yeas);
        }
        else
        {
                printf("%d is not a leap yeas!\n",yeas);
        }
       

}

bboysky 发表于 2013-12-7 03:50:23

可以先保存本地时间! 然后再把本地时间修改成要判断的时间! 然后取出星期几! 最后把本地时间恢复回来! 书上看的一个小技巧! 可以试一下哈!!!

牡丹花下死做鬼 发表于 2013-12-7 12:27:34

判断是不是闰年
int leap(int i)
{
        if(i%4 == 0 && i%100 != 100 || i%400 == 0)
                return 1;
        else
                return 0;
}

wangdemin 发表于 2013-12-8 00:03:52

xdgfdshgfjgfjghjk
页: [1]
查看完整版本: 输入年月日,输出星期几问题,各位大神速来,谢谢