欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 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;
	}
}

运行效果:对给定的某年某月某日,计算它是这一年的第几天

相关标签: C语言 笔记