闰年与数组查表法
知识点:1.闰年的判断;
2.年月日天数的统计
3.数组查表法的应用
里面包含了函数的升级,函数从繁琐变得短小精悍
项目注意点:
1.能被4整除并且能被100或400整除的年份是闰年
2. 查表法:数组不用重复定义,并且不能改变
static const int days[] = { 29,31,28,31,30,31,30,31,31,30,31,30,31 };
3.输入的年份不能小于1
4.输入月份不能小于1或者大于12
5.输入天数不能大于该月的天数
6.月份的天数可以用查表法,前n个月天数之和也可以用查表法
static const int sum[]={0,0,31,59,90,120,151,181,212,243,273,304,334,365};
#include<stdio.h>
bool Is_Leap(int year)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
return true;
}
else
{
return false;
}
}
/*
单分支语句1
bool Is_Leap(int year)
{
bool res = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
res= true;
}
return res;
}
单分支语句2
bool Is_Leap(int year)
{
return(year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
}
普通方法判断月份的天数
int Get_YM_Day(int year, int month)
{
if (month == 1 || month == 3 || month == 5 || month == 7
|| month == 8 || month == 10 || month == 12)
{
return 31;
}
else if (month == 4 || month == 6 || month == 9 || month == 11)
{
return 30;
}
else
{
if (Is_Leap(year))
{
return 29;
}
else
{
return 28;
}
}
}
switch语句判断
int Get_YM_Day(int year, int month)
{
int day = 0;
switch (month)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
day = 31;
break;
case 4:case 6:case 9:case 11:
day = 30;
break;
default:
if (Is_Leap(year))
{
day = 29;
}
else
{
day = 28;
}
}
return day;
}
*/
//查表法判断月份的天数
int Get_YM_Day(int year, int month)
{
static const int days[] = { 29,31,28,31,30,31,30,31,31,30,31,30,31 };
// 0 1 2 3 4 5 6 7 8 9 10 11 12
if (2 == month && Is_Leap(year))
{
month = 0;
}
return days[month];
}
/*int Get_YMD_total(int year, int month, int day)
{
int sum = 0;
if (year < -1)return -1;
if (month < 1 || month>12)return -2;
if (day < 1 || day> Get_YM_Day(year, month))return -3;
for (int i = 1;i < month;++i)
{
sum += Get_YM_Day(year, i);
}
sum += day;
return sum;
}*/
int Get_YMD_total(int year, int month, int day)
{
static const int sum[] = { 0,0,31,59,90,120,151,181,212,243,273,304,334,365 };
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13
if (year < -1)return -1;
if (month < 1 || month>12)return -2;
if (day < 1 || day> Get_YM_Day(year, month))return -3;
int total = sum[month] + day;
if (month > 2 && Is_Leap(year))
{
total += 1;
}
return total;
}
int main()
{
int year = 0;
int month = 0;
int day = 0;
int sum = 0;
scanf_s("%d %d %d", &year, &month, &day);
sum = Get_YMD_total(year, month, day);
switch (sum)
{
case -1:printf("year error \n");break;
case -2:printf("month error \n");break;
case -3:printf("day error \n");break;
default:
printf("year: %d month: %d day: %d total: %d \n", year, month, day, sum);
break;
}
return 0;
}