c语言 闰年平年问题(1800~2800)

输入一个 1800~2800 之间的整数作为年份,判断该年份是否为闰
年。年份符合下列条件之一者为闰年:
① 能被 4 整除且不能被 100 整除;
② 能被 400 整除。

#include 
main()
{
int year,flag;
printf("请输入年份:");
【1】;
【2printf("年份超出范围。"); 
else
{
if(year%4==0)
{
【3】
{
if(year%400==0)
flag=1;
【4】
flag=0;
} 
else5】;
}
else6】; 
【7printf("%d 是闰年。\n",year);
else
printf("%d 不是闰年。\n",year);
} 
}


按题目填空如下,供参考:

#include <stdio.h>
int main()
{
    int year, flag;
    printf("请输入年份:");
    scanf("%d", &year);   //【1】;
    if (year < 1800 || year>2800)//【2】
        printf("年份超出范围。");
    else
    {
        if (year % 4 == 0)
        {
            if (year % 100 == 0)//【3】
            {
                if (year % 400 == 0)
                    flag = 1;
                else           //【4】
                    flag = 0;
            }
            else
                flag = 1;//【5】;
        }
        else
            flag = 0;   //【6】;
        if (flag)  //【7】
            printf("%d 是闰年。\n", year);
        else
            printf("%d 不是闰年。\n", year);
    }
}

该回答引用GPTᴼᴾᴱᴺᴬᴵ
以下是修改后的代码:

#include <stdio.h>

int main() {
    int year, flag = 0;
    printf("请输入年份:");
    scanf("%d", &year);

    if (year < 1800 || year > 2800) {
        printf("年份超出范围。");
    } else {
        if (year % 4 == 0) {
            if (year % 100 != 0) {
                flag = 1;
            } else {
                if (year % 400 == 0) {
                    flag = 1;
                }
            }
        }
        if (flag) {
            printf("%d 是闰年。\n", year);
        } else {
            printf("%d 不是闰年。\n", year);
        }
    }
    return 0;
}


修改说明:

  1. 加入输入语句 scanf("%d", &year);,读入用户输入的年份。
  2. 判断用户输入的年份是否在合法范围内。
  3. 判断是否能被 4 整除,如果可以继续执行下一步;否则直接输出不是闰年。
  4. 如果能被 400 整除,说明是闰年,将 flag 设为 1。
  5. 否则说明不是闰年,将 flag 设为 0。
  6. 如果不能被 4 整除,说明不是闰年,将 flag 设为 0。
  7. 最后根据 flag 的值输出是否为闰年。

该回答引用ChatGPT

完整的 C 代码实现,其中用到了 if-else 结构和 scanf 函数来获取用户输入的年份:

#include <stdio.h>

int main() {
    int year, flag;
    printf("请输入年份:");
    scanf("%d", &year);
    if (year < 1800 || year > 2800) {
        printf("年份超出范围。");
    } else {
        if (year % 4 == 0) {
            if (year % 100 != 0) {
                flag = 1;
            } else {
                if (year % 400 == 0) {
                    flag = 1;
                } else {
                    flag = 0;
                }
            }
        } else {
            flag = 0;
        }
        if (flag == 1) {
            printf("%d 是闰年。\n", year);
        } else {
            printf("%d 不是闰年。\n", year);
        }
    }
    return 0;
}

解析如下:

1、通过 scanf 函数获取用户输入的年份,存储在 year 变量中。
2、如果用户输入的年份不在 1800~2800 范围内,则输出错误信息,程序结束。
3、如果年份能被 4 整除,执行第 4 步;否则执行第 6 步。
4、如果年份能被 100 整除,则执行第 5 步;否则说明是闰年,标记为 flag = 1。
5、如果年份能被 400 整除,则说明是闰年,标记为 flag = 1;否则说明不是闰年,标记为 flag = 0。
6、如果年份不能被 4 整除,则说明不是闰年,标记为 flag = 0。
7、根据标记 flag 输出判断结果。


#include <stdio.h>
int main()
{
    int year, flag = 0;
    printf("请输入年份:");
    scanf("%d", &year); // 1. 接收用户输入的年份
    if (year < 0 || year > 3000) // 2. 检查年份是否在有效范围内
    {
        printf("年份超出范围。\n");
    }
    else
    {
        if (year % 4 == 0) // 3. 检查能否被4整除
        {
            if (year % 100 == 0) // 4. 检查能否被100整除
            {
                if (year % 400 == 0) // 5. 检查能否被400整除
                {
                    flag = 1;
                }
                else
                {
                    flag = 0;
                }
            }
            else
            {
                flag = 1;
            }
        }
        else
        {
            flag = 0;
        }
        if (flag) // 6. 根据flag的值判断是否为闰年
        {
            printf("%d 是闰年。\n", year);
        }
        else
        {
            printf("%d 不是闰年。\n", year);
        }
    }
    return 0;
}