首先,我们应知道日期计算器包括哪些功能
1、明天的日期
2 、n天后的日期
3、两个日期之间的天数
我们先从第一个功能开始,首先创建一个日期的结构体,包括:年、月、日。
struct date
{
int day;
int month;
int year;
};
其次来看一下解决这个问题的思想:
然后我们要写一个判断闰年的函数:
int Leap(struct date d)
{
int leap = false;
if ((d.year % 4 == 0 && d.year % 100 != 0) || d.year % 400 == 0)
leap = true;
return leap;
}
上述代码中,我们需要先定义两个宏
#define true 1
#define false 0
假如是闰年,便返回1,否则返回0;
接下来,我们要写一个判断今天是否为本月的最后一天的函数:
int lastdays(struct date d)
{
int days;
int Month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if (d.month == 2 && Leap(d))
days = 29;
else
days = Month[d.month - 1];
return days;
}
上面我们先定义了一个数组,里面是每个月的天数,其中二月有28,或者29天,我们在数组中定义二月为28天,然后判断本月是否为2月且是闰年,如果是,便返回29天,否则,返回每月的天数即可;
下面便是主函数了:
int main()
{
struct date today, tomorrow;
scanf("%d %d %d", &today.year, &today.month, &today.day);
if (today.day != lastdays(today))
{
tomorrow.day = today.day + 1;
tomorrow.month = today.month;
tomorrow.year = today.year;
}
else if (today.month == 12) {
tomorrow.day = 1;
tomorrow.month = 1;
tomorrow.year = today.year + 1;
}
else {
tomorrow.day = 1;
tomorrow.month = today.month + 1;
tomorrow.year = today.year;
}
printf("%d %d %d", tomorrow.year, tomorrow.month, tomorrow.day);
return 0;
}
其实当我们知道如何算明天的日期,后面两个问题也就迎刃而解了。对于第二个问题,只需要在主函数里面加循环就可以了,假如n为50的话,为非就是50个明天。
int main()
{
struct date today, tomorrow;
int n = 0;
scanf("%d %d %d", &today.year, &today.month, &today.day);
scanf("%d", &n);
while (n != 0)
{
if (today.day != lastdays(today))
{
tomorrow.day = today.day + 1;
tomorrow.month = today.month;
tomorrow.year = today.year;
}
else if (today.month == 12) {
tomorrow.day = 1;
tomorrow.month = 1;
tomorrow.year = today.year + 1;
}
else {
tomorrow.day = 1;
tomorrow.month = today.month + 1;
tomorrow.year = today.year;
}
n--;
today.day = tomorrow.day;
today.month = tomorrow.month;
today.year = tomorrow.year;
}
printf("%d %d %d\n", tomorrow.year, tomorrow.month, tomorrow.day);
return 0;
}
对于第三个问题,就是加一个判断,判断是否第二天是后面一天的日期,如果不是,就让count++:
int main()
{
struct date today, tomorrow, hou;
int count = 0;
scanf("%d %d %d", &today.year, &today.month, &today.day);
scanf("%d %d %d", &hou.year, &hou.month, &hou.day);
while (hou.year!=today.year || hou.month!=today.month || hou.day!=today.day)
{
if (today.day != lastdays(today))
{
tomorrow.day = today.day + 1;
tomorrow.month = today.month;
tomorrow.year = today.year;
}
else if (today.month == 12) {
tomorrow.day = 1;
tomorrow.month = 1;
tomorrow.year = today.year + 1;
}
else {
tomorrow.day = 1;
tomorrow.month = today.month + 1;
tomorrow.year = today.year;
}
today.day = tomorrow.day;
today.month = tomorrow.month;
today.year = tomorrow.year;
count++;
}
printf("%d\n", count);
return 0;
}
这便是一个简单的日期计算器。