【C语言】结构体 日期增加一天

给定如下定义:
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;

http://t.csdnimg.cn/zfLkJ

每个月的天数不同,故直接把各个月列出,不知道还有没有更好的改进方法。

#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",&current_date->year,&current_date->month,&current_date->day);
}
void increment_date(struct date_rec *current_date)
{
    if((current_date->year%100!=0&&current_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;
}
  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用C语言结构体表示万年历节假日的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义结构体表示节假日 struct Holiday { int month; // 月份 int day; // 日期 char name[20]; // 节假日名称 }; // 定义结构体表示某一天的信息 struct Day { int year; // 年份 int month; // 月份 int day; // 日期 int week; // 星期几 struct Holiday holiday; // 节假日信息 }; // 定义结构体表示某一月的信息 struct Month { int year; // 年份 int month; // 月份 int days; // 该月天数 struct Day days_info[42]; // 该月每一天的信息 }; // 定义结构体表示某一年的信息 struct Year { int year; // 年份 struct Month months[12]; // 该年每个月的信息 }; // 初始化节假日信息 void init_holiday(struct Holiday *holiday, int month, int day, char *name) { holiday->month = month; holiday->day = day; strcpy(holiday->name, name); } // 初始化某一天的信息 void init_day(struct Day *day, int year, int month, int day_num, int week, struct Holiday holiday) { day->year = year; day->month = month; day->day = day_num; day->week = week; day->holiday = holiday; } // 初始化某一月的信息 void init_month(struct Month *month, int year, int month_num, int days, struct Day *days_info) { month->year = year; month->month = month_num; month->days = days; memcpy(month->days_info, days_info, sizeof(struct Day) * 42); } // 初始化某一年的信息 void init_year(struct Year *year, int year_num, struct Month *months) { year->year = year_num; memcpy(year->months, months, sizeof(struct Month) * 12); } int main() { // 初始化节假日信息 struct Holiday new_year_day, spring_festival, tomb_sweeping_day; init_holiday(&new_year_day, 1, 1, "元旦"); init_holiday(&spring_festival, 1, 1, "春节"); init_holiday(&tomb_sweeping_day, 4, 4, "清明节"); // 初始化某一月的信息 struct Day days_info[42]; init_day(&days_info[0], 2022, 1, 1, 5, new_year_day); init_day(&days_info[1], 2022, 1, 2, 6, new_year_day); // ...省略其他日期的初始化 struct Month january; init_month(&january, 2022, 1, 31, days_info); // 初始化某一年的信息 struct Month months[12] = {january, /* ...省略其他月份的初始化 */}; struct Year year; init_year(&year, 2022, months); // 输出2022年1月1日的节假日名称 printf("%s\n", year.months[0].days_info[0].holiday.name); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值