第一个程序
#include <stdio.h>
main()
{
int n=0,y;
for(y=2000;y<=3000;y++)
{
if(y%4==0&&y%100!=0||y%400==0)
printf("%5d",y);
n++;
if(n%10==0)
printf("\n");
}
}
第二个程序
#include<stdio.h>
main()
{int i,k=0;
for(i=2000;i<=3000;i++)
{
if(i%4==0&&i%100!=0||i%400==0)
{printf("%5d",i);
k++;
}
if(k%10==0)
printf("\n");
}
}
为什么把 %10==0 这个放到花括号的外面呀
if()
{
。。。。
}
判断成立后运行花括号中所有的语句
如果不用括号括起来
那么 判断完之后,就只运行 紧接着的那一句
程序一:
等效代码
void main()失败的原因是if后面没有括号,那么每次循环n都会增加1
都会判断打印换行
最终就是如果是闰年就打印年份,每十年就换一次行
可以预见其结果将会是
2000 2004 2008
2012 2016 2020
2024 2028
2032 2036 2030
........
而程序二的k在判断闰年的括号内,每次闰年k才增加1
但是判断是否满10个闰年,打印回行是在括号外的,没次循环都会执行
每是个闰年输出4个换行,所以也是不对的
可以预见其结果是
2000 2004 2008 2012 2016 2020 2024 2028 2032 2036
2040 2044 .....
......
正确的做法是:
main()
正确的做法应该将
printf("%5d",i);
k++;
if(k%10==0)
printf("\n");
都放在if(i%4==0&&i%100!=0||i%400==0)语句的后后边的括号内
程序一,错在if(i%4==0&&i%100!=0||i%400==0)后面没有括号
相当于只用括号括住printf("%5d",i);这一句
程序二,错在虽然为if(i%4==0&&i%100!=0||i%400==0)添加了括号
但是括的内容不够,只有printf("%5d",i);k++;两句