我们知道一年有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;
}