系统相关
首页 > 系统相关> > C语言 计算某日在一年的第几天及Linux下编译

C语言 计算某日在一年的第几天及Linux下编译

作者:互联网

目录

一、C语言 计算某日在一年的第几天

二、Linux下编译C语言程序

 

一、C语言 计算某日在一年的第几天 

本篇程序的总体思路是:day=(所求日期月份-1)*31+所求日期的日-多余的天数(由于每月天数不同,所以前面的*31会使结果会多出几天,所以要减去)

分为三种情况

月份=1,2 、月份<=7 、月份>7

 月份=1,2时

无论平年还是闰年,1月与2月都无需减去“多余的天数”

月份<=7时

“多余的天数”=月份-月份除以2的商(闰年)

“多余的天数”=月份-(月份除以2的商+1)(平年)

月份>7时

“多余的天数”=月份除以2的商(闰年)

“多余的天数”=月份除以2的商+1(平年)

#include <stdio.h>
void main()
{
	int mm0, mm1, mm2, mm3, mm4, mm5,mm6, mm7,mm8,mm9,day;
	printf("输入日期(8位数字例:20210922):");
	scanf("%d", &mm0);
	mm1 = mm0 / 10000;//年份
	mm2 = mm0 / 100 % 100;//月份
	mm3 = mm0 % 100;//日
	mm4 = mm1 % 4;//根据年份除以4是否整除,判断是否闰年
	mm5 = mm2 - 1;//月份减去1
	mm6 = mm2 / 2;//月份除以2的商
	mm7 = mm2 - mm6;
	mm8 = mm7 + 1;
	mm9 = mm2 / 2 + 1;
		if (mm4==0)//被四整除则为闰年
		{
			if (mm2 == 2)
			{
				day = mm5 * 31 + mm3;
				printf("%d年中的第%d天", mm1, day);
			}
			else if (mm2 <= 7)
			{
				if (mm2 == 1)
				{
					day = mm5 * 31 + mm3;
					printf("%d年中的第%d天", mm1, day);
				}
				else
				{
					day = mm5 * 31 + mm3 - mm7;
					printf("%d年中的第%d天", mm1, day);
				}
				
			}
			else
			{
				day = mm5 * 31 + mm3 - mm6;
				printf("%d年中的第%d天", mm1, day);
			}
		}
		else//平年
		{
			if (mm2 == 2)
			{
				day = mm5 * 31 + mm3;
				printf("%d年中的第%d天", mm1, day);
			}
			else if (mm2 <= 7)
			{
				if (mm2 == 1)
				{
					day = mm5 * 31 + mm3;
					printf("%d年中的第%d天", mm1, day);
				}
				else
				{
					day = mm5 * 31 + mm3 - mm8;
					printf("%d年中的第%d天", mm1, day);
				}
				
			}
			else
			{
				day = mm5 * 31 + mm3 - mm9;
				printf("%d年中的第%d天", mm1, day);
			}
		}
}

在进行某些科学计算时,我们有必要计算出某日在一年的第几天,例如在天文观测需要计算MJD的过程中,需要对下面的时间格式进行转换。 

2018-11-26T21:39:19

 将其转换成如下格式可进行下一步运算

2018-330-21:39:19

#include <stdio.h>
void main()
{
	int  mm1, mm2, mm3, mm4, mm5, mm6, mm7, mm8, mm9, day, nm1, nm2, nm3;//nm1,nm2,nm3为时间
	printf("输入日期:");
	scanf("%d-%d-%dT%d:%d:%d", &mm1, &mm2, &mm3, &nm1, &nm2, &nm3);
	mm4 = mm1 % 4;//根据年份除以4是否整除,判断是否闰年
	mm5 = mm2 - 1;//月份减去一
	mm6 = mm2 / 2;
	mm7 = mm2 - mm6;
	mm8 = mm7 + 1;
	mm9 = mm2 / 2 + 1;
	if (mm4 == 0)//被四整除则为闰年
	{
		if (mm2 == 2)
		{
			day = mm5 * 31 + mm3;
			printf("%d-%d-%d:%d:%d", mm1, day, nm1, nm2, nm3);
		}
		else if (mm2 <= 7)
		{
			if (mm2 == 1)
			{
				day = mm5 * 31 + mm3;
				printf("%d-%d-%d:%d:%d", mm1, day, nm1, nm2, nm3);
			}
			else
			{
				day = mm5 * 31 + mm3 - mm7;
				printf("%d-%d-%d:%d:%d", mm1, day, nm1, nm2, nm3);
			}

		}
		else
		{
			day = mm5 * 31 + mm3 - mm6;
			printf("%d-%d-%d:%d:%d", mm1, day, nm1, nm2, nm3);
		}
	}
	else
	{
		if (mm2 == 2)
		{
			day = mm5 * 31 + mm3;
			printf("%d-%d-%d:%d:%d", mm1, day, nm1, nm2, nm3);
		}
		else if (mm2 <= 7)
		{
			if (mm2 == 1)
			{
				day = mm5 * 31 + mm3;
				printf("%d-%d-%d:%d:%d", mm1, day, nm1, nm2, nm3);
			}
			else;
			{
				day = mm5 * 31 + mm3 - mm8;
				printf("%d-%d-%d:%d:%d", mm1, day, nm1, nm2, nm3);
			}

		}
		else
		{
			day = mm5 * 31 + mm3 - mm9;
			printf("%d-%d-%d:%d:%d", mm1, day, nm1, nm2, nm3);
		}
	}
}

二、Linux下编译

很多天文数据处理工具需要在Linux下运行,所以有必要在Linux将C语言程序编译。(本过程需要用到 gcc命令)

1.创建一个拓展名为 .c 的文件(以vim为例)

vim test.c

2.将C语言程序的代码粘贴到test.c文件中,保存

3.编译

gcc day.c -o day

 

 

最后会生成一个文件,尝试运行一下

./day

 

教程到此结束 


写在最后

本程序来自刚刚学习C语言的学生(只学了一堂课,所以只会简单的语句if,/笑哭)且是第一篇博文,我会不断学习不定期的更新程序使其达到最简。各位朋友如有问题可评论或私信,望各位朋友给出建议,很希望与大家交流~

标签:闰年,第几天,月份,mm1,mm2,Linux,C语言,day
来源: https://blog.csdn.net/weixin_41853798/article/details/120475695