闰年的判断方法_Fortran 判断日期是此年的第几天

今天的作业是通过输入一个日期,判断该日期是此年的第几天。看到这个题目,我第一时间就想到了C#的DayOfYear方法和JAVA的Getdayofyear方法。

C#实现:是不是特别简单。

DateTime tt="2020-04-17";

int days=tt.DayOfYear;

可是Fortran没有这个方法,要判断天数还是有点难度,那我们应该如何实现呢?

首先,定义一个一维数组,包含每个月的天数(先按平年处理二月天数)。

integer::dayofmonth(12)=[31,28,31,30,31,30,31,31,30,31,30,31]

Fortran中数组的下标是从1开始,这一点与C#、JAVA从0开始的不一样。

第二步,需要判断输入的年份是否为闰年。

判断闰年的方法是能被4整除同时不能被100整除。或者能被400整除。即“四年一闰,百年不闰,四百又闰”。当判断是闰年时将数组中2月的天数改为29。

dayofmonth(2)=29 !下标是2

第三步,通过输入的月份将数组中前几个月的天数汇总,再加上输入的日子。

比如:输入的是“20200417”,先判断2020是否闰年,结果是闰年,则将数组中2月份天数改为29。输入的是04月,则将1月、2月、3月天数汇总得到91,再加上输入的日子17,最后结果是108,即得到结果:输入日期是该年的108天。

完整代码如下:

program test25    implicit none    character(len=8)::rq    integer::yy,mm,dd    integer::days=0    integer::dayofmonth(12)=[31,28,31,30,31,30,31,31,30,31,30,31] !定义每月天数的数组    write(*,*)"输入一个日期(YYYYMMDD):"    read(*,*)rq    ! 取输入年,月,日    read(rq(1:4),*)yy    read(rq(5:6),*)mm    read(rq(7:8),*)dd    if(((MOD(yy,4)==0).and.(MOD(yy,100)/=0)).or.(mod(yy,400)==0)) then  !判断是否为闰年        dayofmonth(2)=29        write(*,*)"此年是闰年!"    else        dayofmonth(2)=28        write(*,*)"此年是平年!"    end if    ! 输入日期的前几个月日数加本月日期    days=sum(dayofmonth(1:mm-1))+dd  !数组的前几个月天数加上本月天数    write(*,100)days100 format("此日期是当年的:",I3,"天")     pause    stopend program test25

运行代码,结果如下图。

7fa99040daae7104be60e99d01e0f0da.png

Fortran语言还是挺好玩的,虽然不是面向对象,可理解起来还是很容易。虽然很小众,但速度和效率还是很强大。尤其是对数值计算的功能较强,值得学生和科研人员好好学习。

0d02c7ad4069187b6b1bad263a0a5b28.png

Fortran我也是初学,好久不写代码了,欢迎朋友们指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值