【两日一练】学习记录
题目
- 编写程序,输入两个日期(年、月、日,年、月、日),输出这两个日期之间相隔多少天。
思路
要求任意两个日期相差的天数,首先要求出两年直接相差的天数,然后分别计算每个日期距离自己的年初有多少天。最后通过如下公式即可求出天数。
总天数 = year1和year2相差天数 + date2距离年初的天数 - date1距离年初的天数
代码
#define _CRT_SECURE_NO_WARNINGS // _crt_secure_no_warnings #include <stdio.h> #include <stdlib.h> int isleap(int year); int main() { int i,j; int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int year[2],month[2],day[2],data; int sum[2]={0},days=0; for(i=0;i<2;i++) { printf("请输入第%d日期:\n",i+1); yea: printf("年:"); scanf("%d",&year[i]); if(year[i]>9999 || year[i]<=0) { printf("请输入正确的年份\n"); goto yea; } mon: printf("月:"); scanf("%d",&month[i]); if(month[i]<=0 || month[i]>12) { printf("请输入正确的月份\n"); goto mon; } da: printf("日:"); scanf("%d",&day[i]); if(day[i]<=0 || day[i]>28) { if(2==month[i]) { data=isleap(year[i]); if(data) { if(29!=day[i]) { printf("请输入正确的日期\n"); goto da; } }else{ printf("请输入正确的日期\n"); goto da; } }else if(4==month[i] || 6==month[i] || 9==month[i] || 11==month[i]) { if(day[i]>30 || day[i]<=0) { printf("请输入正确的日期\n"); goto da; } }else if(day[i]>31 || day[i]<=0) { printf("请输入正确的日期\n"); goto da; } } } for(i=0;i<2;i++) { for(j=1;j<month[i];j++) { sum[i]=sum[i]+a[j]; } sum[i]+=day[i]; data=isleap(year[i]); if(data && month[i]>2) { sum[i]+=1; } } for(i=year[0];i<year[1];i++) { if(isleap(i)) { days+=366; }else{ days+=365; } } days=days+sum[1]-sum[0]; printf("相差%d天\n",days); system("pause"); } //判断是否为闰年 int isleap(int year) { if(0==year%4 && 0!=year%100 || 0==year%400) return 1; else return 0; }
执行结果