输入年月日,输出星期几问题,各位大神速来,谢谢
请大神告知错哪了,可以正常运行,但结果不对啊#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 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);
判断闰年的代码如下:
#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);
}
} 可以先保存本地时间! 然后再把本地时间修改成要判断的时间! 然后取出星期几! 最后把本地时间恢复回来! 书上看的一个小技巧! 可以试一下哈!!! 判断是不是闰年
int leap(int i)
{
if(i%4 == 0 && i%100 != 100 || i%400 == 0)
return 1;
else
return 0;
} xdgfdshgfjgfjghjk
页:
[1]