一.题目:输入某年某月某日,判断这一天是这一年中的第几天。
二.思路:
1.一年中除了二月份,其他月份的天数都是固定的,我们可以使用数组将这些月份的天数存储起来;
2.判断二月份到底是有多少天,是由这年是否为闰年来决定的,该年不为闰年,2月份天数为28天,否则2月份天数为29天。
3.确定这一年到底是一年中的第几天,需要知道用户输入之前的月份天数之和在与输入的具体天数相加,即为一年中的第几天。当输入的月份小于或等于2月份时,如输入2023年2月1日,因为输入的即用1月份的天数+1,结果为32。得知2023年的2月1日是这一年中的第32天。如果输入的月份大于2月份时,我们需要判断这年是否为闰年来判断2月份的具体天数,下面我将用代码详细解答这道题目。
int leap_year(int year)
{
int ret = 0;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
ret = 1;
return ret;
}
int main()
{
int y = 0;
int m = 0;
int d = 0;
int sum = 0;
int i = 0;
scanf("%d%d%d", &y, &m, &d);
int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//0 1 2 3 4 5 6 7 8 9 10 11 12
// 1 2 3 4 5 6 7 8 9 10 11 12
if (m > 2&&leap_year(y))
{
days[2] = 29;
}
for (i = 0; i < m; i++)
{
sum += days[i];
}
printf("这一天是一年中的%d天。", sum + d);
}
三.代码解读
在main函数中,首先设置变量y,m,d分别代表年份,月份,天。scanf函数让用户来接收输入值。创建一个名为days的数组来存放每个月的天数,需要注意的是,因为数组的下标是从0开始,在这里为了更好的理解,我将days[0]=0做这样的处理,这样月份的个数就对应数组下标;另一点就是在此时我将2月份的天数设置为28。
在if判断语句中写入判断条件m > 2&&leap_year(y),表示当输入的月份大于2时并且该年也是闰年时将2月份的天数就为29。同时此时也需要调用leap_year()函数,来判断是否为闰年。在函数内部中,是闰年就返回1,否则返回0。
接着变量i表示数组下标,利用循环,当i>m时跳出循环,最后求出最后的sum与输入的d相加即为题目最后的结果。
运行结果示例: