开始学编程永远都会遇到的一个程序 (打印当前输入的日期为第几年的第几天)

相信学习编程的朋友,学到循环的时候肯定都会遇到这个问题

有的可能不会遇到,但是不要担心,因为你看我写的时候就已经遇到了

首先,既然要判断这是第几年的第几天

我们首先想到的肯定是先判断当前的月份为几对不对?

当然你要是说你一下就想到要分闰年和平年那就说明你思维很灵活,有未雨绸缪之心

那言归正传,一年十二个月,我们肯定先想到switch啊,为什么呢?

因为switch是单选啊对不对,而且switch有一个让我们特别喜欢的机制啊

那就是如果不加break的时候,一个case成立了,剩下的case依次执行直到遇到break才停止啊

你看多好,那我们的程序框架是不是就可以写成如图所示了

(注:定义年份为year 月份为month 日期为 day 将要输出的第几天为  today)  

那为什么是从大到小排序呢?

答案当然就是因为我们想要的效果是判断月份之后,把比它小的所有月份的天数相加,

如果反过来的话达不到我们想要的效果,当然不相信的朋友也可以去尝试一下,看看会是什么效果

那剩下的是不是就是看看我们应该怎么相加了对吧

假设咱输入的月份为当年的 1 月,那today是不是就是我们的day啊  

case 1:里面就可以写 today = today + day;

再次假设咱们输入的月份为2 ,那today是不是就是我们1月的天数再加上我们的day

所以case 2:里面是不是就是 today = today + 31+day;

那刚才说道我们switch的机制就是:如果一个case里边不加break就会执行当前case和后边所有case里的内容,直到遇到break为止对不对

那么我们的case 2:里面是不是就可以直接写today = today + 31啊,执行完case 2:接着执行case 1:得到today = today + 31 +day;的效果

相信可以看出来我们case:里面加的是我们上一个月的天数对不对

那么接下来我们就应该假设我们输入的是3月了对不对

你看这就遇到开始说到的闰年和平年的问题了对不对,要不然怎么会说是未雨绸缪呢

那么闰年和平年的区别不就是年份能被4整除但是不能被100整除,或者能被400整除的年份为闰年,反之则不是

那么写出来就如下

因为根据上边判断case 3:里面加的是2月的天数所以我们应该把这个代码写在3月里边

依次类推我们剩下的case里边内容也就写出来了,接下来是整个源代码了

好这是我们的第一感觉用switch做;那有些人可能会说  那我第一感觉不是switch

那没有关系,那咱就算这是你的第二感觉

接下来我们将使用for循环来再写一次

那我们既然是求到当前月之前的所有月份的天数和

那我们for框架是不是就可以定义为

这样month之前有几个月是不是就循环多少次啊,加的个数是正确的对吧

因为是当前月之前,所以小于输入的月份month

要注意现在我们的循环变量( i )就变成了我们要判断的月份(一定注意要对( i )进行判断,不是对month进行判断了

具体代码如下

如此看来选择的方式不同,代码量会有很大的不同

所以遇到问题还是需要考虑实现的繁简程度,再决定实现方法吧

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值