9.判断闰年

1. 概要

~ Jack Qiao对米粒说:“今天咱们学习,编写一个更简单的C语言程序,这个程序会询问你一个年份,然后告诉你从1到那个年份之间有多少个闰年,并且把这些闰年都列出来。”

~  米粒想到,判断闰年的条件是:

>  年份能被4整除但不能100整除;或者年份能被400整除。

>  翻译成代码也就是下面的逻辑:

(currentYear % 4 == 0 && currentYear % 100 != 0) || (currentYear % 400 == 0)

2. 整体架构流程

 2.1. 直接在主函数中实现

2.1.1. 检查闰年
 for (currentYear = 1; currentYear <= year; currentYear++) 
 {
     // 检查当前年份是否是闰年
     if ((currentYear % 4 == 0 && currentYear % 100 != 0) || (currentYear % 400 == 0))
     {
         // 如果是闰年,就打印出来
         printf("%d ", currentYear);
         leapCount++; // 计数器加一
     }
 }

 ~  这里用year代表输入的年份, currentYear代表当前的年份,, leapCount 代表计数器。

2.1.2. 运行结果 

2.1.3. 整体代码 

#include <stdio.h>
int main() {
    int year, currentYear, leapCount = 0;

    // 让用户输入一个年份
    printf("你好!请输入一个年份:");
    scanf("%d", &year);

    // 从1开始检查到用户输入的年份
        for (currentYear = 1; currentYear <= year; currentYear++) 
        {
            // 检查当前年份是否是闰年
            if ((currentYear % 4 == 0 && currentYear % 100 != 0) || (currentYear % 400 == 0))
            {
                // 如果是闰年,就打印出来
                printf("%d ", currentYear);
                leapCount++; // 计数器加一
            }
        }

    // 打印总的闰年数量
    printf("\n从1年到%d年总共有%d个闰年。\n", year, leapCount);

    return 0;
}

2.2. 引入函数实现 

 2.2.1. 函数一

判断是否为闰年的函数 

int isLeapYear(int year) 
{
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

-  isLeapYear 用于判断给定的年份是否是闰年。返回 1 表示是闰年,返回 0 表示不是闰年

2.2.2. 函数二 

> 打印从1到指定年份之间的所有闰年 

void printLeapYears(int year) {
    int leapCount = 0;

    printf("从1年到%d年之间的闰年有:\n", year);
    for (int currentYear = 1; currentYear <= year; currentYear++) {
        if (isLeapYear(currentYear)) {
            printf("%d ", currentYear);
            leapCount++;
        }
    }
    printf("\n从1年到%d年总共有%d个闰年。\n", year, leapCount);
}
> printLeapYears 函数:接受一个年份作为参数,打印从1年到该年份之间的所有闰年,并输出总的闰年数量。  
 2.2.3. 运行结果

 

2.2.4. 全部代码 

#include <stdio.h>

// 判断是否为闰年的函数
int isLeapYear(int year) 
{
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

// 打印从1到指定年份之间的所有闰年
void printLeapYears(int year) {
    int leapCount = 0;

    printf("从1年到%d年之间的闰年有:\n", year);
    for (int currentYear = 1; currentYear <= year; currentYear++) {
        if (isLeapYear(currentYear)) {
            printf("%d ", currentYear);
            leapCount++;
        }
    }
    printf("\n从1年到%d年总共有%d个闰年。\n", year, leapCount);
}

// 主函数
int main() {
    int year;

    printf("请输入一个年份:");
    if (scanf("%d", &year) != 1) {
        printf("输入无效,请输入一个有效的年份。\n");
        return 1;
    }

    printLeapYears(year);

    return 0;
}

3. 小结

米粒对比思考后,根据它们优点和不足,做出以下总结:
>  第一个直接在主函数中实现
优点简单直观,所有逻辑都在 main 函数中,初学者容易理解和实现。
代码量少,不需要额外的函数,代码量相对较少。

不足可读性差随着功能的增加,main 函数会变得越来越长,难以阅读和维护。复用性差扩展性差:如果需要增加新的功能(例如,计算某个区间内的闰年),需要修改现有的逻辑,容易出错


>  第二个引入函数实现
优点代码结构清晰,将不同的功能封装在不同的函数中,代码结构更加清晰。
可读性强,每个函数都有明确的职责,容易理解和维护。
复用性强,可以在其他地方重用这些函数,避免重复代码。
扩展性强,如果需要增加新的功能,可以轻松地添加新的函数,而不会影响现有的代码。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值