c语言日期计算
❶ c语言中输入一个日期计算他是今年的第几天
输入年月日三个值,先累加该年之前各个月的每月天数,最后累加日期天数即可获取结果。
一、算法设计:
1、输入年月日三个值;
2、为保证程序健壮性,可以对三个值的合法性进行判断,只对合法数据进行操作;
3、累加之前各月天数;
4、累加当前日值;
5、输出结果。
二、注意点:
可以使用数组存储各个月份的天数,用循环累加。需要注意的是闰年的判断。对于闰年,2月要多加一天。
三、参考代码:
#include<stdio.h>
intmain()
{
intmdays[12]={31,28,31,30,31,30,31,31,30,31,30,31};//十二个月的天数。
inty,m,d,r=0,i;
scanf("%d%d%d",&y,&m,&d);
if(y%400==0||(y%4==0&&y%100!=0))//闰年。
mdays[1]=29;//设置闰年二月值。
if(y<0||m<=0||m>12||d<=0||d>mdays[m-1])//输入非法。
{
printf("输入年月日不合法 ");//提示并退出。
return-1;
}
for(i=0;i<m-1;i++)//累加之前各个月。
r+=mdays[i];
r+=d;//累加日期值。
printf("%d ",r);//输出结果。
return0;
}
❷ c语言年月日计算
首先,你的闰年判断就有问题。教你个口诀:“四年一润,一百年不润,四百年再润”。
其实就可以用if(yr%4==0||yr%100!=0&&yr%400==0){那么是闰年}
你的检验判断也可以利用mont数组的,首先判断是不是在闰年,然后判断输入days是不是大于的mont[mn](如果是闰年要判断二月+1)。
❸ c语言输入一个日期,计算这个日期前一天和后一天的日期。怎么解答
#include<stdio.h>
#include<conio.h>
/*日期存储结构*/
typedefstructdate{
intyear; /*年*/
intmonth; /*月*/
intday; /*日*/
}date;
intdpm[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};/*平年每月天数*/
/*判断闰年1:是;0:否*/
/*闰年特点:年份是4的倍数但不是100的倍数、年份是400的倍数*/
intisLeap(intyear){
return(year%4==0&&year%100!=0)||(year%400==0);
}
/*日期校验*/
/*日期错误返回1,正确返回0*/
intdateIsErr(dated){
if(d.year<1582&&d.month<10&&d.day<15)/*仅支持1582年10月15日之后的日期计算*/
return1;
if(d.month<1||d.month>12)/*月校验*/
return1;
if(d.day<1||d.day>31)/*日初步校验*/
return1;
if(d.month!=2&&d.day>dpm[d.month])/*非2月日校验*/
return1;
if(d.month==2&&isLeap(d.year)&&d.day>29)/*2月闰年日校验*/
return1;
if(d.month==2&&isLeap(d.year)==0&&d.day>28)/*2月平年日校验*/
return1;
return0;
}
/*计算与日期start相差delta天的日期*/
datedateDelta(datestart,intdelta){
dateend=start;
if(delta>=0){/*日期start向后计算*/
end.day=start.day+delta;/*start日加intervalDays天*/
while(end.day>dpm[end.month]){/*不断减去整月天数,向月、年进位,直至其不超过当前月份天数*/
end.day-=dpm[end.month];
if(isLeap(end.year)&&end.month==2)/*闰年2月天数-1*/
end.day--;
end.month++;/*月进位+1*/
if(end.month==13){/*满1年*/
end.year++;/*年进位+1*/
end.month=1;/*月归位至1月*/
}
}
}
else{/*日期start向前计算*/
end.day=start.day+delta;/*start日加intervalDays天*/
while(end.day<1){/*不断加整月天数,向月、年借位,直至其不小于1*/
end.month--;/*月借位-1*/
if(end.month==0){/*向年借位*/
end.year--;/*年借位-1*/
end.month=12;/*月归位至12月*/
}
end.day+=dpm[end.month];
if(isLeap(end.year)&&end.month==2)/*闰年2月天数+1*/
end.day++;
}
}
returnend;
}
intmain(void){
datestart={2008,5,6},end;
intdelta;
if(dateIsErr(start)){
printf("日期错误! ");
}
else{
printf(" %4d年%2d月%2d日 ",start.year,start.month,start.day);
delta=1;
end=dateDelta(start,delta);
printf("向后 1天 ");
printf("是 %4d年%2d月%2d日 ",end.year,end.month,end.day);
delta=-1;
end=dateDelta(start,delta);
printf("向前 1天 ");
printf("是 %4d年%2d月%2d日 ",end.year,end.month,end.day);
}
getch();/*屏幕暂留*/
return0;
}
输入日期部分,题主自己写吧。以上是核心代码。
❹ 求助,c语言,输入日期及天数计算新日期,求代码
#include<stdio.h>
int main()
{ struct date
{ int year,month,day;
} dt;
int i,days,mon[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d%*c%d%*c%d,%d",&dt.year,&dt.month,&dt.day,&days);
dt.day+=days;
while(dt.day>mon[dt.month])
{ if(dt.month==2)
mon[2]=28+(dt.year%4==0&&dt.year%100||dt.year%400==0);
dt.day-=mon[dt.month];
if(++dt.month>12)
{ dt.month=1;
dt.year++;
}
}
printf("result:%d-%d-%d ",dt.year,dt.month,dt.day);
return 0;
}
❺ C语言对指定日期计算出N天后是什么日期
/*C语言对指定日期计算出N天后是什么日期*/
#include<stdio.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();
}
❻ C语言 算日期
不明白你的问题,我测试是正确的。
如
2012 2 1
30
结果输出
2012 3 2
是正确的啊!!!没有闰年或二月的问题
❼ C语言 计算日期的问题
程序运行不了,因为你的程序中
if(leep(year)&&month>=3)
这一句中leep()函数是没定义的,我猜你应该是笔误,改成leap()马上OK!
貌似 你的程序逻辑方面还得改一下,程序运行后结果不大对!
实际运行一遍后发现,你的程序逻辑没错误,变量定义也没问题,问题在:
1.int sum_day(int month,int day);
int leap(int year);
这两个函数的声明应该在main()的前面,而不是在main()里面;
2. 之所以出现负数,是因为你输入数据格式和你预先定义的不同,input date(year,month,day)
这个年月日之间有逗号,所以输入格式应该是:2012,12,5
照这样改,保准对!!
❽ 求一个C语言的日期计算代码
菜鸟发个,算法可能不是很好吧,请参考下
#include"stdio.h"
#include"math.h"
struct date
{
int year;
int month;
int day;
};
int date[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
int judge(int year) //判断是否为闰年//
{
int flag=0;
if((year%4==0&&year%100!=0)||year%400==0) flag=1;
else flag=0;
return flag;
}
int work(struct date user[2]) //计算两个日期相差天数//
{
int judge(int year);
int days,cnt,i,flag,year,a,b,k; //cnt年数 count闰年天数//
days=0;cnt=0;a=1;b=0;
k=user[1].year-user[0].year;
if(k<0) {a=0,b=1;}
cnt=(int)fabs(k);
for(i=0;i<cnt;i++)
{
year=user[0].year+i;
flag=judge(year);
days=days+365+flag;
}
for(i=0;i<user[a].month-1;i++)
{
year=user[a].year;
flag=judge(year);
days=days+date[flag][i];
}
for(i=0;i<user[b].month-1;i++)
{
year=user[b].year;
flag=judge(year);
days=days-date[flag][i];
}
days=days-user[b].day+user[a].day;
return days;
}
void main()
{
int work(struct date user[2]);
struct date user[2];
int i,days,d;
printf("Please input 2 dates(such as 2008.10.2).\n");
for(i=0;i<2;i++)
{
scanf("%d.%d.%d",&user[i].year,&user[i].month,&user[i].day);
}
d=work(user);
days=fabs(d);
printf("There are %d days.\n",days);
getchar();
}
❾ C语言程序设计 计算日期
#include<stdio.h>
bool isday(int day,int mouth,int year)
{
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((year%400==0)||(year%4==0&&year%100!=0)) a[1]++;
if(day>a[mouth-1]||day<1)
return true;
else
return false;
}
void main()
{
int i,year,mouth,day;
int sum,sign;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
do
{
sum=0;sign=0;
puts("请输入年、月、日:");
scanf("%d%d%d",&year,&mouth,&day);
if(((year%400==0)||(year%4==0&&year%100!=0))&&mouth>2)
{
sum=day+1;//闰年,记得加1
}
else sum=day;
for(i=0;i<mouth-1;i++)
sum+=a[i];
if(year<1||mouth<1||mouth>12||isday(day,mouth,year))
{
puts("输入错误,请重新输入:");
sign=1;
}
}while(sign);
printf("为第%d天\n",sum);
}