#类似一个万年历
今天的上机作业如下:
计复杂的日期计算器。要求根据用户输入一个日期,实现如下功能:
(1)判断日期是否有效;
(2)输出n天后的日期;(n为用户输入,可正可负);
(3)输出当天是星期几。 先来说一下思路:
从公元一年算起,算出总天数s,一月一日为星期一,后给mod7,注意余0时是星期天。
注意判断闰年。
给s加(减)n后再次从公元元年起算,输出最终日期。
代码如下:
#include <stdio.h>
int main()
{
int y, m, d, i = 0, n;
scanf_s("%d%d%d%d", &y, &m, &d, &n);
if (y < 0 || m < 0 || d < 0)
printf("F\n");
else if (y % 1 == 0 && m % 1 == 0 && d % 1 == 0)
{
if (m == 2)
{
if ((y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) && d < 30)
{
printf("T\n");
i = 1;
}
else if (d < 29)
{
printf("T\n");
i = 1;
}
else
printf("F\n");
}
else if (m == 4 || m == 6 || m == 9 || m == 11)
{
if (d < 31)
{
printf("T\n");
i = 1;
}
else printf("F\n");
}
else
{
if (d > 31)
printf("F\n");
else
{
printf("T\n");
i = 1;
}
}
}
if (i)
{
int y1, m1, d1,s1;
int x[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
long i, s = 0;
for (i = 1; i < y; i++)
{
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) s += 366;
else s += 365;//整年份的天数
} if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)x[2] = 29;
for (i = 1; i < m; i++)
{
s += x[i];//整月的天数
}
s += d;//日的天数
s1 = s % 7;
if (s1 == 0)
s1 = 7;
printf("星期%ld\n", s1);
s = s + n;
for (i = 1; s > 365; )
{
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
{
s -= 366;
}
else { s -= 365; }//整年份的天数
i = i + 1;
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
{
if (s <= 366)
break;
}
else
{
if (s <= 365)
break;
}
}
y1 = i;
if (y1 % 4 == 0 && y1 % 100 != 0 || y1 % 400 == 0)x[2] = 29;
if (s <= 31)
{
m1 = 1;
d1 = s;
printf("%d %d %d", y1, m1, d1);
return 0;
}
for (i = 1; ; )
{
s -= x[i];//整月的天数
i = i + 1;
if (i == 4 || i == 6 || i == 9 || i == 11)
{
if (s <= 30)
break;
}
else if (i == 2)
{
if(s <= x[2])
break;
}
else
{
if (s <= 30)
break;
}
} m1 = i;
d1 = s;
printf("%d %d %d", y1, m1, d1);
return 0;
}
}
初学,代码比较复杂,繁琐。
记录上机作业,仅供参考。
*敬请谅解。 *
版权声明:本文为TheGodOfCloud原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。