说明:
本文中的例题均来自书上(fortran 程序设计气象出版社), 若有侵权,请私信, 本人立即删除 , 此外本人对有些地方进行了稍微的改动, 比如大于, 小于号等, 因为气象领域的grads 更常见的是 .gt. .lt.
1
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
! 单分支
program sing_if
implicit none
! =============param===================
integer k
! =============main======================
read*, k
if (k .gt.0 ) then
print*, '这是一个正整数'
print*,'k=',k
end if
end
3
! 多分支
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
! 单分支
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
! 单分支
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
! 单分支
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
略 (多层 if elseif else 嵌套就行了)
! 单分支
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
! 单分支
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
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
这题挺不错的!!!!!!!!!!
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