邏輯運(yùn)算
if命令需要和邏輯運(yùn)算表達(dá)式搭配才能起到很好的效果檩奠。下面分別列出Fortran90和Fortran77的邏輯運(yùn)算符约素。
Fortran90 | Fortran77 | 符號描述 |
---|---|---|
== | .EQ. | 判斷兩個表達(dá)式是否相等 |
/= | .NE. | 判斷兩個表達(dá)式是否不相等 |
> | .GT. | 判斷是否大于 |
>= | .GE. | 判斷是否大于或等于 |
< | .LT. | 判斷是否小于 |
<= | .LE. | 判斷是否小于或等于 |
集合運(yùn)算符
符號 | 符號說明 |
---|---|
.AND. | 交集,兩邊表達(dá)式都為真時(shí)為真(二元運(yùn)算符) |
.OR. | 并集笆凌,有一個表達(dá)式為假則為假(二元運(yùn)算符) |
.NOT. | 取非圣猎,真值于后面表達(dá)式相反(單目運(yùn)算符) |
.EQV. | 相等,兩邊邏輯運(yùn)算結(jié)果相同時(shí)為真(二元運(yùn)算符) |
.NEQV. | 不相等乞而,兩邊邏輯運(yùn)算結(jié)果不同時(shí)為真(二元運(yùn)算符) |
邏輯運(yùn)算符的優(yōu)先級高于集合運(yùn)算符送悔。
循環(huán)
循環(huán)的主要功能是精簡代碼!Wδ!欠啤!有兩種格式,一種是固定循環(huán)n次屋灌,另一種是滿足條件時(shí)循環(huán)洁段。主要有兩條語句,Do語句和Do-While語句共郭。
請注意祠丝,循環(huán)并不一定要用循環(huán)語句才能實(shí)現(xiàn)疾呻。循環(huán)是一種將線狀程序濃縮塊狀化的思想。是一種編程思想P窗搿0段稀!叠蝇!不是語句或者其他璃岳。
Do語句
語法如下:
do counter=initial,endnumber,increment
... ! counter計(jì)數(shù)器,從初始值開始悔捶,每循環(huán)一次加增量大小.
... ! endnumber計(jì)數(shù)器的終止铃慷,當(dāng)計(jì)數(shù)器大于終止數(shù)時(shí),循環(huán)停止
... ! increment 增量數(shù)蜕该,每次循環(huán)枚冗,給計(jì)數(shù)器加一個增量數(shù)
end do
在Fortran77中,會用行號來封裝循環(huán)蛇损。
do 100 counter=initial,endnumber,increment
... ! counter計(jì)數(shù)器赁温,從初始值開始,每循環(huán)一次加增量大小.
... ! endnumber計(jì)數(shù)器的終止淤齐,當(dāng)計(jì)數(shù)器大于終止數(shù)時(shí)股囊,循環(huán)停止
... ! increment 增量數(shù),每次循環(huán)更啄,給計(jì)數(shù)器加一個增量數(shù)
100 continue
do循環(huán)可以嵌套稚疹。
do i=1,n
do j=1,n
do k=1,n
...
end do
end do
end do
Do-While循環(huán)
語法如下:
do while(rep)
...... ! 檔rep為真時(shí),一直執(zhí)行循環(huán)體祭务。
......
end do
循環(huán)控制
循環(huán)控制語句主要有CYCLE和EXIT内狗。cycle命令可以略過循環(huán)程序模塊中,cycle命令后面的所有程序代碼义锥,直接跳到循環(huán)的開頭來進(jìn)行下一次循環(huán)柳沙。exit的功能是直接跳出當(dāng)前循環(huán),不論是do循環(huán)還是do-while循環(huán)拌倍。
循環(huán)還可以取“名字”赂鲤,這個用途是可以在編寫循環(huán)時(shí)能明白的知道END DO這個描述的位置是否正確,尤其是在多層循環(huán)中柱恤,署名的循環(huán)也可以配合CYCLE数初、EXIT來使用。
循環(huán)應(yīng)用實(shí)例
下面給出幾個循環(huán)的簡單實(shí)例:
實(shí)例1:計(jì)算Fibonacci sequences的前n項(xiàng)梗顺。)
program main
implicit none
! input Fibonacci sequences
real*8::f(100)
integer::i,m
print*,"Please input the number you love"
read(*,*)m
i=1
! 數(shù)組置零泡孩,利用EXIT跳出循環(huán)
do while ( .true. )
f(i)=0
i=i+1
if(i>100) exit
end do
f(1)=0
f(2)=1
xunhuan: Do i=3,m,1
f(i)=f(i-1)+f(i-2)
End Do xunhuan
write(*,100)f(1:m)
100 format(T5,'The Fibonacci sequence are : ',/,5(F15.2))
end program
實(shí)例2:以循環(huán)來計(jì)算$ \frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+\frac{1}{4!}+\cdots+\frac{1}{10!} $
program main
implicit none
real::sum=0
integer::i,j
real*8::temp=1
outer: do i=1,10
inner:do j=1,i
temp=temp*j
end do inner
sum=sum+1.0/temp
temp=1
end do outer
write(*,"(F6.3)")sum
end program
實(shí)例3:做一個加密、解密程序寺谤。
該程序摘自彭國倫《Fortran95程序設(shè)計(jì)》一書(p113仑鸥,程序EX0612)吮播,原程序在排版時(shí)出現(xiàn)了書寫錯誤。該程序作了修改锈候。
program main
! 定義變量
implicit none
integer i
integer strlen
integer,parameter::key=2
character(len=60)::string
! 加密過程
write(*,*)"string:"
read(*,"(A60)") string
strlen=len(trim(string)) ! 取得字符串長度
do i=1,strlen
string(i:i)=char(ichar(string(i:i))+key)
end do
write(*,"('encoded:',A60)")string
! 解密過程
do i=1,strlen
string(i:i)=char(ichar(string(i:i))-key)
end do
write(*,"('string: ',A60)")string
stop
end program