C语言小程序(三)、判断两个日期之差

来源:互联网 发布:js 发布者订阅者模式 编辑:程序博客网 时间:2024/05/24 16:13

输入两个日期,计算之间相差多少天。 用了两种方法实现,第二种利用结构体,代码比较清晰,其余的都一样。

1.普通的写法

#include <stdio.h>int leapyear(int year){if((year%4==0 && year%100!=0) || year%400==0)return 1;else return 0;}int days(int *day1, int *day2){int i=0;int *tmp;int diff = 0;const int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};if(day1[0] == day2[0]){if(day1[1] == day2[1]){diff = day1[2] - day2[2];diff = (diff < 0)?(-diff):diff;}else{if(day1[1] < day2[1])//day1=1991-5-8   day2=1991-6-2{tmp = day1;//day1=1991-6-2   day2=1991-5-8day1 = day2;day2 = tmp;}for(i=day2[1]+1; i<day1[1]; i++){diff +=  month[i];}diff += month[day2[1]] - day2[2] + day1[2];if(day2[1] <= 2 && day1[1] >2)if(leapyear(day2[0]))diff++;}}else{if(day1[0] < day2[0]){tmp = day1;day1 = day2;day2 = tmp;}for(i=day2[0]+1; i<day1[0]; i++){if(leapyear(i))diff += 366;elsediff += 365;}for(i=day2[1]+1; i<=12; i++)//day1=1992-1-1   day2=1991-1-1{diff += month[i];}diff += (month[day2[1]] - day2[2]);if(day2[1] <= 2)if(leapyear(day2[0]))diff++;for(i=1; i<day1[1]; i++){diff += month[i];}diff += day1[2];if(day1[1] > 2)if(leapyear(day1[0]))diff++;}return diff;}int main(){int day1[3], day2[3];int day = 0;printf("输入日期:");scanf("%d-%d-%d",&day1[0], &day1[1], &day1[2]);printf("输入另一个日期:");scanf("%d-%d-%d",&day2[0], &day2[1], &day2[2]);day = days(day1, day2);printf("两个日期之间共有%d天。\n",day);return 0;}

2.利用结构体,代码更整洁一些

#include <stdio.h>typedef struct date{int year;int month;int day;}DATE; int leapyear(int year){if((year%4==0 && year%100!=0) || year%400==0)return 1;else return 0;}int compare(DATE *d1, DATE *d2)//如果第一个日期比第二个日期大,交换日期{DATE *tmp;if(d1->year == d2->year)//年数相等{if(d1->month > d2->month)//月数相等{tmp = d1;d1 = d2;d2 = d1;}else if(d1->month == d2->month)//日期相等{if(d1->day > d2->day){tmp = d1;d1 = d2;d2 = d1;}}}else if(d1->year > d2->year){tmp = d1;d1 = d2;d2 = tmp;}return 0;}int diff(DATE *date1, DATE *date2){int i;int diff = 0;const int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};if(date1->year == date2->year){if(date1->month == date2->month){diff = date2->day - date1->day;}else{for(i=date1->month+1; i<date2->month; i++){diff += month[i];}diff += month[date1->month] - date1->day + date2->day;if(leapyear(date1->year))if(date1->month <=2 && date2->month >2)diff++;}}else{for(i=date1->year+1; i<date2->year; i++){if(leapyear(i))diff += 366;else diff += 365;}for(i=date1->month+1; i<=12; i++)//date1距离年末多少天{diff += month[i];}diff += month[date1->month] - date1->day;if(date1->month <= 2)if(leapyear(date1->year))diff++;for(i=1; i<date2->month; i++)//date2距离年初多少天{diff += month[i];}diff += date2->day;if(date1->month > 2)if(leapyear(date2->year))diff++;}return diff;}int main(){int days = 0;DATE day1, day2;DATE *date1, *date2;date1 = &day1;date2 = &day2;printf("输入日期:");scanf("%d-%d-%d",&(date1->year), &(date1->month), &(date1->day));printf("输入另一个日期:");scanf("%d-%d-%d",&date2->year, &date2->month, &date2->day);compare(date1, date2);days = diff(date1, date2);printf("两个日期之间共有%d天。\n",days);return 0;}

原创粉丝点击