JSK-129 判断日期是否符合格式【入门】

判断日期是否符合格式

我们知道一年有12个月,每个月最多有31天,年有平年和闰年之分,本题目要求如果输入一个日期,程序需要判断用户输入的日期是否正确。

输入:用户输入是三个数字,分别表示年,月和日。 例如 2007 10 21 ,表示2007年10月21日,这个输入经过判断是正确的。又例如输入 1993 11 38 ,这个输入经过判断是错误的,因为日期不能超过31天。

输出:程序的输出分为两种,1或者0。1表示输入正确,0表示输入错误

提示:测试输入的三个数字中,年份是正数,月份和日期有可能是负数,程序需要对这两个数为负数的情况进行判断

样例输入

2011 21 10

样例输出

0

 

问题链接JSK-129 判断日期是否符合格式

问题描述:(略)

问题分析

  这个题有关日期计算问题,做一下年月日范围的检查就可以了。

程序说明

  函数leapyear()根据带入参数(年)判断是否为润年,润年则返回1否则返回0。返回整数值更便于使用。

  数组days[]存储每月的天数,不用其元素days[0]使得程序让人更加直观好懂。

参考链接:(略)

题记:功能尽可能封装为函数。

 

AC的C语言程序如下:

/* JSK-129 判断日期是否符合格式 */

#include <stdio.h>

int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

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

int judge(int y, int m, int d)
{
    if(y < 0 || m <= 0 || d <= 0)
        return 0;
    else if(m > 12)
        return 0;
    else {
        days[2] += leapyear(y);
        if(d > days[m])
            return 0;
        else
            return 1;
    }
}

int main(void)
{
    int y, m, d;

    scanf("%d%d%d", &y, &m, &d);

    printf("%d\n", judge(y, m, d));

    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值