闰年C计划

闰年C计划,c,C,我想写一个C代码,用户可以给出一个4位数的年号,比如:2018 程序将显示其是否为闰年。但我想补充一步。 如果2019年不是闰年,程序应该告诉我下一个闰年是哪一年 #include <stdio.h> int main() { int year; printf("Enter a year: "); scanf("%d", &year); // leap year if perfectly visible by 4

我想写一个C代码,用户可以给出一个4位数的年号,比如:2018 程序将显示其是否为闰年。但我想补充一步。 如果2019年不是闰年,程序应该告诉我下一个闰年是哪一年

#include <stdio.h>
int main() {
   int year;
   printf("Enter a year: ");
   scanf("%d", &year);
   // leap year if perfectly visible by 400
   if (year % 400 == 0) {
      printf("%d is a leap year.", year);
   }
   // not a leap year if visible by 100
   // but not divisible by 400
   else if (year % 100 == 0) {
      printf("%d is not a leap year.\n", year);
   }
   // leap year if not divisible by 100
   // but divisible by 4
   else if (year % 4 == 0) {
      printf("%d is a leap year.\n", year);
   }
   // all other years are not leap year
   else {
      printf("%d is not a leap year.\n", year);
   }
   year+=1;
   printf("%d is the next leap year:\n", year);

      return 0;
}
#包括
int main(){
国际年;
printf(“输入年份:”);
scanf(“%d”和“年”);
//闰年,如果完全可见400
如果(年份%400==0){
printf(“%d是闰年。”,年);
}
//如果100岁就能看到,那就不是闰年了
//但不能被400整除
否则如果(年份%100==0){
printf(“%d”不是闰年。\n“,年);
}
//闰年如果不能被100整除
//但是可以被4整除
否则如果(第%4年==0){
printf(“%d”是闰年。\n“,年);
}
//其他年份都不是闰年
否则{
printf(“%d”不是闰年。\n“,年);
}
年份+=1;
printf(“%d是下一个闰年:\n”,年份);
返回0;
}
您应该:

  • 提取例程以判断一年是否为闰年
  • 使用循环查找下一个闰年
  • #包括
    整数是闰年(整数年){
    如果(年份%400==0){
    返回1;
    }
    否则如果(年份%100==0){
    返回0;
    }
    否则如果(第%4年==0){
    返回1;
    }
    否则{
    返回0;
    }
    }
    int main(){
    国际年;
    printf(“输入年份:”);
    scanf(“%d”和“年”);
    如果(是闰年){
    printf(“%d是闰年。”,年);
    }
    否则{
    printf(“%d”不是闰年。\n“,年);
    //寻找下一个闰年
    而(!是闰年){
    年份++;
    }
    printf(“%d是下一个闰年:\n”,年份);
    }
    返回0;
    }
    
    您可以组合您的条件,以避免重复“是闰年”部分。完成后,相对容易找到下一个4的倍数,并进行相反的检查,以确定是否需要调整:

    int main() {
        unsigned int year;
        printf("Enter a year: ");
        scanf("%u", &year);                          // WARNING: No error detection or handling!!!
    
        if(
           (year % 400 == 0) ||                      // leap year if divisible by 400, or
           ( (year % 4 == 0) && !(year % 4 == 0) )   // divisible by 4 but not divisible by 100
          )
        {
            printf("%d is a leap year.", year);
        } else {
            printf("%d is not a leap year.\n", year);
        }
        year = (year + 4) & ~3;                       // year = next highest multiple of 4
        if(
           (year % 100 == 0)  &&                      // Non-leap year if divisible by 100 and
           !(year % 400 == 0)                         // not divisible by 400
          )
        {
          year += 4;                                
        }
        printf("%d is the next leap year.\n", year);
        return 0;
    }
    

    请注意,这仅适用于最近几年。处理历史日期(1929年之前?)的正确代码很难编写,因为不同的国家/地区在不同的时间采用闰年(请参见)。

    首先创建一个函数,检查特定年份是否为闰年。它应该返回一个布尔结果。然后你可以通过任何一年你喜欢的功能来检查它。例如,如果输入是
    2019
    ,那么您可以添加一个,然后使用
    2020
    (或
    2021
    ,或
    2022
    等)再次调用它。谢谢您的回答。我对编程非常陌生,我应该在代码的哪一部分使用循环?提前谢谢,循环寻找下一个闰年是个很糟糕的主意。四舍五入到4的下一个倍数,必要时进行更正:
    year=(year+3)和~3;如果(年份%100==0)年份+=4@phuclv循环可能不好,但我不同意“非常”不好,因为循环最多只能运行7次。@MikeCAT但每个循环都需要许多模运算,这些运算非常昂贵。谢谢大家,我知道了。非常感谢你,你对我说得很清楚。
    
    int main() {
        unsigned int year;
        printf("Enter a year: ");
        scanf("%u", &year);                          // WARNING: No error detection or handling!!!
    
        if(
           (year % 400 == 0) ||                      // leap year if divisible by 400, or
           ( (year % 4 == 0) && !(year % 4 == 0) )   // divisible by 4 but not divisible by 100
          )
        {
            printf("%d is a leap year.", year);
        } else {
            printf("%d is not a leap year.\n", year);
        }
        year = (year + 4) & ~3;                       // year = next highest multiple of 4
        if(
           (year % 100 == 0)  &&                      // Non-leap year if divisible by 100 and
           !(year % 400 == 0)                         // not divisible by 400
          )
        {
          year += 4;                                
        }
        printf("%d is the next leap year.\n", year);
        return 0;
    }