知今日,欲知三日后

316 阅读3分钟

C语言趣味编程

已知今天日期,输出三天后的日期(一)

题目来源

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」 这个例程参考了C语言程序设计。

书中描述的是计算明天的日期,我觉得这个非常有意思,就稍微修改了一下题目,希望自己能够把融合函数以及结构体部分的知识,逐渐掌握C语言,提高编程能力

题目解析

初看题目,觉得非常简单,因为在我们的思维中,计算三天后的日期不就随便加上三天吗?但是,我们往往忽略月份以及年份之间的临界点,对于计算机来说,理解起来还是还是困难

我的分析思路:首先,找到变量,很明显的,变量是日期,但是C语言中没有日期这样一种变量类型,于是得我们自己创建这样一个结构体变量,也就是说,凡是C语言没有的变量类型,我们都可以自己创建。日期是由年、月、日组成,而年月日也是变量,得先定义日期这样一个结构体变量类型,其结构体包含年、月、日三个变量,如下:


//定义日期变量类型

struct date{

int year;

int month;

int day;

};

现在有了日期的变量类型,在C语言中表现为date,说明,我们具备在内存里面利用date来开辟一些内存空间的权利了,在其开辟的内存空间,其存放的是date变量;

现在开辟两块块内存空间给我们自己用,一块把它命名为today,其表示存放今天的日期,今天的年月日;另外一块为afterThreeDays,其表示存放三天后的日期


struct date today,afterThreeDays;

另外得想办法输入今天的日期,输出三天后的日期,于是


scanf("%i%i%i",today.year,today.month,today.day);

printf("三天后日期:\nyear:%i\nmonth:%i\nday:%i\n",afterThreeDays.year,afterThreeDays.month,afterThreeDays.day);

接下来,就考验思维是否缜密了。

通过上面的操作,我们有变量,有输入,有输出,但是问题是如何从输入变到输出,并且要符合我们现实生活中的规则,也就是说,要通过加减乘除异或以及选择判断循环这一系列操作来使输入变到输出。

那么在现实中,输入到输出是一个怎么样的规则呢?

首先直接并很容易能考虑到最普遍的情况,直接+3,比如今天是2022年1月17日,三天后就是2022年1月20日;

这个过程在C语言中这样描述:


afterThreeDays.year=today.year;

afterThreeDays.month=today.month;

afterThreeDays.day=today.day+3;

现在考虑第二种情况,现实好像并不是都能直接+3,比如当在月底的时候,今天是2021年9月30日,那么三天后,其在现实中日期是2021年10月3日,这种跨月份这种情况该如何处理呢?

见下期。