Я сделал программу с помощью C, чтобы найти, является ли вводимый год високосным годом или нет. Но к сожалению не работа хорошо. Это говорит, что год является прыжком и в предыдущем году не является прыжком.
#include<stdio.h>
#include<conio.h>
int yearr(int year);
void main(void)
{
int year;
printf("Enter a year:");
scanf("%d",&year);
if(!yearr(year))
{
printf("It is a leap year.");
}
else
{
printf("It is not a leap year");
}
getch();
}
int yearr(int year)
{
if((year%4==0)&&(year/4!=0))
return 1;
else
return 0;
}
После чтения комментариев я отредактировал свое кодирование как:
#include<stdio.h>
#include<conio.h>
int yearr(int year);
void main(void)
{
int year;
printf("Enter a year:");
scanf("%d",&year);
if(!yearr(year))
{
printf("It is a leap year.");
}
else
{
printf("It is not a leap year");
}
getch();
}
int yearr(int year)
{
if((year%4==0)
{
if(year%400==0)
return 1;
if(year%100==0)
return 0;
}
else
return 0;
}
Ваша логика определения високосного года неверна. Это должно помочь вам начать (из Википедии):
if year modulo 400 is 0
then is_leap_year
else if year modulo 100 is 0
then not_leap_year
else if year modulo 4 is 0
then is_leap_year
else
not_leap_year
x по модулю y
означает остаток от x
, деленный на y
. Например, 12 по модулю 5 равно 2.
Проблема вашего кода в том, что вы возвращаете ненулевое значение из yearr
, если считаете, что год високосный. Поэтому вам не нужно !
в операторе if.
int isLeapYear(int year)
{
return (year % 400 == 0) || ( ( year % 100 != 0) && (year % 4 == 0 ));
}
if(year%400 ==0 || (year%100 != 0 && year%4 == 0))
{
printf("Year %d is a leap year",year);
}
else
{
printf("Year %d is not a leap year",year);
}
Измените его, как указано выше. Прочтите также это .
Из статьи Википедии о Високосном году :
if (year modulo 4 is 0) and (year modulo 100 is not 0) or (year modulo 400 is 0)
then is_leap_year
else
not_leap_year
http://www.wwu.edu/depts/skywise/leapyear.html
Правила високосного года
Каждый год существует високосный год, число делится на четыре - за исключением лет, которые делятся на 100 и не делятся на 400. Вторая часть правила действует столетие годы. Например; столетие 1600 и 2000 годы високосные годы, но вековые годы 1700, 1800 и 1900 - нет. Этот означает, что трижды из каждых четыреста лет восемь лет между високосными годами.