项目场景:
编写程序,输出从公元1000年至2100年所有闰年的年号。要求每输出15个年号换一行。判断公元年是否为闰年的条件是公元年数满足:
① 能被4整除,而不能被100整除;
② 能被400整除。
问题描述:
先看一下代码
# include <stdio.h>
int main ()
{
int year,i=0;
for (year=1000; year<=2100; year++)
{
if ( year % 400 == 0 || year % 4 == 0 && year % 100 !=0)
{
printf("%d ",year);
i++;
}
if (i%15 == 0)
{
printf("\n");
}
}
return 0;
}
# include <stdio.h>
int main ()
{
int year,i=0;
for (year=1000; year<=2100; year++)
{
if ( year % 400 == 0 || year % 4 == 0 && year % 100 !=0)
{
printf("%d ",year);
i++;
if (i%15 == 0)
{
printf("\n");
}
}
}
return 0;
}
这两段代码乍一看没啥区别,实际上区别也不大,就是一个if在if内,一个if在if外(我没有套娃/doge)
if在if内的正常输出答案,if在if外的则从空一行变成了空四行。
错误
正确
原因分析:
用试数法测试错误代码
由于i = 0,0%任何数为0,所以在1004(第一个闰年)来之前会有四次换行
到1060年刚好15,进行换行。同样的,在1064年之前已知为15%15=0,会进行四次换行。
一个小小的if的位子会导致奇奇怪怪的结果。。。
要注意。