如果某一年的年份能被4整除,但是不能被100整除,那么这一年就是闰年,此外能被400整除的年份也是闰年。
我对这个问题一直没有弄清楚,最近经过仔细考量,发现自己以前对这个问题存在两个思维误区:
1.能被4整除,不能被100整除是闰年。那么能被4整除,也能被100整除是不是闰年?
2.“能被400整除”与“能被4整除,也能被100整除”是什么关系?
首先解决第一个疑惑:
能被4整除也能被100整除:100,200,300,400……
能被400整除:400,800……
由此可见能被4整除也能被100整除可能是闰年,也可能不是闰年。
存在这个疑惑的时候,很容易写成#include<stdio.h>
int main(void)
{
int year;
printf("请输入一个年份:");
scanf("%d",&year);
if(year%4==0)
{
if(year%100!=0)
{
printf("是闰年!\n");
}
else if(year%400==0)
{
printf("是闰年!\n");
}
else
{
printf("不是闰年!\n");
}
}
else if(year%400==0)
{
printf("是闰年!\n");
}
else
{
printf("不是闰年!\n");
}
return 0;
}
让后解决第二个疑问:
能被400整除的数必定能被4和100整除,但是能被4和100整除的数就不一定能被400整除了。意思就是说能被400整除的数是能被4和100整除的数的一种情况;#include<stdio.h>
int main(void)
{
int year;
printf("请输入一个年份:");
scanf("%d",&year);
if(year%4==0)
{
if(year%100!=0)
{
printf("是闰年!\n");
}
else if(year%400==0)
{
printf("是闰年!\n");
}
else
{
printf("不是闰年!\n");
}
}
else if(year%400==0)
{
printf("是闰年!\n");
}
else
{
printf("不是闰年!\n");
}
return 0;
}
else if(year%400==0)
{
printf("是闰年!\n");
}
纠正这两个误区之后的代码应该是这样的:
#include<stdio.h>
int main(void)
{
int year;
printf("请输入一个年份:");
scanf("%d",&year);
if(year%4==0)
{
if(year%100!=0)
{
printf("是闰年!\n");
}
else if(year%400==0)
{
printf("是闰年!\n");
}
else
{
printf("不是闰年!\n");
}
}
else
{
printf("不是闰年!\n");
}
return 0;
}
这个问题,经过我反复思考之后,我认为就是:“能被4整除的年份里,不能被100或者能被400整除的年份就是闰年。”这个意思,但是按照题目所表述“如果某一年的年份能被4整除,但是不能被100整除,那么这一年就是闰年,此外能被400整除的年份也是闰年。”我真的觉得有歧义。但是为什么会导致这些错误理解,我也不清楚,不知道是题目中存在语病还是我自己思维问题。