Fortran 例题收集

时间:2021-06-07 00:51:46

说明:

本文中的例题均来自书上(fortran 程序设计气象出版社), 若有侵权,请私信, 本人立即删除 , 此外本人对有些地方进行了稍微的改动, 比如大于, 小于号等, 因为气象领域的grads  更常见的是 .gt.  .lt. 


1

Fortran 例题收集

Fortran 例题收集

program choiece_structure_eg
implicit none
! ==============param===================
real rain
character*8 warning

! ============ main ========================
print*,'请输入降雨量:'
read*, rain

if (rain .gt.100) then
warning = '红色报警'
else if (rain .ge. 50) then
warning = '橙色报警'
else if(rain .ge. 25) then
warning = '黄色报警'
endif

write(*,100)warning
100 format(A8)

end


2

Fortran 例题收集

! 单分支
program sing_if
implicit none
! =============param===================
integer k
! =============main======================
read*, k
if (k .gt.0 ) then
print*, '这是一个正整数'
print*,'k=',k
end if

end


3

Fortran 例题收集

! 多分支
program sing_if
implicit none
! ==============param=============
real pH
real output_pH

! ==============main================
write(*,*)'Please input your pH value (请输入你的pH值)'
read*, pH

if (pH .lt. 5.6) then
write(*,100) pH
else
write(*,200) pH

end if
100 format(1X, 'pH=',F5.2,',is acid rain!')
200 format(1X, 'pH=',F5.2,',is not acid rain!')

end


4

Fortran 例题收集

! 单分支
program sing_if
implicit none
! ===========param==============
real r
! ============main=================
write(*,100)
read*, r
if (r .lt. 5) then
print 200 ! 注意此处的print , 没有*
else if (r .lt. 15) then
print 300
else if(r .lt. 30) then
print 400
else if (r .lt. 70) then
print 500
else if (r .lt. 140) then
print 600
else
print 700
end if

100 format(1X,'请输入12小时降雨量')
200 format(1X, '小雨')
300 format(1X, '中雨')
400 format(1X, '大于')
500 format(1X, '暴雨')
600 format(1X, '大暴雨')
700 format(1X, '特大暴雨')

end


5

Fortran 例题收集

! 单分支
program sing_if
implicit none
! =============param================
real x,y

! ===============main===================
write (*,100)
read(*,*)x
y=0.0
if (x .gt. 0.0) y=1
if (x .lt. 0.0) y=-1
write(*,200) y

100 format(1x,'please input x:')
200 format(1x,'Y=' , E15.4)

end


6

Fortran 例题收集

! 单分支
program sing_if
implicit none
! =============param===============
real wind_veclocity
! ==============main================
print*,'请输入风速:'
read*, wind_veclocity
select case(int(wind_veclocity*10)) ! 这里 乘 10, 是要吧记录的具有一位小数的风速
case(0,2) ! 变成 整数
print*, '零级'
print*, '无风'
case (3:15)
print*,'一级'
print*,'软风'
case (16:33)
print*,'2级'
print*,'轻风'
case (34:54)
print*,'3级'
print*,'微分'
case (55:79)
print*,'4级'
print*,'和风'
! 下面都一样, 只是范围不一样 , 风的名字也不一样罢了, 此处偷懒, 不写啦!!!

case default ! 若果输入的数据不在上面的任何一个范围内
print*,'非法数据' ! 那就执行这句
end select

end



7

Fortran 例题收集

略 (多层 if elseif else 嵌套就行了)


Fortran 例题收集


! 单分支
program sing_if
implicit none
! ============= param ===============
integer year,leap

! =========== main =======================
print*,'请输入年份'
read* ,year
if(mod(year , 4) .ne. 0) then
leap = 0
else if(mod(year,100) .ne. 0) then
leap = 1

else if(mode(year,400) .ne. 0)then
leap=0
else
leap = 1
end if

if (leap .eq. 1) then
write(*,100)year
else
write(*,200)year

end if
100 format(1X,I4,2X ,'是闰年')
200 format(1X,I4,2X, '不是闰年')

end


8

Fortran 例题收集

Fortran 例题收集

! 单分支
program sing_if
implicit none
! ============= param ===============
integer c,s
real p,w,d,f
! ================main=====================
print*,'请输入基本运费p , 货物重w'
read*,p,w,s
if (s>300) then
c = 12
else
c = s/250
end if

select case(c)
case(0)
d = 0
case (1,2)
d = 2
case(3,6)
d = 5
case (11)
d = 10
case (12)
d = 15
end select
f = p*(w*s*(1-d/100.0))
write (*,100) f
100 format(1X,'freight=',E15.4)

end

注意 : 12* 250 = 3000


9

计算 1!+ 2! +3! + 4! +5! 

program test
implicit none

integer :: i , fact = 1
real:: sum = 0
do i=1,5
fact = fact*i
print*,'第',i,'次',fact
sum = sum + fact
end do
print*,fact
print*,sum

end

注意, 一般计算很大的数字要用 real , 因为integer存放的位数有限, 所以 如果计算过大, 例如: i = 1, 100 , 最终得到的 sum 就是0 , 因为存不下了


10

Fortran 例题收集

program test
implicit none

real :: x, term = 1, e = 1.0
integer ::n ,i

read*, n,x
do i = 1,n
term = term *x/i
e = e + term
end do

end


11

这题挺不错的!!!!!!!!!!

Fortran 例题收集

program test
implicit none

integer :: n, i1,i2,i3,i,m = 0
! i1 代表百位, i2 代表十位 , i3 代表个位
do n = 100,200
i1 = n /100 ! 利用的就是 mod 取余数
i2 = (n - ((i1 * 100)))/10 ! 也可以直接 mod(n/10,10)
i3 = n - i1* 100 - i2*10 ! 也可以直接 mod(n,10)
i = i1 + i2 + i3
if ( i .eq. 10 ) then
m = m+1
print*,n
end if
end do

print*,"Time = ", m

end