对给定的某年某月某日,计算它是这一年的第几天

按如下函数原型用函数编程解决如下的日期转换问题(要求考虑闰年的问题):
输入某年某月某日,计算并输出它是这一年的第几天。
/* 函数功能: 对给定的某年某月某日,计算它是这一年的第几天
函数参数: 整型变量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;
	}
}

运行效果:在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43888800/article/details/110056059
今日推荐