⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arithmetic.c

📁 生命沙漏核心算法
💻 C
字号:
  /***
 ***********************************************
 *说明:
 *本程序为"生命沙漏"
 *STM32是否为闰年和相应月份的天数部分算法
 *文件名称:arithmetic.c
 *************************************************
 *包含功能:
 *1、判断某一年是否为闰年
 *2、计算某一年某一月的天数
 *3、计算某一时间段的闰年数
 *4、计算一个人活了多少天
 *5、计算一个人的星座
 *************************************************
 *当前版本: ve1.0
 *作者:     吾ARM1
 *修改时间:2012年4月17日
 *完成时间: 2012年4月9日
 *************************************************/
  #include "arithmetic.h"

/*--------------------
函数名: Year_Arith
返回值: 1/0
输入参数:year
功能描述:输入年份,可以判断出这一年是否为闰年
----------------------*/
u8  Year_Arith(u16 year)
{
	u16	Year_Mark;
	Year_Mark = year;
	if((Year_Mark%4==0||Year_Mark%400==0)&&(Year_Mark%100!=0))
		return 1;
	else
		return 0;


}  

/*--------------------
函数名: Arith
返回值: 29/28/30/31
输入参数:Some_Year,month
功能描述:输入某一年的某一月得出该月的天数
----------------------*/
u8 Day_Arith(u16 Some_Year,u8 month)
{
	u8	i;
	i = Year_Arith(Some_Year);
	if(month==2&&i==1)
		return	29;
	if(month==2&&i==0)
		return	28;
	switch(month)
	{
	case 1:	return 31;break;
	case 3:	return 31;break;
	case 4: return 30;break;
	case 5: return 31;break;
	case 6: return 30;break;
	case 7: return 31;break;
	case 8: return 31;break;
	case 9: return 30;break;
	case 10: return 31;break;
	case 11: return 30;break;
	case 12: return 31;break;
	}
	
}

/*--------------------
函数名: Have_Leap_Year_Arith
返回值: count,从出生到当前年份的闰年数
输入参数:Birth_Year,Present_Year两者分别为:出生年份,当前年份
功能描述:分别输入出生年份和当前年份,最后得出并返回润年数。
----------------------*/
u8 Have_Leap_Year_Arith(u16 Birth_Year,u16 Present_Year)
{
	u8	count=0;
	u8 	flag = 0;

	for(Birth_Year=Birth_Year+1;Birth_Year<Present_Year;Birth_Year++)
	{	
		flag = Year_Arith(Birth_Year);
		if(flag==1)
		{
			++count;
			flag = 0;
		}
		else
			count = count;
	}
	return	count;
}

/*--------------------
函数名: From_Present_Start
返回值: RFPresent_Start_Day,返回从出生年元月到当前元月的天数,最大值为:65535
输入参数:FSome_Year,FSome_Month两者分别为:出生年份,当前年份
功能描述:分别输入某一年和某一月,最后得出从改年起初到改年该月的天数。
----------------------*/
u16 From_Present_Start(u16 FSome_Year,u8 FSome_Month)
{
	u8 i = 0;
	u8 FPresent_Start_Day = 0;
	u16	RFPresent_Start_Day=0;
	i = Year_Arith(FSome_Year);//判断输入年份是否为闰年
	for(;FSome_Month>1;FSome_Month--)
	{
		FPresent_Start_Day = Day_Arith(FSome_Year,FSome_Month);//得出当月天数
		RFPresent_Start_Day = RFPresent_Start_Day+FPresent_Start_Day;//将得出的天数进行垒加
	
	}
	if(i==1) RFPresent_Start_Day = 366 - RFPresent_Start_Day;
	if(i==0) RFPresent_Start_Day = 365 - RFPresent_Start_Day;
	return	RFPresent_Start_Day;
}

