如下:
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;
}
