当前位置:首页 » 编程语言 » c语言日期计算

c语言日期计算

发布时间: 2023-01-02 07:04:48

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);
}

热点内容
为什么租凭服务器不能玩了 发布:2025-07-04 09:03:01 浏览:982
安卓手机减肥软件哪个好 发布:2025-07-04 08:51:17 浏览:994
Oracle查看数据库归档 发布:2025-07-04 08:44:53 浏览:606
950买什么配置好 发布:2025-07-04 08:39:39 浏览:607
怎样给应用加密 发布:2025-07-04 08:38:41 浏览:456
python的注释符号 发布:2025-07-04 08:29:19 浏览:127
守望领域门禁密码是多少 发布:2025-07-04 08:16:22 浏览:333
存储芯片价格 发布:2025-07-04 08:16:20 浏览:356
大地球源码 发布:2025-07-04 08:10:29 浏览:167
棋牌手游源码 发布:2025-07-04 08:10:18 浏览:818