李洋疯狂C语言之编程实现统计某年某月份的天数

今天的题目:编程实现统计某年某月的天数
例如: 输入:2017.7
输出:31天
先附上我自己想的方法,由于几个功能放一起太繁琐,于是我想把他们分为三个函数,分别来实现这个功能:

#include <stdio.h>

void runnian(int* year, int* leap); //函数声明
void print(int month);              //函数声明

int main()
{
    int year, month, leap;
    scanf ("%d.%d", &year, &month);
    //输入年月

    runnian(&year, &leap);
    //判断是否是闰年

    if (2 != month)             //判断是否是 2 月,不是则正常输出
        print(month);               //分 30 天和 31 天输出
    else                            //如果是 2 月
    {
        if(1 == leap)               //闰年 29 天
            printf ("29天");
        else                        //非闰年 28 天
            printf ("28天");
    }

    return 0;
}

void runnian(int* year, int* leap)  //判断是否是闰年
{
    if (0 == *year % 4)         //判断能否被4整除
    {
        if (0 == *year % 100)       //判断能否被100整除
        {
            if (0 == *year % 400)   //判断能否被400整除
                *leap = 1;          // leap = 1 为闰年
            else 
                *leap = 0;          // leap = 0 不是闰年
        }
        else 
            *leap = 1;
    }
    else 
        *leap = 0;
}

void print(int month)               //根据月份输出天数
{
    switch(month)
    {
        case  1:
        case  3:
        case  5:
        case  7:
        case  8:
        case 10:
        case 12:
            printf ("31天");
            break;
        case  4:
        case  6:
        case  9:
        case 11:
            printf ("30天");
            break;
        default:
            printf ("不存在的");
    }

}

但是后来看到一个简单的方法,可以用‘与或’来代替‘ if ’语句(即判断闰年的函数),这样多行的代码就可以缩略为一行代码,整个函数就更清爽,附上代码:

#include <stdio.h>

int main()
{
    int year;
    int month;
    printf ("请输入");
    scanf ("%d.%d", &year, &month); //利用scanf输入吃掉输入时的 '.' 

    switch(month)
    {
        case  1:
        case  3:
        case  5:
        case  7:
        case  8:
        case 10:
        case 12:
            printf ("31天");
            break;
        case  4:
        case  6:
        case  9:
        case 11:
            printf ("30天");
            break;
        case 2:
            if (0 == year%4 && 0 != year%100
             || 0 == year%400)
                printf ("29天");
            else
                printf ("28天");
            break;
        default:
                printf ("不存在的");
    }

    return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值