邏輯運算
if命令需要和邏輯運算表達式搭配才能起到很好的效果。下面分別列出Fortran90和Fortran77的邏輯運算符。
| Fortran90 | Fortran77 | 符號描述 |
|---|---|---|
| == | .EQ. | 判斷兩個表達式是否相等 |
| /= | .NE. | 判斷兩個表達式是否不相等 |
| > | .GT. | 判斷是否大于 |
| >= | .GE. | 判斷是否大于或等于 |
| < | .LT. | 判斷是否小于 |
| <= | .LE. | 判斷是否小于或等于 |
集合運算符
| 符號 | 符號說明 |
|---|---|
| .AND. | 交集,兩邊表達式都為真時為真(二元運算符) |
| .OR. | 并集,有一個表達式為假則為假(二元運算符) |
| .NOT. | 取非,真值于后面表達式相反(單目運算符) |
| .EQV. | 相等,兩邊邏輯運算結(jié)果相同時為真(二元運算符) |
| .NEQV. | 不相等,兩邊邏輯運算結(jié)果不同時為真(二元運算符) |
邏輯運算符的優(yōu)先級高于集合運算符。
循環(huán)
循環(huán)的主要功能是精簡代碼?。?!有兩種格式,一種是固定循環(huán)n次,另一種是滿足條件時循環(huán)。主要有兩條語句,Do語句和Do-While語句。
請注意,循環(huán)并不一定要用循環(huán)語句才能實現(xiàn)。循環(huán)是一種將線狀程序濃縮塊狀化的思想。是一種編程思想?。。?!不是語句或者其他。
Do語句
語法如下:
do counter=initial,endnumber,increment
... ! counter計數(shù)器,從初始值開始,每循環(huán)一次加增量大小.
... ! endnumber計數(shù)器的終止,當計數(shù)器大于終止數(shù)時,循環(huán)停止
... ! increment 增量數(shù),每次循環(huán),給計數(shù)器加一個增量數(shù)
end do
在Fortran77中,會用行號來封裝循環(huán)。
do 100 counter=initial,endnumber,increment
... ! counter計數(shù)器,從初始值開始,每循環(huán)一次加增量大小.
... ! endnumber計數(shù)器的終止,當計數(shù)器大于終止數(shù)時,循環(huán)停止
... ! increment 增量數(shù),每次循環(huán),給計數(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為真時,一直執(zhí)行循環(huán)體。
......
end do
循環(huán)控制
循環(huán)控制語句主要有CYCLE和EXIT。cycle命令可以略過循環(huán)程序模塊中,cycle命令后面的所有程序代碼,直接跳到循環(huán)的開頭來進行下一次循環(huán)。exit的功能是直接跳出當前循環(huán),不論是do循環(huán)還是do-while循環(huán)。
循環(huán)還可以取“名字”,這個用途是可以在編寫循環(huán)時能明白的知道END DO這個描述的位置是否正確,尤其是在多層循環(huán)中,署名的循環(huán)也可以配合CYCLE、EXIT來使用。
循環(huán)應用實例
下面給出幾個循環(huán)的簡單實例:
實例1:計算Fibonacci sequences的前n項。)
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
實例2:以循環(huán)來計算$ \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
實例3:做一個加密、解密程序。
該程序摘自彭國倫《Fortran95程序設計》一書(p113,程序EX0612),原程序在排版時出現(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