·C语言 高手来,再线等谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/02 01:59:21
哪儿错了?为什么我的输出结果总是YES ?

#include "stdio.h"
#include "math.h"
void main()
{int year,leap;
scanf("%d",year);
if(year%400==0)leap=1;
else {if(year%4==0&&year%100==0)leap=0;else leap=1;}

if(leap==1)printf("YES");else printf("NO");

getch();
}

能被400整除不就等于既能被100整除有能被4整除吗?
所以if(year%400==0)和
if(year%4==0&&year%100==0)是等价的。也就是说那句else起到作用。所以此程序存在逻辑错误。
闰年的正确算法是:
能被四整除且不能被100整除的年 或 能被400整除的年
所以else语句应改为: else {
if(year%4==0&&year%100!=0)leap=1;
else leap=0;}

此外 scanf语句中year前少了一个地址符 &

#include "stdio.h"
void main()
{int year,leap=0;
scanf("%d",&year); /*这个缺了个&*/
if(year%400==0)
leap=1;
else if(year%4==0 && year%100!=0) /* 这儿要 ! 不然就是和上边一样了*/
leap=1;
else
leap=0;
if(leap==1)
printf("yes");
else
printf("no");
getch();
}

这个程序实现的功能应该是
判断所输入年份是否为闰年,是:输出YES;否:输出NO。
但是算法上存在问题,
问题出在这段程序上:
scanf("%d",year);----------year前加&

if(year%400==0)leap=1; ------------(1)
else
{if(

year%4==0&&year%100==0)leap=0;
\
这句话意思是被100整除,包含(1),
也就是说只有在year被100整