当前位置:首页 > 实用技巧 >

c语言输入日期计算天数(c语言输入年月日计算几天)

来源:原点资讯(www.yd166.com)时间:2023-06-24 18:35:46作者:YD166手机阅读>>

定义一个表示日期的结构体类型,再分别定义函数完成下列功能:

✿ 计算某一天是对应年的第几天,这一年一共多少天;

✿ 计算两个日期之间相隔的天数。两个日期由键盘输入。

算法思想

设定结构体类型表示日期类型名为 Date,利用 typedef 将其定义为日期型类型名,有三个整型类型的成员分别表示年、月、日。

设定函数计算输入的日期是这一年的第几天。函数的形参为日期型变量,函数体中设定整型数组存放每个月的天数,二月份的天数为 28 天;设定函数判断年份是否为闰年以决定二月份的天数。根据输入的日期月份,在数组中将相应的月份天数求和,假日曰期即为天数。

设定函数完成两个日期的比较,比较形参 d 和 s 两个日期的大小。首先比较年,同年的比较月,同月的比较日。变量 start 保存输入的小的日期年份,end 保存输入日期大的年份,然后计算两个日期之间的天数。

程序由 6 个函数构成:

yearday() 函数计算某年的天数,

monthday() 函数计算某年二月份的天数,

dayofyeaK() 函数计算某日期是某年的第几天,

cmpdate() 函数比较两个日期的大小,

interday() 函数计算两个日期之间的天数;

dayofyear() 函数调用 monthday() 函数;

interday() 函数调用 cmpdate() 函数、yearday() 函数、dayofyear() 函数;

主函数调用 yearday() 函数、dayofyear() 函数、interday() 函数。

程序代码

#include <stdio.h> #include <math.h> typedef struct { int year,month,day; }Date; int yearday(int year) { int yday; if(year%4==0&&year0!=0||year@0==0) yday=366; else yday=365; return yday; } int monthday(int year) { int mday; if(year%4==0&&year0!=0||year@0==0) mday=29; else mday=28; return mday; } int dayofyear(Date d) { int i,total=0; int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; months[2]=monthday(d.year); for(i=1;i<d.month;i ) total=total months[i]; total=total d.day; return total; } int cmpdate(Date d,Date s) { int result; if(d.year==s.year) { if(d.month==s.month) { if(d.day==s.day) result=0; else result=d.day-s.day; } else result=d.month-s.month; } else result=d.year-s.year; return result; } int interday(Date d,Date s) { int result,te,ts,total; int year,start,end,day; int i; result=cmpdate(d,s); if(result>0) { start=s.year; end=d.year; te=dayofyear(d); ts=dayofyear(s); } else if(result<0) { start=d.year; end=s.year; ts=dayofyear(d); te=dayofyear(s); } else return 0; if(start==end) return abs(te-ts); else { total=0; for(i=start;i<=end;i ) { day=yearday(i); if(i==start) total=total day-ts; else if(i==end) total=total te; else total=total day; } } return total; } int main() { Date d1,d2; int y,n; printf("input date:"); scanf("%d%d%d",&d1.year,&d1.month,&d1.day); scanf("%d%d%d",&d2.year,&d2.month,&d2.day); y=yearday(d1.year); n=dayofyear(d1); printf("%d days %d\n",d1.year,y); printf("%d-%d-%d is the %d day.\n",d1.year,d1.month,d1.day,n); n=interday(d1,d2); printf("%d-%d-%d and %d-%d-%d distance ",d1.year,d1.month,d1.day,d2.year,d2.month,d2.day); printf("%d days\n",n); return 0; }调试运行结果

输入 2009 年 2 月 1 日和 2015 年 2 月 1 日,程序运行结果如下所示:

input date:2009 2 1 2015 2 1

2009 days 365

2009-2-1 is the 32 day.

2009-2-1 and 2015-2-1 distance 2191 days

总结

结构体变量作为函数参数可以有以下两种形式。

① 结构体变量的成员作为函数的实参,则对应定义函数的形参为普通变量或数组。

