C语言算法实例(四)
输入任意日期,判断此年为平年还是闰年?判断此天为此年的第几天?
题目分析:
1. 闰年解释:闰年分为普通闰年和世纪闰年;普通闰年的年份能被4整除而不能被100整除,世纪闰年的年份能被400整除。
实现代码
#include "stdio.h"
/*如果函数定义在main函数之后,需要在使用之前进行函数声明*/
unsigned int leap_normal_year_judg( unsigned int year);
int main()
{
unsigned int year,month,day,sum_day,day_leap;
printf("\n请输入日期,格式为:year-month-day 例:2021-05-07\n");
scanf("%d-%d-%d",&year,&month,&day);
if(month > 12 || day > 31)
{
printf("输入的year或day错误,请重新输入日期,格式为:year-month-day \n");
scanf("%d-%d-%d",&year,&month,&day);
}
switch(month)
{
case 1: sum_day = 0; break;
case 2: sum_day = 31; break;
case 3: sum_day = 59; break;
case 4: sum_day = 90; break;
case 5: sum_day = 120; break;
case 6: sum_day = 151; break;
case 7: sum_day = 181; break;
case 8: sum_day = 212; break;
case 9: sum_day = 243; break;
case 10: sum_day = 273; break;
case 11: sum_day = 304; break;
case 12: sum_day = 334; break;
default: printf("输入月份有误\n");break;
}
if(leap_normal_year_judg(year) == 1)
{
printf("%d年为闰年\n",year);
if(month > 2)
{
day_leap = 1;
}
else
{
day_leap = 0;
}
}
else
{
day_leap = 0;
printf("%d年为平年\n",year);
}
sum_day = sum_day + day + day_leap;
printf("%d-%d-%d是%d年的第%d天\r\n",year,month,day,year,sum_day);
return 0;
}
/**************************************************************************************************
* @brief Leap year judgment function.
* if the input parameter is leap year, it returns 1,otherwise it returns 0
**************************************************************************************************/
unsigned int leap_normal_year_judg( unsigned int year)
{
if(year % 4 == 0)
{
if(year % 100 == 0)
{
if(year % 400 == 0)
{
return 1; //能被400整除---闰年
}
else
{
return 0;
}
}
else
{
return 1; //能被4整除,但不能被100整除--闰年
}
}
else
{
/*不能被4整除 */
return 0;
}
}
运行结果
正确输入要求格式的日期并运行
当月份或日期输入错误,需要重新输入