一級基礎(chǔ)科目(一)輔導---控制語句

字號:

六、控制語句
     一般情況下,F(xiàn)ORTRAN程序是按語句順序執(zhí)行的,但需要時,可以改變這種順序。
     這種改變可以通過各種控制轉(zhuǎn)移語句、邏輯條件語句等來實現(xiàn)。
     (一)轉(zhuǎn)移語句
     1.無條件轉(zhuǎn)移語句
     無條件轉(zhuǎn)移語句的一般形式為:
     GOTO n
     當程序流程到達GOTO語句時,隨后就轉(zhuǎn)向語句標號為n的語句。標號為n的語句必須是可執(zhí)行語句,但它在程序中的排列位置,可以在引導到它的GOTO語句之后,也可以在該GOTO語句之前。無條件轉(zhuǎn)移語句常和其他控制語句結(jié)合起來使用。
     2.算術(shù)條件轉(zhuǎn)移語句
     算術(shù)條件轉(zhuǎn)移語句的一般形式為:
     IF (e) n1,n2,n3
     其中,e必須是算術(shù)表達式,當表達式運算結(jié)果e<0時,程序轉(zhuǎn)向標號為n1的語句;當e=0時,轉(zhuǎn)向標號為心的語句;當e>0時,轉(zhuǎn)向標號為n3的語句。
     例如,計算邊長為B的正方形中挖去半徑為R的圓后的面積,若B<2R,則給出相關(guān)信息。該問題的FORTRAN程序可用算術(shù)條件轉(zhuǎn)移語句編寫如下。
     c Computation Of area.
     READ*,B,R
     IF(B-2*R) 5, 15, 15
     5 WRITE(*,10)
     10 FORMAT(’Error message:Bless than 2*R)
     GOT0 20
     15 AREA=B*B-3.14159*R*R
     WRITE*,AREA
     20 CONTINUE
     END
     本例中,在算術(shù)條件轉(zhuǎn)移語句的第1個分支后,使用了GOTO語句;倘沒有此語句,則程序按順序仍會執(zhí)行標號為15的語句,從而得出不正確的結(jié)果。
     3.計算轉(zhuǎn)移語句
     計算轉(zhuǎn)移語句的一般形式為:
     GOTO(n1,n2,……,nm),e
     其中,ni(i=1,2,……,m)是被轉(zhuǎn)向的語句標號,共m個;e是一個整型算術(shù)表達式,其值不得小于1且不得大于m。當e的值等于1時,程序轉(zhuǎn)向標號n1的語句,當e的值等于2時轉(zhuǎn)向標號心的語句,當e的值為m時轉(zhuǎn)向標號為nm的語句。整型算術(shù)表達式e前的逗號可以省略。計算轉(zhuǎn)移語句通常也和GOTO語句結(jié)合起來使用。
     例如,有如下一個程序:
     READ*,M
     GOTO(20;30,40,50)M
     20 N=M
     GOTO 60
     30 N=M*2
     GOT0 60
     40 N=M*3
     GOT0 60
     50 N=M*4
     60 WRITE*,N
     END
     程序運行時,若輸入1,則轉(zhuǎn)向標號為20的語句,X的值為1;若輸入2,則轉(zhuǎn)向標號為30的語句,X的值為4;輸入3,轉(zhuǎn)向標號為40的語句,X的值為9,輸入4,轉(zhuǎn)向標號為50的語句,X的值為16。
     (二)邏輯條件語句
     1.邏輯IF語句
     邏輯IF語句用來實現(xiàn)選擇結(jié)構(gòu)。它的一般形式為:
     IF(邏輯表達式) 內(nèi)嵌語句
     其中內(nèi)嵌語句是單獨的一個可執(zhí)行語句。邏輯IF語句執(zhí)行時,首先計算邏輯表達式的值,如果邏輯表達式的值為“真”,則執(zhí)行內(nèi)嵌語句,若內(nèi)嵌語句非轉(zhuǎn)移語句,則執(zhí)行該語句后繼續(xù)按順序往下執(zhí)行,若內(nèi)嵌語句是轉(zhuǎn)移語句,則轉(zhuǎn)向指定的語句;如果邏輯表達式的值為“假”,則不執(zhí)行內(nèi)嵌語句,而直接執(zhí)行該語句后面的語句。
     例如,從鍵盤讀人一個代表百分制成績的數(shù)據(jù),如果數(shù)據(jù)在90—100之間就輸出
     ‘Excellent’,在80—89之間輸出‘Good’,在60—79之間輸出‘Pass’,在60以下則輸出‘Not pass’。其程序可以如下編寫:
     READ(*.*)IPOINT
     IF(1POINT.GT.100.OR.IPOINT.LT.0) WRITE(*,*)’DATAERROR’
     1F(1POINT.GE.90.AND.IPOINT.LE.100) WRITE(*,*)’Excellent’
     IF(1POINT.GE.80.AND.IPOINT.LT.89) WRITE(*,*)’Good’
     IF(1POINT.GE.60.AND.IPOINT.LT.79) WRITE(*,*)’Pass’,
    , IF(1POINT.GE.0.AND.IPOINT.LT.59) WRITE(*,*)’Not Pass’
     END
     2.塊IF結(jié)構(gòu)的各種形式
     (1)塊IF和ENDIF形式
     IF(邏輯表達式)THEN
     語句塊
     ENDIF
     當邏輯表達式的值為“真”時,執(zhí)行語句塊,否則按順序執(zhí)行ENDIF后的語句。例如,
     如下程序段:
     READ*,RN,AN
     IF(RN.GE.0.0.AND.AN.GT.0.0)THEN
     STRESS=RN/AN
     WRITE*,RN,AN,STRESS
     END
     當RN大于等于零且AN大于零時,執(zhí)行賦值語句和輸出語句。
     (2)使用ELSE的形式
     IF(邏輯表達式)THEN
     語句塊1
     ELSE
     語句塊2
     ENDIF.
     當邏輯表達式的值為“真”時,執(zhí)行語句塊1,當邏輯表達式的值為“假”時,執(zhí)行語句塊2。由此可見,使用ELSE的形式,可以進行兩個分支的選擇。
     (3)使用ELSE IF的形式
     IF(邏輯表達式1)THEN
     語句塊1
     ELSE IF(邏輯表達式2)THEN
     語句塊2
     ELSE
     語句塊3
     ENDIF
     這種形式,允許在三個分支中作出選擇。當邏輯表達式1的值為“真”時,執(zhí)行語句塊1表示的分支;當邏輯表達式1的值為“假”而邏輯表達式2的值為“真”時,執(zhí)行語句塊2表示的分支;當邏輯表達式1的值和邏輯表達式2的值均為“假”時,執(zhí)行語句塊3表示的分支。
     3.塊IF結(jié)構(gòu)的嵌套
     在一個塊IF結(jié)構(gòu)的語句塊中,可以完整地包含另一個或多個塊IF結(jié)構(gòu),稱為塊IF 的嵌磁。塊的嵌套可以多層