//_32_变量的存储类别
//_32_main.cpp
//静态存储变量是程序整合运行时间都存在
//动态存储变量实在调用函数时临时分配单元
//给出年月日,计算改日是这一年的第几天
#include <stdio.h>
#include <stdlib.h>
int sum_day(int month,int day);
bool leap(int leap);
bool ifTrueDay(int year,int month,int day);
int main()
{
int year,day,month;
do{
printf("请输入日期(年,月,日):\n");
scanf("%d %d %d",&year,&month,&day);
}//保证年份月份日期大于零,且日期要符合月份的限制
while(year<0||day<0||month<0||month>12||!ifTrueDay(year,month,day));
if(leap(year))
printf("%d年是闰年\n",year);
else
printf("%d年不是闰年\n",year);
printf("%d年%d月%d日",year,month,day);
int days = sum_day(month,day);
if(leap(year)&&month>=3)
days = days + 1;
printf("是该年的第%d天.\n",days);
system("pause");
return 0;
}
//定义静态存储变量并赋值
static int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int sum_day(int month,int day)
{
for(int i=0;i<month;i++)
day= day+day_tab[i];
return day;
}
bool leap(int year)
{
if(year%4==0&&year%100!=0 || year%400==0)
return true;
return false;
}
//判断天数是否是正确的
bool ifTrueDay(int year,int month,int day)
{
switch(month)
{
case 2:
if(leap(year))
if(day>29)
return false;
else
return true;
else
if(day>28)
return false;
else
return true;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(day>31)
return false;
else
return true;
break;
case 4:
case 6:
case 9:
case 11:
if(day>30)
return false;
else
return true;
break;
default:
exit(1);//非正常退出
}
}