判定2000~2500年中的每一年是否为闰年,并将闰年和闰年总数量输出
画了一个表示闰年的图,图中绿色表示闰年,这样就可以很明了的看出闰年的判断条件了。
刚开始按一般思路写了一个程序:
#include<stdio.h>
int main()
{
int year;
int n=0;
for(year=2000;year<=2500;year++)
{
if(year%4==0)
{
if(year%400==0)
{
printf("%d\t",year);
n++;
}
else
{
if(year%100!=0)
{
printf("%d\t",year);
n++;
}
}
}
}
printf("\n\nn=%d\n",n);
return 0;
}
然后发现把图中的绿色区域直接用判断条件表示出来就行了:
#include<stdio.h>
int main()
{
int year;
int n=0;
for(year=2000;year<=2500;year++)
{
if(year%400==0)
{
printf("%d\t",year);
n++;
}
if(year%4==0&&year%100!=0)
{
printf("%d\t",year);
n++;
}
}
printf("\n\nn=%d\n",n);
return 0;
}
中间两段很相近,于是还可以更简单一点:
#include<stdio.h>
int main()
{
int year;
int n=0;
for(year=2000;year<=2500;year++)
{
if(year%400==0||(year%4==0&&year%100!=0))
{
printf("%d\t",year);
n++;
}
}
printf("\n\nn=%d\n",n);
return 0;
}
在看了书上的分析之后,我突然想到一个问题,就是写这种需要多重判断的程序的时候,我往往会自然而然的想到多重嵌套的方式,但是这样的一层套一层的代码看起来很不舒服。在书上内容的启发之下,我想到了一种方法可以解决这种问题。
可以充分利用循环中的continue。以前总是满足一定的条件,然后进入执行步骤。现在可以利用continue把不满足条件的这次执行跳过去,岂不是很好!
也果然不出所料,这种尽量减少嵌套的方式代码是最短的,看起来也是最舒服的。
#include<stdio.h>
int main()
{
int year;
int n=0;
for(year=2000;year<2500;year++)
{
if(year%4!=0||(year%100==0&&year%400!=0))
continue;
printf("%d\t",year);
n++;
}
printf("\n\nn=%d\n",n);
return 0;
}