C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:...

如下:
typedef struct date
{
int year;
int month;
int day;
};
提示:
1.	使用如下函数完成相应功能
int isleapyear(int y); //计算是否为闰年
int islegal(Date x); //计算日期是否合法
int calcday(Date x);//计算日期是当年的第几天,用于计算两个日期之间天数的差值
2.	用于一维数组表示一年每月含有的天数
int dayofmonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
3.	需要考虑闰年的情况

输入:输入为两行,第一行为三个整数,表示第一个日期的年月日;第二行为三个整数,表示第二个日期的年月日。
输入提示信息:"Please input the first date:”
输入格式:"%d %d %d"
输入提示信息:"Please input the second date:”
输入格式:"%d %d %d"
如:
Please input the first date: 2016 2 30
Please input the second date:2016 5 10
或
Please input the first date: 2016 2 10
Please input the second date:2015 12 9
或
Please input the first date: 2016 5 1
Please input the second date:2015 6 1

输出:输出一行是一个整数,代表两个日期之间相差的天数。若两个日期不在同一年,或者日期不合法,输出-1。
输出提示信息:"Day between two dates:”
输出格式:"%d"
输出样例:
Day between two dates:-1
或
Day between two dates:-1
或
Day between two dates::-1

 

 

#include <stdio.h>
#include <math.h>
typedef struct date
{
int year;
int month;
int day;
}Date;
int isleapyear(int y);
int islegal(Date a);
int calcday(Date a);

int main(){
int i=1;

Date a;
Date b;
printf("Please input the first date:");
scanf("%d %d %d",&(a.year),&(a.month),&(a.day));
printf("Please input the second date:");
scanf("%d %d %d",&(b.year),&(b.month),&(b.day));
printf("Day between two dates:");

if(a.year != b.year){
printf("-1");
}else if(islegal(a)==-1 ||islegal(b)==-1){
printf("-1");
}else{
printf("%d",calcday(b)-calcday(a));
}

}
int isleapyear(int y){
int i=0;
if((y%4==0 && y%100!=0) || (y%400==0)){
i=1;
}
return i;
}
int islegal(struct date a){
int dayofmonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if(isleapyear(a.year)==1){
dayofmonth[1]++;
}
if(a.day<=dayofmonth[a.month-1] && a.day>0 && a.month>0 && a.month<13){
return 1;
}else{
return -1;
}

}
int calcday(struct date a){
int i,day=0;
int dayofmonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if(isleapyear(a.year)==1){
dayofmonth[1]++;
}
for(i=0;i<=a.month-2;i++){
day=dayofmonth[i]+day;
}
day=day+a.day;
return day;
}

转载于:https://www.cnblogs.com/wannur/p/6860535.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值