用c语言写一个程序,输入年月日,把日期自动加一天,然后输入.

2025-02-25 00:05:44
推荐回答(3个)
回答1:

这是阳历的常识:
阳历(即公历),是世界上多数国家通用的历法,由"儒略历"修订而成。儒略历

是公元前46年,古罗马统帅儒略、恺撒决定采用的历法。
阳历,是以地球绕太阳运动作为根据的历法。它以地球绕太阳一周(一回归年)为

一年。一回归年的长度是365.2422日,也就是365天5小时48分46秒,积累4年共有23小时

15分4秒,大约等于一天,所以每4年增加1天,加在2月的末尾,得366天,就是闰年。但

是4年加1天实际回归年多了44分56秒,积满128年左右就又多算了一天,也就是在400年中

约多算了3天。
阳历闰年规定:公元年数可用4整除的,就算闰年;为了要在400年减去多算的3天,

并规定公元世纪的整数,即公元年数是100的整数时,须用400来整除的才算闰年,如1600

年、2000年、2200年、2400年就是闰年。这样就巧妙地在400年中减去了3天,阳历规定每

年都是12个月,月份的大小完全是人为的规定,现在规定每年的1、3、5、7、8、10、12

月为大月,每月31天;4、6、9、11月为小月,每月30天;2月平年是28天,闰年是29天。

归纳上面的得出结论:
阳历:
闰年,2月29天,平年28天。
其它月,1、3、5、7、8、10、12为大月31天。
2、4、6、9、11为小月30天。
能被400整除的是闰年;
除能被100整除的不是闰年(能被400整除的除外)其余能被4整除的是闰年。

所以你只要计算是不是闰年,就可以识别2月份了,所以这个应该不是很难,关键

是闰年。
下面是我花了30分钟写的程序,我一直用C++,由于不知道C支不支持布尔型,所以两个判断的函数返回用整型。你看一下程序能不能运行。我在VC60下编译通过。

#include "stdio.h"
int IsLeapYear(int Year);//判断是不是闰年。
int IsCurrentDate(int Year,int Month,int Day);//是不是正确的日期。
int ReturnNextDay(int Year,int Month,int Day);//返回下一天,也有判断是不是正确的日期。
int LeapYear_Month_SumDay[12]={31,29,31,30,31,30,31,31,30,31,30,31};//闰年数组,保存各月天数。
void main()
{
int Year=0,Month=0,Day=0,NextDay=0;
printf("pleace enter right Date(example:2005 6 27):\n");
scanf("%d%d%d",&Year,&Month,&Day);
NextDay=ReturnNextDay(Year,Month,Day);

switch (NextDay)
{
case 0: printf("not a current date\n");
break;
case 1:
if (Month==12)
{
Year++;
Month=1;
}
else
{
Month++;
}
break;
}
if (NextDay!=0) printf("The you input next date is %d-%d-%d.Thank use bye bye!\n",Year,Month,NextDay);

}

int IsLeapYear(int Year)
{
if (Year%4==0)
{
if (Year%400) return 1;
else
{
if (Year%100==0) return 0;
else return 1;
}
}
else
{
return 0;
}
}

int IsCurrentDate(int Year,int Month,int Day)
{
if ((Year<0) && (Year>9999) && (Month>12) && (Month<1) && (Day<1) &&(Day>31) )return 0;
else return 1;
}

int ReturnNextDay(int Year,int Month,int Day)
{
int ThisMonthSumDay;
if (IsCurrentDate(Year,Month,Day)==1)
{
ThisMonthSumDay=LeapYear_Month_SumDay[Month-1];
if (Month==2)
{
if (IsLeapYear(Year)==0) ThisMonthSumDay--;
}
if (Day {
return ++Day;
}
else
{
if (Day==ThisMonthSumDay)
{
return 1;
}
else
{
return 0;
}

}
}
else
{
return 0;
}

}

回答2:

#include
void main()
{
int a,b,c,d;
printf("Please input year month day:");
scanf("%d%d%d",&a,&b,&c);

if(b>=12)
printf("Error\n");
else if((b==1||3||5||7||8||10||12)&&(c>=31))
printf("Error\n");
else if((b==4||6||9||11)&&(c>=30))
printf("Error\n");
else if( (a%4!=0)&&(b==2)&&(c>=28))
printf("Error\n");
else if( (a%4==0)&&(b==2)&&(c>=29))
printf("Error\n");
else
if(b==1)
printf("It is the %d day of this year\n",c);
else if(b==2)
printf("It is the %d day of this year\n",31+c);
else
{
if(a%4!=0)
{
if(b<=7)
if((b-1)%2==0)
d=31*(b-1)/2+30*(b-3)/2+28+c;
else d=31*b/2+28+30*(b-4)/2+c;
else if(b%2==0)
d=365-31*(14-b)/2-30*(12-b)/2+c;
else d=365-31*(13-b)/2-30*(13-b)/2+c;
}
else
{
if(b<=7)
if((b-1)%2==0)
d=31*(b-1)/2+30*(b-3)/2+29+c;
else d=31*b/2+29+30*(b-4)/2+c;
else
if(b%2==0)
d=366-31*(14-b)/2-30*(12-b)/2+c;
else d=366-31*(13-b)/2-30*(13-b)/2+c;
}
printf("It is the %d day of this year\n",d);
}

}
这是原先自己写的一个判断程序,你自己再修改一下

回答3:

void enterdate(int *p,int *p2,int *p3)
{
int falg;
printf("enter the year\n");
scanf("%d",p);
falg=1;
for(;falg!=0;){
if((*p<0)||(*p>2999))
{
printf("pleace enter right year between 0 and 2999\n");
scanf("%d",p);
}
else
{
falg=0 ;
}
}
falg=1;
printf("enter the month\n");
scanf("%d",p2);
for(;falg!=0;)
{
if((*p2<1)||(*p2>12))
{
printf("pleace enter right month\n");
scanf("%d",p2);
}
else
{
falg=0;
}
}
falg=1;
printf("enter the day\n");
scanf("%d",p3);
for(;falg!=0;)
{
switch(*p2)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if((*p3>31)||(*p3<1))
{
printf("enter the right day of the month:%d\n",*p2);
scanf("%d",p3);
}
else
{
falg=0;
}
break;
case 2:
if((*p%4==0)||(*p%100==0))
{
if((*p3>29)||(*p3<1))
{
printf("enter the right day of the month:%d\n",*p2);
scanf("%d",p3);
}
else
{
falg = 0;
}
}
else
{
if((*p3>28)||(*p3<1))
{
printf("enter the rigth day of the month:%d\n",*p2);
scanf("%d",p3);
}
else
{
falg=0;
}
}
break;
case 4:
case 6:
case 9:
case 11:
if((*p3>30)||(*p3<1))
{
printf("enter the right day of month:%d\n",*p2);
scanf("%d",p3);
}
else
{
falg=0;
}
break;
}
}
}
main()
{
char end;
for(;end!='c';)
{
struct date
{
int year,month,day;
};
struct date a;
int *i,*i2,*i3;
i = &a.year;
i2= &a.month;
i3= &a.day;
enterdate(i,i2,i3);
printf("You enter date is %d - %d - %d \n",a.year,a.month,a.day);
printf("enter the no:\n 'c' then end ,else countie\n");
end=getch();
}
}/*我上午写的只是输入判断了没有实现相加的自己完善下就可以了*/