用Fortran写:键入在2000-2200年之间的人的出生和死亡具体日期,计算他经历过多少个2月29日、多少个闰年,输出到文件‘2023.dat’中,要有中文说明
时间: 2024-03-03 13:48:48 浏览: 60
您好,以下是使用Fortran语言编写的程序:
```
program count_leap_years
implicit none
integer :: birth_year, birth_month, birth_day, death_year, death_month, death_day
integer :: num_leap_years, num_feb_29s, i, year, feb_days
character(len=20) :: output_file
logical :: is_leap_year
! 获取出生和死亡日期
write(*, "(A)", advance="no") "请输入出生日期(格式:YYYY MM DD):"
read(*, *) birth_year, birth_month, birth_day
write(*, "(A)", advance="no") "请输入死亡日期(格式:YYYY MM DD):"
read(*, *) death_year, death_month, death_day
! 计算经历过的闰年和2月29日的个数
num_leap_years = 0
num_feb_29s = 0
do year = birth_year, death_year
! 判断是否为闰年
is_leap_year = (mod(year, 4) == 0 .and. (mod(year, 100) /= 0 .or. mod(year, 400) == 0))
! 统计闰年个数
if (is_leap_year) then
num_leap_years = num_leap_years + 1
end if
! 统计2月29日的个数
if (is_leap_year) then
feb_days = 29
else
feb_days = 28
end if
if (year == birth_year) then
do i = birth_month, 12
if (i == 2 .and. birth_day == 29) then
num_feb_29s = num_feb_29s + 1
end if
end do
else if (year == death_year) then
do i = 1, death_month
if (i == 2 .and. death_day >= 29) then
num_feb_29s = num_feb_29s + 1
end if
end do
else
do i = 1, 12
if (i == 2) then
num_feb_29s = num_feb_29s + 1
end if
end do
end if
end do
! 输出结果到文件
output_file = "2023.dat"
open(unit=10, file=output_file, status="replace")
write(10, "(A,I0)", advance="no") "经历过的闰年个数:", num_leap_years
write(10, "(A,I0)", advance="no") "经历过的2月29日个数:", num_feb_29s
close(10)
! 输出结果到屏幕
write(*, "(A,I0)") "经历过的闰年个数:", num_leap_years
write(*, "(A,I0)") "经历过的2月29日个数:", num_feb_29s
end program count_leap_years
```
程序中会提示用户输入出生日期和死亡日期,然后计算经历过的闰年个数和2月29日的个数,并将结果输出到文件`2023.dat`中。程序中使用了中文注释和中文输出,以方便理解。
注意,程序中的日期格式为`YYYY MM DD`,其中`YYYY`表示年份,`MM`表示月份,`DD`表示日期。如果您需要修改日期格式,请相应地修改程序中的读取和处理日期的部分。
阅读全文