C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:
Posted wannur
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}
以上是关于C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:的主要内容,如果未能解决你的问题,请参考以下文章