Как найти високосный год программно в C

Я сделал программу с помощью 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;
}
8
задан Rob 30 January 2013 в 06:34
поделиться

6 ответов

Ваша логика определения високосного года неверна. Это должно помочь вам начать (из Википедии):

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.

14
ответ дан 5 December 2019 в 04:27
поделиться

Проблема вашего кода в том, что вы возвращаете ненулевое значение из yearr, если считаете, что год високосный. Поэтому вам не нужно ! в операторе if.

2
ответ дан 5 December 2019 в 04:27
поделиться
int isLeapYear(int year)
{
   return (year % 400 == 0) || ( ( year % 100 != 0) && (year % 4 == 0 ));
}
6
ответ дан 5 December 2019 в 04:27
поделиться
 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);
    }

Измените его, как указано выше. Прочтите также это .

1
ответ дан 5 December 2019 в 04:27
поделиться

Из статьи Википедии о Високосном году :

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
3
ответ дан 5 December 2019 в 04:27
поделиться

http://www.wwu.edu/depts/skywise/leapyear.html

Правила високосного года

Каждый год существует високосный год, число делится на четыре - за исключением лет, которые делятся на 100 и не делятся на 400. Вторая часть правила действует столетие годы. Например; столетие 1600 и 2000 годы високосные годы, но вековые годы 1700, 1800 и 1900 - нет. Этот означает, что трижды из каждых четыреста лет восемь лет между високосными годами.

1
ответ дан 5 December 2019 в 04:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: