c语言中日期的字符类型,C语言日期函数,日期处理函数

定义一个表示日期的结构体类型,再分别定义函数完成下列功能:计算某一天是对应年的第几天,这一年一共多少天;计算两个日期之间相隔的天数。两个日期由键盘输入。

算法思想

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

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

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

程序由 6 个函数构成,yearday() 函数计算某年的天数,monthday() 函数计算某年二月份的天数,dayofyeaK() 函数计算某日期是某年的第几天,cmpdate() 函数比较两个日期的大小,interday() 函数计算两个日期之间的天数;dayofyear() 函数调用 monthday() 函数,interday() 函数调用 cmpdate() 函数、yearday() 函数、dayofyear() 函数;主函数调用 yearday() 函数、dayofyear() 函数、interday() 函数。

程序代码

#include

#include

typedef struct

{

int year,month,day;

}Date;

int yearday(int year)

{

int yday;

if(year%4==0&&year%100!=0||year%400==0)

yday=366;

else

yday=365;

return yday;

}

int monthday(int year)

{

int mday;

if(year%4==0&&year%100!=0||year%400==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

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 的变量。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值