[原创]第二天算日期的源码
#include <stdio.h>// 保存每个月的天数
int months = {{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}} ;
// 保存平年闰年的天数
int years = {365, 366};
// 判断平年闰年,如果是闰年,返回1,平年返回0
int isLeap(int m)
{
if (m%4 != 0 || (m%100 == 0 && m%400 != 0))
return 0;
return 1;
}
// 判断年月日是否合法
// 合法返回1, 不合法返0
int isSuccDate(int year, int month, int day)
{
// 判断年是否合法
if (year < 0)
{
printf("对不起,公元前不在本程序计算之内\r\n") ;
return 0 ;
}
// 判断月是否合法
if (month < 1 || month > 12)
{
printf("对不起,您的月份输入不正确!\r\n") ;
return 0 ;
}
// 判断日是否合法
if (day < 0 || (day > months))
{
printf("对不起,您的天数输入不正确! \r\n") ;
return 0 ;
}
return 1;
}
// 输出体力、情绪、智力
void Display(int sum)
{
printf("%s\r\n", ((sum%23) > 11)?"体力低潮期":"体力高潮期") ;
printf("%s\r\n", ((sum%28) > 14)?"情绪低潮期":"情绪高潮期") ;
printf("%s\r\n", ((sum%33) > 16)?"智力低潮期":"智力高潮期") ;
}
int main(void)
{
int year , // 出生年
month , // 出生月
day , // 出生日
year1, // 当前年
month1, // 当前月
day1, // 当前日
sum , // 总天数
i ;
printf ("输入出生年月日:year mouth day ") ;
scanf("%d%d%d", &year, &month, &day) ;
printf ("输入当前年月日:year mouth day ") ;
scanf("%d%d%d", &year1, &month1, &day1) ;
// 判断日期是否合法
if (year > year1 || ! isSuccDate(year, month, day) || ! isSuccDate(year1, month1, day1))
{
printf("日期不正确,错误退出! \r\n") ;
return 1 ;
}
// 计算出生时是那年的第多少天
sum = 0 ;
for (i = 1; i < month; ++i)
{
sum += months ;
}
sum += day ;
// 相减求出那年还有多少天
sum = years[ isLeap(year) ] - sum ;
// 求出中间年的天数
for (i = year + 1; i < year1; ++i)
{
// 通过判断平年闰年获得那年天数
sum += years ;
}
// 求出当前已经过了那年的多少天
for (i = 1; i < month1; ++i)
{
sum += months ;
}
sum += day1;
// 因为年份相求,会多加一次
if (year == year1)
sum -= years ;
printf("你已经存活了 %5d 天了\r\n", sum) ;
// 调用输出结果
Display(sum) ;
return 0;
} // end of main 恩 多交流些源码
很有意义 ~~
页:
[1]