/*---------------------------------------------------------------
函数名: Have_Day_Arith
返回值: Day_Num,返回从出生年元月到当前元月的天数,最大值为:65535
输入参数:Birth_Year1,Present_Year1,Birth_Month,Present_Month,Birth_Day,Present_Day两者分别为:出生年份,当前年份,出生月份,当前月份,出生日,当日 
功能描述:分别输入出生年月日和当前年月日,最后得出天数并返回。
-----------------------------------------------------------------*/
u16 Have_Day_Arith(u16 Birth_Year1,u16 Present_Year1,u8 Birth_Month,u8 Present_Month,u8	Birth_Day,u8 Present_Day)
{
	u8 Leap_Year_Num1 = 0,Year_Num = 0,i=0,j=0;
	u16	Day_Num,Birth_Day_Num = 0,Present_Day_Num = 0;
	u16	Byear,Fyear;
	 Byear = Birth_Year1;
	 Fyear = Present_Year1;
	 i = Year_Arith(Birth_Year1);
	 j = Year_Arith(Present_Year1); 
	Birth_Day_Num = From_Present_Start(Birth_Year1,Birth_Month);//得出出生当年当月之前的天数
	if(j==1)
	{
		Present_Day_Num =366 - From_Present_Start(Present_Year1,Present_Month);//得出当前年、月之前的天数
	}
	else
		Present_Day_Num =365 - From_Present_Start(Present_Year1,Present_Month);//得出当前年、月之前的天数
	
	Leap_Year_Num1 = Have_Leap_Year_Arith(Byear,Fyear);//得出闰年数
	Year_Num = Fyear-Byear;//得出年数差
	Day_Num = (0*366+((u16)Year_Num-(u16)Leap_Year_Num1-1)*365)+Birth_Day_Num-Birth_Day+Present_Day_Num+Present_Day;//得出总的天数
	return	Day_Num;//返回结果最大为:65535天
}
/*---------------------------------------------------------------
函数名: Constellation_Arith
返回值: 无
输入参数:u8	Birth_Month,u8	Birth_Day。出生月,出生日
功能描述: 根据输入的出生月 和出生日(公历),得出所属星座
-----------------------------------------------------------------*/
void Constellation_Arith(u8	Birth_Month,u8	Birth_Day)
{

	if(((Birth_Month==1)&&(Birth_Day>=20))||((Birth_Month==2)&&(Birth_Day<=18)))
	  {
	  	
	 	star = 39;//水
	 	star1 = 40;	//瓶
		//为水瓶座
	  }
	 if(((Birth_Month==2)&&(Birth_Day>=19))||((Birth_Month==3)&&(Birth_Day<=20)))
	 {
	 	 star = 41;//双
	 	star1 = 42;	//鱼
	 	//为双鱼座
	 }
	 if(((Birth_Month==3)&&(Birth_Day>=21))||((Birth_Month==4)&&(Birth_Day<=19)))
	 {
		 star = 43;//白
	 	star1 = 44;	//羊
		//白羊座	
	 }
	 if(((Birth_Month==4)&&(Birth_Day>=20))||((Birth_Month==5)&&(Birth_Day<=20)))
	 {
	 	 star = 37;//金
	 	star1 = 38;	//牛
		 //金牛座
	 }
	 if(((Birth_Month==5)&&(Birth_Day>=21))||((Birth_Month==6)&&(Birth_Day<=21)))
	 {
	 	 	 star = 45;//双
	 	star1 = 46;	//子
		 //双子座
	 }
	 if(((Birth_Month==6)&&(Birth_Day>=22))||((Birth_Month==7)&&(Birth_Day<=22)))
	 {
	 	 	 star = 47;//巨
	 	star1 = 48;	//蟹
		 //巨蟹座
	 }
	 if(((Birth_Month==7)&&(Birth_Day>=23))||((Birth_Month==8)&&(Birth_Day<=22)))
	 {
	 	 star = 49;//狮
	 	star1 = 46;	//子
		 //狮子座
	 }
	 if(((Birth_Month==8)&&(Birth_Day>=23))||((Birth_Month==9)&&(Birth_Day<=22)))
	 {
	 	 	 star = 50;//处
	 	star1 = 51;	//女
		 //处女座
	 }
	 if(((Birth_Month==9)&&(Birth_Day>=21))||((Birth_Month==10)&&(Birth_Day<=23)))
	 {
	 	 	 star = 30;//天
	 	star1 = 52;	//秤
		 //天秤座
	 }
	 if(((Birth_Month==10)&&(Birth_Day>=24))||((Birth_Month==11)&&(Birth_Day<=21)))
	 {
	 	 	 star = 30;//天
	 	star1 = 53;	//蝎
		 //天蝎座
	 }
	 if(((Birth_Month==11)&&(Birth_Day>=22))||((Birth_Month==12)&&(Birth_Day<=21)))
	 {
	 	 star = 54;//射
	 	star1 = 55;	//手
		 //射手座
	 }
	 if(((Birth_Month==12)&&(Birth_Day>=22))||((Birth_Month==1)&&(Birth_Day<=19)))
	 {
	 		 star = 56;//射
	 	star1 = 57;	//手
		 //摩羯座
	 }
}

/******************* (C) COPYRIGHT 2012 吾ARM1 *****END OF FILE****/

  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -