对给定的某年某月某日,计算它是这一年的第几天
程序员文章站
2024-03-12 15:54:44
...
按如下函数原型用函数编程解决如下的日期转换问题(要求考虑闰年的问题):
输入某年某月某日,计算并输出它是这一年的第几天。
/* 函数功能: 对给定的某年某月某日,计算它是这一年的第几天
函数参数: 整型变量year、month、day,分别代表年、月、日
函数返回值:这一年的第几天 */
int DayofYear(int year, int month, int day);
输入提示信息:“Please enter year, month, day:”
输入格式:"%d,%d,%d"
输出提示信息和格式:“yearDay = %d\n”
解决思路:在cal函数中首先判断闰年,用数组存储每个月的天数,便于计算。再以二月份为界限计算总共的天数。返回计算值前再根据闰年与否进行变化。
#include<stdio.h>
int cal(int year, int month, int day);
int main(void)
{
int year, month, day;
printf("Please enter year, month, day:");
scanf_s("%d,%d,%d", &year, &month, &day);
int res;
res = cal(year, month, day);
printf("yearDay = %d\n", res);
}
int cal(int year, int month, int day)
{
int leap = 0;
int total;
int md[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if (month >= 2)
{
if (year % 4 == 0)
{
if (year % 100 != 0)
{
leap = 1;
}
else if (year % 400 == 0)
{
leap = 1;
}
}
switch (month)
{
case 2: total = md[0] + day; break;
case 3: total = md[0] + md[1] + day; break;
case 4: total = md[0] + md[1] + md[2] + day; break;
case 5: total = md[0] + md[1] + md[2] + md[3] + day; break;
case 6: total = md[0] + md[1] + md[2] + md[3] + md[4] + day; break;
case 7: total = md[0] + md[1] + md[2] + md[3] + md[4] + md[5] + day; break;
case 8: total = md[0] + md[1] + md[2] + md[3] + md[4] + md[5] + md[6] + day; break;
case 9: total = md[0] + md[1] + md[2] + md[3] + md[4] + md[5] + md[6] + md[7] + day; break;
case 10:total = md[0] + md[1] + md[2] + md[3] + md[4] + md[5] + md[6] + md[7] + md[8] + day; break;
case 11:total = md[0] + md[1] + md[2] + md[3] + md[4] + md[5] + md[6] + md[7] + md[8] + md[9] + day; break;
case 12:total = md[0] + md[1] + md[2] + md[3] + md[4] + md[5] + md[6] + md[7] + md[8] + md[9] + md[10] + day;
}
if (leap == 1)
total++;
return total;
}
else
{
return day;
}
}
运行效果: