输入一个日期startdate(年、月、日)和天数days(>=1),输出自该输入日期days天后的日期enddate(即edate=startdate+days)。要求输入和输出的年份为四位整数,输入时要对输入数据的有效性进行检查,并确保得到有效的输入数据。同时需耍考虑跨月、跨年和闰年等情况,闰年用自定义函数计算,日期用自定义结构体描述。
#include <stdio.h> // 自定义日期结构体 struct Date { int year; int month; int day; }; // 判断是否为闰年的函数 int isLeapYear(int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { return 1; // 是闰年 } else { return 0; // 不是闰年 } } // 计算日期加上指定天数后的日期的函数 struct Date calculateEndDate(struct Date startDate, int days) { struct Date endDate = startDate; while (days > 0) { // 计算当月的最大天数 int maxDaysInMonth; switch (endDate.month) { case 4: case 6: case 9: case 11: maxDaysInMonth = 30; break; case 2: if (isLeapYear(endDate.year)) { maxDaysInMonth = 29; } else { maxDaysInMonth = 28; } break; default: maxDaysInMonth = 31; } // 计算剩余天数 int daysToAdd = (days < maxDaysInMonth - endDate.day + 1) ? days : (maxDaysInMonth - endDate.day + 1); // 更新日期 endDate.day += daysToAdd; days -= daysToAdd; if (endDate.day > maxDaysInMonth) { endDate.day = 1; endDate.month++; } if (endDate.month > 12) { endDate.month = 1; endDate.year++; } } return endDate; } int main() { struct Date startDate, endDate; int days; // 输入年份、月份和日期 printf("请输入年份:"); scanf("%d", &startDate.year); printf("请输入月份:"); scanf("%d", &startDate.month); printf("请输入日期:"); scanf("%d", &startDate.day); // 输入要添加的天数 printf("请输入要添加的天数:"); scanf("%d", &days); // 计算结束日期 endDate = calculateEndDate(startDate, days); // 输出结果 printf("开始日期:%d年%d月%d日\n", startDate.year, startDate.month, startDate.day); printf("结束日期:%d年%d月%d日\n", endDate.year, endDate.month, endDate.day); return 0; }
标签:startDate,endDate,int,days,日期,计算,year,day From: https://www.cnblogs.com/daiang/p/17718445.html