① 求C語言程序,我輸入日期(年月日),然後輸入前後加減多少天,得出那個日期是多少
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
main()
{
int year,month,day;
int leapyear=0;//閏年時使用
int daytime=0;
int sum;
static int month_date[12]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("請輸入日期:(例如:2010 5 27)");
scanf("%d%d%d",&year,&month,&day);
if(year<=0||month>12||month<1)//判斷輸入是否正確
{
printf("Error!\n");
getch();
exit(0);
}
if(year%400==0||(year%4==0&&year%100!=0))//判斷是否為閏年
leapyear=1;//是就加1
if(month==2)//判斷日是否輸入正確,2月是特殊的因為分閏年和平年
{ if((month_date[month-1]+leapyear)<day||day<=0)
{
printf("Error!\n");
getch();
exit(0);
}
}
if(month!=2)//當輸入不是2月時,判斷輸入
{
if(month_date[month-1]<day||day<=0)
{
printf("Error!\n");
getch();
exit(0);
}
}
printf("\n請輸入天數:");
scanf("%d",&daytime);//輸入第N天後
if(daytime<0)
{
printf("Error!\n");
getch();
exit(0);
}
sum=daytime+day;//當前日期與N天相加
do
{
if(month==2)//判斷當月是不是二月份
month_date[month-1]+=leapyear;
if(sum>month_date[month-1])
{
sum-=month_date[month-1];
month++;//超過當月天數,加一個月
if(month==13)//當月份超過12月時,重新返到1月
{
year++;//加一年
if(year%400==0||(year%4==0&&year%100!=0))//判斷加一年後是不是閏年
leapyear=1;
else
leapyear=0;//不是閏年則為0
month=1;//因為12月的下一個月是1月
}
}
}while(sum>month_date[month-1]);//當加起來的天數少於當月的天數就停止循環
day=sum;
printf("\n第%d天後是%d %d %d",daytime,year,month,day);//輸出
getch();
}