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