鱼C论坛

 找回密码
 立即注册
查看: 2764|回复: 5

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

[复制链接]
发表于 2013-12-6 18:08:00 | 显示全部楼层 |阅读模式
5鱼币
请大神告知错哪了,可以正常运行,但结果不对啊

#include<stdio.h>
int main(void)
{
        int i,j,a,b,c,s=0;
        int q[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
        int Q[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        printf("input a  b  c:  ");
        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[i];
                   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[j];
                   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;
}

最佳答案

查看完整内容

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 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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);




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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);
        }
       

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-7 03:50:23 | 显示全部楼层
可以先保存本地时间! 然后再把本地时间修改成要判断的时间! 然后取出星期几! 最后把本地时间恢复回来! 书上看的一个小技巧! 可以试一下哈!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-8 00:03:52 | 显示全部楼层
xdgfdshgfjgfjghjk
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 03:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表