如实例程序代码中的“y=yearday(d1.year);”“months[2]=monthday(d.year);”两条语句,调用函数的实参分别为结构体变量 d1 和 d 的成员 year;

对应的被调用函数 yearday()、monthday() 的形参都为 int year,是普通的整型变量。

② 函数的实参为结构体变量,则对应函数的形参应该也是结构体变量,其传递方式和普通变量一样,采用的是值传递方式。

如程序代码中的 dayofyear()、cmpdate() 和 interday() 函数的形参均为结构体 Date 的变量,在程序调用时实参也为结构体 Date 的变量。

c语言输入日期计算天数,c语言输入年月日计算几天(1)

不管你是转行也好,初学也罢,进阶也可,如果你想学编程,进阶程序员~

【值得关注】我!

全栈程序员正在等你加入~

栏目热文

知道天数怎样快速算出日期

知道天数怎样快速算出日期

日常工作中,我们经常会遇到已知开始日期和相隔的天数,月数,年数,求结束日期。例如,新员工转正日期,劳动合同到期日,员工退...

2023-06-24 17:56:27查看全文 >>

日期自动加天数(日期自动加28天公式)

日期自动加天数(日期自动加28天公式)

日期和时间的本质在EXCEL中日期和时间在本质上也是一个数值,只是外观形式是一种日期格式的样子,在EXCEL中1900年...

2023-06-24 18:35:29查看全文 >>

怎么计算两个日期之间天数(两个日期怎么计算月份)

怎么计算两个日期之间天数(两个日期怎么计算月份)

在我们日常工作中,有时用到日期的计算,比如:项目从开工到结束用时几年、离合同到期日还有多少天等等,这些我们都可以利用Ex...

2023-06-24 18:42:09查看全文 >>

怎么计算日期加天数得到日期(怎么用日期加天数计算日期)

怎么计算日期加天数得到日期(怎么用日期加天数计算日期)

日期数据是Excel中很重要的一类数据,很多分析都依赖于日期的计算。但是,大多数Excel使用者都对日期计算的方法不太熟...

2023-06-24 18:13:04查看全文 >>

时间日期间隔计算器(时间日期间隔计算器2345)

时间日期间隔计算器(时间日期间隔计算器2345)

每天都用电脑办公,你是否经常用到或者注意过Windows系统自带的计算器,目前,Windows自带的计算器在功能方面有所...

2023-06-24 17:54:09查看全文 >>

日期如何自动加天数(wps自动计算日期天数)

日期如何自动加天数(wps自动计算日期天数)

DATEDELTA(日期加减):将指定日期加/减指定天数。编辑页面含义:将指定日期加/减指定天数。示例:DATEDELT...

2023-06-24 18:04:56查看全文 >>

起止日期自动计算天数(知道起止日期)

起止日期自动计算天数(知道起止日期)

做销售的小伙伴们都知道,每个月都会制定一个销售目标。在统计数据时也要经常查看进度,以此调整销售策略,这就不避免的要了解当...

2023-06-24 18:38:31查看全文 >>

怎么计算日期与日期之间的天数(知道两个日期如何计算天数)

怎么计算日期与日期之间的天数(知道两个日期如何计算天数)

在Excel表格应用中我们该如何计算两个日期之间的年份、月数、天数差呢?如下图,该如何计算员工在职日期呢?其实计算方法很...

2023-06-24 17:54:18查看全文 >>

王者荣耀长歌本人照片(王者荣耀长歌真人到底是谁)

王者荣耀长歌本人照片(王者荣耀长歌真人到底是谁)

​​​​昵称:长歌年龄:22性别:男UUID:2772611陪玩项目:王者荣耀 ,语音聊天。 哄睡叫醒Y酱今天采访到了“...

2023-06-24 18:21:14查看全文 >>

王者荣耀长歌存在吗(荣耀王者小说长歌原型)

王者荣耀长歌存在吗(荣耀王者小说长歌原型)

此时。学校旁边的快捷酒店内。张豪愤怒的将手机扔在床上。“靠!被这孙子给阴了!”坐在一旁的陈菲儿一脸茫然的看着手机:“不对...

2023-06-24 18:42:52查看全文 >>

文档排行