给定如下定义: struct date_rec { int day ; int month ; int year ; } ; struct date_rec current_date ; 写一个程序包含如下的函数,完成: (a) 输入current_date的值: void input_date(struct date_rec *current_date) (b) 将current_date增加1天: void increment_date(struct date_rec *current_date) (c) 显示current_date的值: void output_date(struct date_rec *current_date) 考虑每个月的实际天数,同时也考虑闰年的情况。 **输入格式要求:"%d%d%d" 提示信息:"请输入当前日期(年 月 日):" **输出格式要求:"当前日期:%d年%d月%d日!" (加1天后的新日期) 程序运行示例: 请输入当前日期(年 月 日):2020 5 20 当前日期:2020年5月21日!
本题可以类比时间增加一秒的题,但注意增加后日期是1号不是0;
每个月的天数不同,故直接把各个月列出,不知道还有没有更好的改进方法。
#include <stdio.h>
#include <stdlib.h>
struct date_rec
{
int day ;
int month ;
int year ;
} ;
struct date_rec date ;
void input_date(struct date_rec *current_date)
{
printf("请输入当前日期(年 月 日):");
scanf("%d%d%d",¤t_date->year,¤t_date->month,¤t_date->day);
}
void increment_date(struct date_rec *current_date)
{
if((current_date->year%100!=0&¤t_date->year%4==0)||current_date->year%400==0)
{
if(current_date->month==2)
{
if(current_date->day==29)
{current_date->day=1;
current_date->month+=1;}
else
current_date ->day+=1;
}
else if(current_date->month==1||current_date->month==3||current_date->month==5||current_date->month==7||current_date->month==8||current_date->month==10||current_date->month==12)
{
if(current_date->day==31)
{current_date->day=1;
current_date->month+=1;}
else
current_date ->day+=1;
}
else if(current_date->month==4||current_date->month==6||current_date->month==9||current_date->month==11)
{
if(current_date->day==30)
{current_date->day=1;
current_date->month+=1;}
else
current_date ->day+=1;
}
}
else
{
if(current_date->month==2)
{
if(current_date->day==28)
{current_date->day=1;
current_date->month+=1;}
else
current_date ->day+=1;
}
else if(current_date->month==1||current_date->month==3||current_date->month==5||current_date->month==7||current_date->month==8||current_date->month==10||current_date->month==12)
{
if(current_date->day==31)
{current_date->day=1;
current_date->month+=1;}
else
current_date ->day+=1;
}
else if(current_date->month==4||current_date->month==6||current_date->month==9||current_date->month==11)
{
if(current_date->day==30)
{current_date->day=1;
current_date->month+=1;}
else
current_date ->day+=1;
}
}
}
void output_date(struct date_rec *current_date)
{
printf("当前日期:%d年%d月%d日!" ,current_date->year,current_date->month,current_date->day);
}
int main()
{
struct date_rec *current_date = &date;
input_date(current_date);
increment_date(current_date);
output_date(current_date);
return 0;
}