FORTRAN 語言程序設(shè)計課件_第1頁
FORTRAN 語言程序設(shè)計課件_第2頁
FORTRAN 語言程序設(shè)計課件_第3頁
FORTRAN 語言程序設(shè)計課件_第4頁
FORTRAN 語言程序設(shè)計課件_第5頁
已閱讀5頁,還剩189頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

格式輸入輸出格式輸入輸出概述格式輸出語句與格式編輯符格式輸入語句與格式編輯符輸入輸出語句與格式語句的相互作用在輸入輸出語句中包含格式說明輸入輸出概述數(shù)據(jù)的輸入輸出是程式的重要組成部分。在前面我們使用表控方式進(jìn)行輸入和輸出。我們希望按照自己所要求的格式來進(jìn)行輸入輸出。輸入輸出:是指在電腦記憶體與外部設(shè)備之間傳送數(shù)據(jù)的過程。從外部設(shè)備將數(shù)據(jù)傳送到電腦記憶體稱為輸入。將電腦內(nèi)部的數(shù)據(jù)傳送到外部設(shè)備稱為輸出。輸入輸出給電腦提供三方面的資訊:

(1)通過什麼設(shè)備來進(jìn)行輸入輸出。

(2)採用什麼樣的格式來進(jìn)行輸入輸出。

(3)輸入輸出的具體內(nèi)容。每種電腦都隱含指定一種輸入、輸出設(shè)備。在微機(jī)中,鍵盤為輸入設(shè)備,顯示器為輸出設(shè)備。在輸入輸出數(shù)據(jù)較多時,也可以使用磁片作為輸入輸出設(shè)備。輸入輸出的格式由格式編輯符來指定。輸入輸出的具體內(nèi)容即輸入輸出項(xiàng)。輸入項(xiàng)只能為變數(shù),輸出項(xiàng)可以為常量、變數(shù)、函數(shù)和運(yùn)算式,也可以是隱含的DO迴圈。例子。

INTEGERJDOJ=1,5,2WRITE(*,10)JENDDO10FORMAT(1X,3I5)END程式輸出為:

135每迴圈一次輸出迴圈變數(shù)J的值,每個數(shù)據(jù)占5格

INTEGERJWRITE(*,10)(J,J=1,5,2)10FORMAT(1X,3I5) END程式輸出為:135程式中,WRITE語句的輸出項(xiàng)“(J,J=1,5,2)”是一個隱含的DO迴圈,當(dāng)作一個整體輸出,每個數(shù)據(jù)占5格。格式輸出語句與格式編輯符格式輸出語句WRITE(u,f)

輸出項(xiàng)標(biāo)號

FORMAT(格式說明)PRINTf,輸出項(xiàng)設(shè)備號設(shè)備號格式說明格式說明符有以下三種形式:

(1)一個“*”,表示輸出使用表控格式。前面已介紹。

(2)一個字元常量。例如PRINT'(1X,2F7.3)',X,Y(3)是格式語句(FORMAT)的語句標(biāo)號。最常用。例如:PRINT100,A,B,C100FORMAT(1X,F9.4,2F7.3)格式編輯符:I、B、O、Z、F、E、EN、ES、G、D、L、A、’撇號、H、X設(shè)備號可是常量、變數(shù)、函數(shù)、運(yùn)算式,隱含的DO迴圈整型I編輯符、B編輯符、O編輯符、Z編輯符整型:I編輯符I編輯符:用於整型數(shù)的輸入輸出格式,其一般形式為:rIωr表示數(shù)據(jù)的個數(shù)I編輯符遵循下列規(guī)則:實(shí)際位數(shù)小於ω,則在左邊用空格來補(bǔ)滿場寬;實(shí)際大於ω,則用“*”輸出,以表示規(guī)定的場寬不夠,無法正常輸出該整數(shù)。

整型:B,O,Z編輯符這是FORTRAN90新增的編輯符。分別採用二進(jìn)位、八進(jìn)制和十六進(jìn)制形式描述整型量的輸入輸出。其基本用法與I編輯符相同。例如

READ(*,10)I,JWRITE(*,20)I,J,I,J10FORMAT(B3,B4)20FORMAT(1X,I5,I4,O4,Z5)END

語句執(zhí)行時,若從鍵盤輸入1011101,則I,J的值分別為二進(jìn)位數(shù)101和二進(jìn)位數(shù)1101。輸出結(jié)果為:

□□□□5□□13□□□5□□□□D

整型:B,O,Z編輯符但與I編輯符也有區(qū)別,注意:①如果位數(shù)大於字段寬度,實(shí)際輸出是從右端截取相應(yīng)位數(shù)而得到的。例如WRITE(*,20)1420FORMAT(1X,B3)輸出結(jié)果為:110②Z編輯符可以用來輸入輸出字元型和邏輯型數(shù)據(jù)。例如WRITE(*,20)14>90,14<34,'ab'20FORMAT(1X,Z3,Z3,Z5)輸出結(jié)果為:□□0□□1□6162可看出:如用Z編輯符輸出字元型數(shù)據(jù),結(jié)果為對應(yīng)的ASCII碼值。例如:“a”

61,“b”

62。如用Z編輯符輸出邏輯型數(shù)據(jù),則邏輯真

1,邏輯假

0。實(shí)型F編輯符E編輯符EN編輯符ES編輯符G編輯符實(shí)型:F編輯符F編輯符用:用於規(guī)定實(shí)型數(shù)據(jù)的輸入輸出格式

Fω.dF編輯符遵循下列規(guī)則:實(shí)數(shù)的符號和小數(shù)點(diǎn)均單獨(dú)占一位,因此要求ω≥b+d+2,其中:b為整數(shù)的位數(shù);d小於實(shí)際小數(shù)部分的位數(shù),則小數(shù)部分最右邊將被截去;d大於實(shí)數(shù)小數(shù)部分的位數(shù),則小數(shù)部分最右邊用0來補(bǔ)足;ω大於數(shù)字位數(shù)(包括在小數(shù)部分最右邊所補(bǔ)的數(shù)字0),則左邊用空格補(bǔ)足;ω小於實(shí)際輸出數(shù)據(jù)的數(shù)字位數(shù),則輸出ω個“*”號。實(shí)型:E編輯符E編輯符:用來規(guī)定實(shí)型數(shù)據(jù)的輸入輸出格式

Eω.d;格式化形式為:0.X…XE±XXE編輯符遵循下列規(guī)則:指數(shù)形式輸出時,指數(shù)占4列(E和符號各占1列,階碼占2列);尾數(shù)部分中的符號、小數(shù)點(diǎn)前的前導(dǎo)零和小數(shù)點(diǎn)各占1列。因此,要求ω≥d+7;d大於實(shí)際的尾數(shù)數(shù)字的位數(shù),則在尾數(shù)最後用數(shù)字0來補(bǔ)足;d小於實(shí)際的尾數(shù)數(shù)字的位數(shù),則按四捨五入截去多餘的;ω不夠大,即ω<d+6,則輸出“*”號,以表示無法輸出該實(shí)數(shù);ω>d+7,則左邊用空格補(bǔ)足。實(shí)型:

Eω.dEn;Eω.dEs與Gω.d

EN編輯符。EN編輯符與E編輯符基本用法相同。區(qū)別在於EN的非指數(shù)部分的絕對值強(qiáng)制在1到1000的範(fàn)圍內(nèi),且指數(shù)可以被3整除。例如

WRITE(*,10)128.433,-0.000810FORMAT(1X,EN12.4,EN13.2)輸出為:128.4330E+00□□-800.00E-06ES編輯符。非指數(shù)部分的絕對值強(qiáng)制在1到10的範(fàn)圍內(nèi)。例如:WRITE(*,10)128.433,-0.000810FORMAT(1X,ES12.4,ES13.2)輸出為:□□1.2843E+02□□□□-8.00E-04G編輯符用於輸入時,與F、E編輯符的功能完全相同。用於輸出時,根據(jù)輸出項(xiàng)的大小決定用F格式輸出還是用E格式輸出。複型數(shù)據(jù)編輯描述符複型數(shù)據(jù)沒有專門的編輯符。對複型數(shù)據(jù)的輸入輸出,可以按實(shí)部和虛部分別輸入輸出。例如

COMPLEXCMREAD(*,10)CMWRITE(*,20)CM10FORMAT(2F5.2)20FORMAT(1X,2F7.2)

語句執(zhí)行時,從鍵盤輸入1234567890,則輸出為:□123.45□678.90邏輯型數(shù)據(jù)編輯描述符邏輯型數(shù)據(jù)的輸入輸出用L編輯符。其一般格式是:

rLw

邏輯值只有兩個:真(.TRUE.)和假(.FALSE.)。在輸入時,輸入的數(shù)據(jù)可以是.TRUE.或.FALSE.,也可以是頭一個字母為T或F的任何字串(T或F前面可以接“.”或空格,後面可以是任意字元)邏輯型數(shù)據(jù)編輯描述符例如

LOGICALL1,L2READ(*,10)L1,L210FORMAT(L6,L3)

語句執(zhí)行時,從鍵盤輸入.TRUE..FT,則L1、L2的值分別是.TRUE.、.FALSE.。在輸出時,對邏輯真(.TRUE.),輸出一個字母T,對邏輯假(.FALSE.),輸出字母F,且在左邊補(bǔ)w-1個空格。例如

WRITE(*,10).FALSE.,'A'.LT.'B'.OR.1.GT.210FORMAT(1X,L3,L4)

輸出為:

□□F□□□T字元型數(shù)據(jù)編輯描述符字元型數(shù)據(jù)的輸入輸出用A編輯符。一般格式是:

rAw其中:w省略時,隱含為長度l。字元型數(shù)據(jù)編輯描述符輸入規(guī)則:從輸入記錄中取w個字元。當(dāng)w=L時,w個字元全部送給輸入項(xiàng)。當(dāng)w>L時,從w個字元中取出最右邊L個字元送給對應(yīng)的輸入項(xiàng)。這一點(diǎn)與字元賦值語句的賦值規(guī)則剛好相反。當(dāng)w<L時,當(dāng)w個字元全部送入輸入項(xiàng),並靠左對齊,右邊補(bǔ)l-w個空格。這一點(diǎn)同字元賦值語句的規(guī)則是相同的。字元型數(shù)據(jù)編輯描述符例如CHARACTER*5C1,C2,C3READ(*,10)C1,C2,C310FORMAT(A5,A2,A7)

語句執(zhí)行時,從鍵盤輸入abcdefghijklmn,則C1、C2、C3的值分別為abcde、fg□□□、jklmn。用A編輯符輸入字串時,不能有字串的定界符,如果加了撇號,則撇號也作為字串的一個字元。而在表控格式輸入時,字元常量要加撇號定界符。字元型數(shù)據(jù)編輯描述符輸出規(guī)則:在輸出記錄中,Aw編輯符所對應(yīng)的輸出項(xiàng)一定占w個字元的寬度,但輸出項(xiàng)實(shí)際包含字元的個數(shù)L可能與w不一致。當(dāng)w=L時,輸出項(xiàng)所有的字元全部輸出。當(dāng)w>L時,輸出項(xiàng)所有的字元全部輸出,並且靠右對齊,左補(bǔ)w-L個空格。當(dāng)w<L時,輸出項(xiàng)最左邊w個字元輸出。當(dāng)w省略時,按輸出項(xiàng)的長度輸出,這是最方便的形式。例如WRITE(*,10)'FORTRAN

90','PROGRAM'10FORMAT(1X,A7,A8)輸出為:FORTRAN□PROGRAM

編輯描述符總結(jié)FORTRAN90提供的編輯描述符很多,掌握共同特點(diǎn)就不難了??芍匮}編輯描述符是用來決定對應(yīng)輸入輸出項(xiàng)的輸入輸出格式的,其中都有字段寬度w,而且對於輸入都是從輸入記錄中取w個字元,對於輸出都是在輸出記錄中輸出w個字元。編輯描述符總結(jié)問題:如何記憶?在輸入時,取得的w個字元按什麼規(guī)則加工後傳送到對應(yīng)的輸入項(xiàng)。在輸出時,當(dāng)輸出項(xiàng)實(shí)際包括的字元的個數(shù)和編輯符中所確定的字段寬度(對於數(shù)值型數(shù)據(jù)還有小數(shù)位數(shù))之間不相符時,如何輸出?可分?jǐn)?shù)值型、邏輯型、字元型進(jìn)行總結(jié)。格式輸入語句與格式編輯符格式輸入語句:READ語句與FORMAT語句READ(u,f)

輸入表列READf

輸入表列注意:READ輸入表列中只能是變數(shù)名,不能是運(yùn)算式;在進(jìn)行具體輸入時,不必考慮縱向控制符。輸入設(shè)備默認(rèn)為鍵盤其他,類同WRITE語句對格式輸入的幾點(diǎn)說明對格式輸入的幾點(diǎn)說明數(shù)值型數(shù)據(jù),只按字段寬度截取規(guī)定位數(shù)的數(shù)字,並且,在字段範(fàn)圍內(nèi)的空格按數(shù)字0處理。對於實(shí)型數(shù)據(jù)的輸入來說,F(xiàn)與E型編輯符的作用完全相同,並且,它們與D型編輯符的作用也相同。“自帶小數(shù)點(diǎn)優(yōu)先”的原則:輸入的數(shù)字在字段寬度範(fàn)圍內(nèi)自帶小數(shù)點(diǎn),位置按實(shí)際的小數(shù)點(diǎn)位置來確定,而不再由編輯符中的d值來確定。邏輯數(shù)據(jù)輸入時,字串以字母T開頭,“真”即.TRUE.);字串以F開頭,“假”(即.FALSE.)。字串中的非字母都將被忽略。對於同一個變數(shù),如果輸入與輸出共用一個格式語句,則要注意以下兩個問題在輸入時不需要提供縱向控制符;並且,一般來說,格式說明中的nX表示在鍵盤輸入的數(shù)字序列中跳過n個字元;當(dāng)實(shí)型數(shù)據(jù)的輸入與輸出共用同一個格式說明編輯符時,在用於輸出時,其字段寬度是不夠的;一般來說,程式中的輸入語句與輸出語句不要共用同一個格式語句。輸入輸出語句與格式語句的相互作用非重複編輯描述符直接向當(dāng)前輸出記錄傳遞資訊,因此不需要輸入輸出項(xiàng)與其對應(yīng)。格式輸入輸出語句中其他有關(guān)的格式問題:X編輯符H編輯符撇號編輯符斜扛編輯符縱向控制符編輯符的重複編輯符使用的補(bǔ)充說明非重複編輯描述符X編輯符用於在輸入輸出的常數(shù)之間插入空格。一般格式:

nX其中:n>0,用於指明從當(dāng)前位置向右跳過n個字元位置。這裏n不能省略,即使n為1,也要寫成1X。例如

READ(*,10)K,J,A10FORMAT((2I3,3X),E5.2)鍵盤輸入:876-42193671E4K、J、A的值分別為876、-42、67100.0。其中非重複編輯符3X,跳過193這三個字元。非重複編輯描述符H編輯符用於輸出一個字串。一般格式:nHh1h2…h(huán)n其中:n>0,表示字串的長度,h1h2…h(huán)n為n個字元。非重複編輯描述符撇號編輯符用於輸出一個字串。撇號編輯符和H編輯符作用相同,但撇號編輯符使用更為方便。例如WRITE(*,10)345,'HELLO!'10FORMAT(1X,2HI=,I4,'C=',A)輸出為:I=□345C=HELLO!非重複編輯描述符

斜扛編輯符結(jié)束當(dāng)前正在輸入或輸出的記錄,並轉(zhuǎn)入下一個記錄開始輸入輸出。例如WRITE(*,10)A,B10FORMAT(//2(10X,F9.2/))語句執(zhí)行後將輸出5個記錄??v向走紙控制符FORTRAN規(guī)定,每一個輸出記錄中的第一個字元是作為縱向控制符來使用而不被輸出,實(shí)際的輸出從記錄的第二個字元開始。FORTRAN所規(guī)定的縱向控制符及其功能如下表所示??v向走紙控制符例如WRITE(*,10)123,456710FORMAT(1X,I3,2X,I4)按本來意義,1X產(chǎn)生一個空格,應(yīng)輸出:

□123□□4567但按FORTRAN規(guī)定,將輸出記錄中的第一個字元作為縱向走紙控制符,所以實(shí)際輸出是在走紙一行之後,輸出:123□□4567縱向走紙控制符如果不在輸出記錄的第一個字元處增加一個空格,則系統(tǒng)將應(yīng)該輸出的第一個字元作為縱向走紙控制符,從而使本來該輸出的字元被“吃掉”了。例如WRITE(*,10)123,456710FORMAT(I3,2X,I4)輸出為:(空一行)23□□4567輸出記錄的第一個字元“1”作為縱向走紙控制符用,走紙兩行(字元“1”本來作分頁控制用,但微機(jī)中無分頁功能)。所以,在FORMAT語句中,一般都在格式說明的第一個字元位置增加一個空格作為縱向走紙控制符。編輯符使用的補(bǔ)充說明如果輸出表項(xiàng)個數(shù)少於格式說明中編輯符的個數(shù),則多餘的編輯符不起作用;但X、H及撇號編輯符除外;如果輸出表項(xiàng)個數(shù)多於格式說明中編輯符的個數(shù),則當(dāng)格式說明中的編輯符用完後,將重複使用該格式說明,並產(chǎn)生一個新的記錄;如果在格式說明中包含有重複使用的編輯符,則當(dāng)格式說明用完後再重新使用時,只有最後面的一個編輯符組(包括其重複係數(shù))及其後的編輯符被重新使用;如果WRITE語句中有輸出項(xiàng),而在格式說明中沒有對應(yīng)的格式編輯符,則輸出操作將永不停止;如果WRITE語句中沒有輸出表項(xiàng),且FORMAT語句中也沒有格式說明,則將輸出一個空行;在使用格式輸出時,F(xiàn)ORTRAN規(guī)定,WRITE語句中的輸出表項(xiàng)不能包含輸出的字串;在FORMAT語句與READ語句聯(lián)用時,其格式說明的使用與輸出時的規(guī)則基本相同,但要注意以下兩點(diǎn):在輸入時,如果格式說明已經(jīng)用完,而READ語句中還有變數(shù)需要輸入數(shù)據(jù),則將重複使用該格式說明,其對應(yīng)關(guān)係與輸出的情況相同。但在具體輸入時,必須作為新的記錄進(jìn)行輸入。用於輸入時,格式說明中的斜杠(/)編輯符表示本記錄輸入結(jié)束,接著輸入下一個記錄。在輸入輸出語句中包含格式說明WRITE(u,f)

輸出表項(xiàng)READ(u,f)

輸入表列FORTRAN還允許在輸入語句或輸出語句中直接指定格式說明,即f直接是一個格式說明(用一對圓括號括起來);在這種情況下,要求將直接出現(xiàn)在輸入或輸出語句中的格式說明用一對單引號(即撇號)括起來。10FORMAT(1X,I4,F6.2,I5,F8.2)10FORMAT(1X,2(I4,2X,F10.2))10FORMAT(I4,F6.2/I5,F8.2)10FORMAT(I4/F6.2/I5/F8.2)10FORMAT(I5,F8.1)10FORMAT(I4,F8.1,I5,F10.2,I6,F10.3)練習(xí):1.有語句:

INTEGERI,JREALX,YREAD(*,10)I,X,J,Y設(shè)要求輸入的值為:I=87,X=67.4,J=465,Y=345.705,用下麵的FORMAT語句應(yīng)如何輸入數(shù)據(jù)?練習(xí):2.程式執(zhí)行時輸入同樣的內(nèi)容:

1234567891011121314151617181920請寫出下列程式的執(zhí)行結(jié)果。(1)INTEGERAREALB,C

CHARACTER*10DREAD(*,10)A,B,C,DWRITE(*,*)A,B,C,D10FORMAT(1X,I4,2F6.2,A3)END(2)INTEGERAREALB,CCHARACTER*10DREAD(*,10)A,B,C,DWRITE(*,*)A,B,C,D10FORMAT(1X,O4,2E6.2,A)END練習(xí):2.程式執(zhí)行時輸入同樣的內(nèi)容:

1234567891011121314151617181920請寫出下列程式的執(zhí)行結(jié)果。(3)INTEGERA REALB,C CHARACTER*10D READ(*,10)A,B,C,D WRITE(*,*)A,B,C,D10FORMAT(1X,Z4,2E8.2,A5)END(4)INTEGERA REALB,C CHARACTER*10D READ(*,10)A,B,C,D WRITE(*,20)A,B,C,D10FORMAT(1X,Z4,2F8.2,A5)20FORMAT(1X,O4,2E8.2,A5)END練習(xí):3.請寫出下列程式的執(zhí)行結(jié)果。

INTEGERI,J,K I=570 J=3410 K=5069 PRINT10,I,J,K PRINT20,I,J,K PRINT30,I,J,K10FORMAT(1X,I4)20FORMAT(1X,2I5)30FORMAT(1X,2(I5/2X))END練習(xí):4.請寫出下列程式的執(zhí)行結(jié)果。CHARACTER*8AINTEGERB REALC,D A='FORTRAN' B=52 C=917.8 D=-452.6 WRITE(*,10)A,B,C,D WRITE(*,20)A,B,C,D WRITE(*,30)A,B,C,D10FORMAT(1X,A5,I4,2E8.2)20FORMAT(1X,'A,B,C,D=',Z4,I4,2F7.2)30FORMAT(1X,'A=',A/,1X,'B=',B4/,1X,'C=',F6.1/,1X,'D=',F6.1)END練習(xí):5.請寫出下列程式的執(zhí)行結(jié)果。

COMPLEXA LOGICALB A=(1.6,-4.5) B=.NOT.3>6.EQV..FALSE. WRITE(*,10)A,B10FORMAT(1X,F10.2,F10.2/L5)END練習(xí):6.請寫出下列程式的執(zhí)行結(jié)果。

(1)WRITE(*,10)(3,4,I=1,2)10FORMAT(1X,3I3)END(2)READ(*,10)K,A,AWRITE(*,20)K,A10FORMAT(I5,F6.1,F7.2)20FORMAT(1X,I7,2F9.2)END

輸入為:123456789.0123456789。練習(xí):

7.列印九九乘法表(要求:每個數(shù)字占5格)

FORTRAN

語言的

程式結(jié)構(gòu)及其相容性

*程式設(shè)計基本概念FORTRAN語言的發(fā)展簡史FORTRAN77程式的構(gòu)成FORTRAN90程式的構(gòu)成及其相容性

第一節(jié)程式設(shè)計基本概念程式設(shè)計的基本過程程式設(shè)計的基本方法模組化設(shè)計自頂向下、逐步細(xì)化的設(shè)計過程結(jié)構(gòu)化設(shè)計程式設(shè)計語言**高級語言程式設(shè)計基礎(chǔ)(Fortran)什麼是程式?用電腦能識別的語言所描述的解決實(shí)際問題的方法和步驟。電腦能識別的語言有哪些?機(jī)器語言、組合語言、高級語言什麼是程式設(shè)計?程式設(shè)計的基本過程*問題的分析問題的性質(zhì);輸入/輸出數(shù)據(jù);數(shù)學(xué)模型或常用的方法-----演算法演算法的設(shè)計可行性;確定性;有窮性;有零或多個輸入;有一個或多個輸出流程的描述自然語言;演算法描述語言;流程圖;編程調(diào)試與運(yùn)行測試;調(diào)試程式設(shè)計=演算法+數(shù)據(jù)結(jié)構(gòu)+方法+工具BACK有窮性演算法中執(zhí)行的步驟總是有限次數(shù)的,不能無止境地執(zhí)行下去。

確定性演算法中的每一步操作必須具有確切的含義,不能有二義性有效性演算法中的每一步操作必須是可執(zhí)行的。要有數(shù)據(jù)輸入演算法中操作的對象是數(shù)據(jù),因此應(yīng)提供有關(guān)數(shù)據(jù)。要有結(jié)果輸出演算法的目的是用來解決一個給定的問題,因此應(yīng)提供輸出結(jié)果,否則演算法就沒有實(shí)際意義。*演算法什麼是演算法?解決問題的方法和步驟。演算法的特徵?*演算法演算法的描述有哪些?

自然語言一般流程圖

N-S圖

Pad圖偽代碼演算法描述語言(如:C,F(xiàn)ortran)等*自然語言:輸入x,y;判斷x是否為0:若x=0,則輸出錯誤資訊;否則計算y/x→z,且輸出z

例:計算z=y/x演算法描述語言演算法描述語言+自然語言(偽代碼)INPUTx,y輸入x,yIF(x=0)THENIF(x=0)THENOUTPUT“ERROR”

輸出錯誤資訊ELSEELSE{z=y/x{z=y/xOUTPUTz

輸出z}}BACK*N-S結(jié)構(gòu)化流程圖輸入x,y

輸出錯誤資訊z=y/x

輸出z

結(jié)束編程WRITE(*,100)100FORMAT(1X,‘INPUTX,Y:’)READ(*,*)X,YIF(X.EQ.0.0)THENWRITE(*,200)ELSEZ=Y/XWRITE(*,300)ZENDIF200FORMAT(1X,‘ERROR!X=0’)300

FORMAT(1X,‘Z=’,E15.6)ENDx=0yesnoBACK1.一般流程圖*是一種傳統(tǒng)的演算法描述方法它用不同的幾何圖形來代表不同性質(zhì)的操作。主要優(yōu)點(diǎn):是直觀性強(qiáng),初學(xué)者容易掌握。缺點(diǎn)是對流程線的使用沒有嚴(yán)格限制,如毫無限制地使流程任意轉(zhuǎn)來轉(zhuǎn)去,將使流程圖變得毫無規(guī)律,難以閱讀。為了提高演算法可讀性和可維護(hù)性,必須限制無規(guī)則的轉(zhuǎn)移,使演算法結(jié)構(gòu)規(guī)範(fàn)化。例1.4用一般流程圖來描述例1.1的演算法。*輸入a、ba<b?輸出uyn例1.2的演算法。*y1→ix>max?輸入maxy輸入xi≤9?x→maxi+1→i輸出maxnn2.N-S圖*S1S2S3

YNS1S2

當(dāng)P滿足時SP由於傳統(tǒng)流程圖的缺點(diǎn),1973年美國學(xué)者I.Nassi和B.Shneiderman提出了一種新的流程圖工具─N-S圖。N-S圖以三種基本結(jié)構(gòu)作為構(gòu)成演算法的基本元素,每一種基本結(jié)構(gòu)用一個矩形框來表示,而且取消了流程線,各基本結(jié)構(gòu)之間保持順序執(zhí)行關(guān)係。N-S圖可以保證程式具有良好的結(jié)構(gòu),所以N-S圖又叫做結(jié)構(gòu)化流程圖。例1.5用N-S圖來描述例1.1的演算法。*輸入a、bYN輸出ua<b?例1.2的演算法。*輸入max1→i當(dāng)i≤9時輸入xynx→maxi+1→i輸出maxx>max?模組化設(shè)計*按功能劃分模組按層次組織模組主模組模組1模組2模組3模組5模組6模組4BACK*自頂向下、逐步細(xì)化的設(shè)計過程

優(yōu)點(diǎn):符合人們解決複雜問題的普遍規(guī)律,可顯著提高程式設(shè)計效率;用先全局後局部、先整體後細(xì)節(jié)、先抽象後具體的方法設(shè)計出的程式具有清晰的層次結(jié)構(gòu),容易閱讀和理解。BACK結(jié)構(gòu)化設(shè)計*1966年Bohra和Jacopini提出了組成結(jié)構(gòu)化演算法的三種基本結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)迴圈結(jié)構(gòu)特點(diǎn):

(1)只有一個入口。

(2)只有一個出口。

(3)結(jié)構(gòu)中無死語句,即結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會被執(zhí)行。

(4)結(jié)構(gòu)中無死迴圈。記憶:單入口、單出口、無死語句、無死迴圈。結(jié)構(gòu)化設(shè)計*順序結(jié)構(gòu)選擇結(jié)構(gòu)迴圈結(jié)構(gòu)順序結(jié)構(gòu)S1S2S3*兩路分支結(jié)構(gòu)S1

S2

多路分支結(jié)構(gòu)條件情況1情況2情況3……S1S2S3……當(dāng)型迴圈WHILE條件S直到型迴圈SUNTIL條件條件滿足不滿足BACK如何保證得到結(jié)構(gòu)化程式*自頂向下逐步細(xì)化模組化設(shè)計結(jié)構(gòu)化編碼*程式設(shè)計語言機(jī)器語言;組合語言;高級語言語言名稱適用範(fàn)圍BASIC教學(xué)和小型應(yīng)用程式的開發(fā)FORTRAN科學(xué)與工程計算程式的開發(fā)PASCAL專業(yè)教學(xué)與應(yīng)用程式的開發(fā)C中小型系統(tǒng)程式的開發(fā)COBAL商業(yè)與管理應(yīng)用程式的開發(fā)dBASE資料庫管理程式的開發(fā)FoxBASE資料庫管理程式的開發(fā)C++面向?qū)ο蟪淌降拈_發(fā)LISP人工智慧程式的開發(fā)PROLOG人工智慧程式的開發(fā)JAVA應(yīng)用程式的開發(fā)BACK第二節(jié)FORTRAN語言的發(fā)展簡史

*1954年IBM公司在IBM704上發(fā)展

DOS下

1956年IBM公司FORTRANII1966年美國國家標(biāo)準(zhǔn)化協(xié)會(兩級美國標(biāo)準(zhǔn))FORTRANII和FORTRANIV1972年國際標(biāo)準(zhǔn)化組織(三級國際標(biāo)準(zhǔn))FORTRANII(基本級)FORTRAN中間級和FORTRANIV(完全級)1978年美國國家標(biāo)準(zhǔn)化協(xié)會FORTRAN771992年國際標(biāo)準(zhǔn)化組織ISO公佈Fortran90標(biāo)準(zhǔn)

與77版本差異較大在“形式”上讓Fortran脫胎換骨

BACK第二節(jié)FORTRAN語言的發(fā)展簡史

*Microsoft(微軟)公司FORTRAN90FORTRANPOWERSTATION1.0~4.0DEC公司VisualFORTRANVisualFORTRAN5.0~6.01997年國際標(biāo)準(zhǔn)化組織ISO公佈Fortran95標(biāo)準(zhǔn)

加強(qiáng)平行運(yùn)算2004年Fortran2003面向?qū)ο驜ACK第三節(jié)FORTRAN77程式的構(gòu)成*計算z=x+y

PROGRAMMAIN主程序說明語句

INTEGERX,Y,Z說明了三個整型變數(shù)X、Y、Z

WRITE(*,100)用於輸出一個提示資訊,以提醒用戶從鍵盤輸入兩個整數(shù)給X與Y100FORMAT(1X,‘INPUTX,Y:’)

READ(*,*)X,Y輸入語句,表示要從鍵盤輸入兩個整型數(shù)分別賦給X與Y

Z=X+Y賦值語句,X與Y相加後賦給Z

WRITE(*,200)Z輸出X與Y之和,即Z的值200FORMAT(1X,‘X+Y=’,I6)

END結(jié)束語句,表示程式的結(jié)束*

INTEGERX,Y,Z主程序,並不直接計算X與Y的和,而是通過調(diào)用函數(shù)副程式(副程式名為M)來計算;另外,在主程序中可以省略主程序說明語句(即PROGRAM語句)

WRITE(*,10)10FORMAT(1X,‘INPUTX,Y:’)

READ(*,*)X,Y

Z=M(X,Y)

WRITE(*,20)Z20FORMAT(1X,‘X+Y=’,I6)

ENDCFUNCTION副程式(稱為函數(shù)副程式),此函數(shù)副程式M的功能是具體計算兩個整數(shù)之和FUNCTIONM(A,B)INTEGERA,BM=A+BEND一個程式單位必須有一個、也只能有一個END語句,並且它只能出現(xiàn)在一個程式單位的最後;每一個程式單位可以包括若干行,在FORTRAN77中,有語句行和非語句行兩類;FORTRAN77程式中的語句前可以沒有標(biāo)號,也可以有標(biāo)號,根據(jù)需要而定;FORTRAN77對各類程式單位中的第一個語句是有規(guī)定的;FORTRAN77根源程式必須按一定的格式書寫。*標(biāo)號區(qū)續(xù)行標(biāo)誌區(qū)語句區(qū)注釋區(qū)1~567~7273~80FORTRAN77

程式結(jié)構(gòu)與組成的規(guī)定BACK第四節(jié)FORTRAN90程式的構(gòu)成

及其相容性*FORTRAN77FORTRAN90源代碼只能用固定格式進(jìn)行輸入源代碼可以用兩種格式進(jìn)行輸入:自由格式和固定格式以字母C或字元“*”起始的一行為注釋行以“!”起始的一行為注釋行要求以一個非空格且非零的字元作為續(xù)行標(biāo)誌要求以一個“&”作為一個續(xù)行標(biāo)誌一行中最多只能寫一條語句一行中可以寫多條語句,用“;”隔開第二章MicrosoftFortranPowerStation4.0

開發(fā)環(huán)境介紹MicrosoftFortranPowerStation4.0用戶介面查看文檔查看介面元素對話框菜單工具欄輸出和出錯資訊*第一節(jié)MicrosoftFortranPowerStation4.0用戶介面專案工作區(qū)窗口:這個帶標(biāo)籤的窗口使訪問應(yīng)用程式的任何部分變得簡單、迅速;資訊視圖:在BooksOnline中可找到答案;資源視圖:訪問菜單、對話框、位圖、以及其他用戶介面的資源;檔視圖:組織檔,並方便地打開它們;輸出窗口和狀態(tài)欄:位於螢?zāi)幌露?,這些區(qū)域通知用戶並提供結(jié)果;代碼編輯器:此為用戶工作之地,它可以輸入代碼、修正錯誤、以及觀察應(yīng)用程式的形態(tài)。*BACK第二節(jié)查看文檔BACK第三節(jié)查看介面元素對話框BACKResourceID(資源ID);Caption(標(biāo)題);Prompt(提示)BACK菜單菜單BACK

數(shù)組數(shù)組的定義與數(shù)組元素的使用用類型說明語句說明數(shù)組DIMENSION語句數(shù)組元素的引用數(shù)組的存儲結(jié)構(gòu)對數(shù)組賦初值

數(shù)組的輸入輸出用DO迴圈對數(shù)組進(jìn)行輸入輸出用數(shù)組名對整個數(shù)組進(jìn)行輸入輸出在輸入輸出語句中使用隱含DO迴圈**概念我們把具有相同類型的一批數(shù)據(jù)看成是一個整體,叫做數(shù)組。給數(shù)組取一個名字叫數(shù)組名。所以數(shù)組名代表一批數(shù)據(jù)。用類型說明語句說明數(shù)組定義一個數(shù)組包括以下幾個方面:確定數(shù)組的名字;確定數(shù)組的類型;確定數(shù)組的維數(shù)和大?。恢赋鰯?shù)組每一維的下界與上界。INTEGERB(-2:45,0:10),Y(0:10,2:15)一般形式數(shù)組名(維說明符[,維說明符]…)數(shù)組說明符中,維說明符的個數(shù)就是數(shù)組的維數(shù)。維說明符至少一個,最多七個,即FORTRAN90最多允許使用七維數(shù)組。數(shù)組說明的方法1、通過DIMENSION語句(FORTRAN77,F(xiàn)ORTRAN90仍適用

)2、類型說明語句3、同時使用DIMENSION語句和類型說明語句1、DIMENSION語句一般格式:DIMENSION數(shù)組說明符[,數(shù)組說明符]…一些規(guī)定:數(shù)組必須首先說明。數(shù)組名的命名規(guī)則與變數(shù)名的命名規(guī)則相同;如用DIMENSION語句說明數(shù)組,則在該語句中被說明的數(shù)組類型按隱含規(guī)則確定,或者用類型說明語句再次說明其類型;類型說明語句與DIMENSION語句必須在程式中所有可執(zhí)行語句與DATA語句之前。說明數(shù)組時,其下標(biāo)下限與上限均不能是變數(shù)或算術(shù)運(yùn)算式,而只能是整型常數(shù)或是已定義的整型符號常量。當(dāng)數(shù)組的下標(biāo)下限為1時,可省略。同一程式單位中的數(shù)組名不能與變數(shù)名相同。2.用類型說明語句說明數(shù)組一般格式為:

類型符數(shù)組說明符[,數(shù)組說明符]…例如

CHARACTER*6CH(-10:10,5:9)*8說明了字元型數(shù)組CH,數(shù)組元素的長度為8REALKK(8)實(shí)型數(shù)組KKREAL(8)SOLUTION(30)雙精度數(shù)組SOLUTION。這也是FORTRAN77說明數(shù)組的一種方法,在FORTRAN90中繼續(xù)予以使用。3、同時使用DIMENSION語句和類型說明語句說明數(shù)組這是FORTRAN90增加的說明數(shù)組的方法。一般格式為:

類型符,

DIMENSION(維說明符[,維說明符]…)::

數(shù)組名[,數(shù)組名]…例如

REAL(8),DIMENSION(0:10)::A,B,CINTEGER,DIMENSION(4,5)::D,E說明了三個雙精度型數(shù)組A,B,C,它們各含有11個元素。說明了兩個整型數(shù)組D,E,它們各含有4×5共20個元素。3、同時使用DIMENSION語句和類型說明語句說明數(shù)組

在說明數(shù)組時,也可以在數(shù)組名後面給出維說明,這時以該數(shù)組名後面的維說明為準(zhǔn)。例如

REAL,DIMENSION(0:10)::A,B(20),C(4,5,3)說明A為A(0:10),而B,C分別為B(20)和C(4,5,3)。數(shù)組元素的引用一般形式數(shù)組名(下標(biāo)運(yùn)算式[,下標(biāo)運(yùn)算式]…)數(shù)組元素是通過數(shù)組元素名來引用的FORTRAN規(guī)定:數(shù)組元素中的各下標(biāo)運(yùn)算式可以是任意合法的算術(shù)運(yùn)算式,當(dāng)算術(shù)運(yùn)算式的值為實(shí)型時系統(tǒng)將自動取整。數(shù)組元素的引用數(shù)組說明符與數(shù)組元素名的區(qū)別。有下列程式片段:

REALLK(5,5)…LK(5,5)=12.5問題:兩個LK(5,5)的含義有什麼不同?數(shù)組元素的引用在FORTRAN77中,除了在輸入輸出語句中之外,其他場合不允許對數(shù)組進(jìn)行整體操作,只能對數(shù)組的元素逐個進(jìn)行操作。但在FORTRAN90中,允許對數(shù)組進(jìn)行整體操作。例如

INTEGER,DIMENSION(4,5)::A A(:,:)=100 A(:,1:5:2)=470說明了4×5整型數(shù)組A,先將A的全部元素賦為100,再將A第1,3,5列元素賦為470。其中1:5:2是一個三元運(yùn)算式,可作為數(shù)組元素的下標(biāo)運(yùn)算式。1:5:2的含義是從1變化到5,每次增加2。與迴圈語句類似,只是寫法不同。數(shù)組元素的引用三元運(yùn)算式更一般的形式是:

初值:終值:步長步長為1時,可省略。顯然,如用三元運(yùn)算式作為數(shù)組元素的下標(biāo),則引用的不是一個數(shù)組元素,而是一個數(shù)組片段。

數(shù)組元素的引用FORTRAN90提供內(nèi)部函數(shù)獲取數(shù)組變數(shù)所有維或某一維的下標(biāo)上界和下標(biāo)下界。具體調(diào)用格式為:

UBOUND(Array,[Dim])LBOUND(Array,[Dim])Array:被檢測的數(shù)組變數(shù)。Dim:數(shù)組變數(shù)的維,該參數(shù)省略時,獲取數(shù)組變數(shù)所有維的下標(biāo)上界和下標(biāo)下界。數(shù)組元素的引用分析下麵的程式:

INTEGER,DIMENSION(4,5)::AA=100PRINT*,UBOUND(A,1),LBOUND(A,1),UBOUND(A,2),LBOUND(A,2)PRINT*,UBOUND(A),LBOUND(A)END輸出結(jié)果為:

4151即數(shù)組A第一維下標(biāo)上界4,下界1。數(shù)組A第二維下標(biāo)上界5,下界1。

4511第二個輸出語句輸出了數(shù)組A每一維的下標(biāo)上界和下標(biāo)下界數(shù)組的存儲結(jié)構(gòu)數(shù)組中的各數(shù)組元素是連續(xù)地順序存儲在電腦的記憶體單元中。一維數(shù)組中的各元素是以列標(biāo)從小到大的順序存儲在電腦記憶體單元中。INTEGERA(-1:5)二維數(shù)組中的各元素在電腦中是按列存儲的,即先存儲第一列,再存儲第二列,以此類推,最後存儲數(shù)組中的最後一列。DIMENSIONA(5,6)數(shù)組的存儲結(jié)構(gòu)二維數(shù)組中的各元素在電腦中是按列存儲的,即先存儲第一列,再存儲第二列,以此類推,最後存儲數(shù)組中的最後一列。DIMENSIONA(5,6)數(shù)組的存儲結(jié)構(gòu)三維數(shù)組中的各元素的存放順序?yàn)椋喊错摌?biāo)從小到大存放,而在每一頁中又是按列存放。對數(shù)組賦初值一般形式DATA數(shù)組名/數(shù)據(jù)表/,…

使用DATA語句為簡單變數(shù)或數(shù)組賦初值時,要注意的問題:在用DATA語句為數(shù)組賦初值時,雖然在變數(shù)表中只需寫數(shù)組名,但在數(shù)據(jù)表中的數(shù)據(jù)個數(shù)必須要與定義的數(shù)組長度相同,並且其類型也要一致。在一個DATA語句中可以同時為不同類型的若干個簡單變數(shù)與若干個數(shù)組賦初值。在為多維數(shù)組賦初值時,一定要注意數(shù)據(jù)表中數(shù)據(jù)的排列順序。用DO迴圈對數(shù)組進(jìn)行輸入輸出用DO迴圈對數(shù)組進(jìn)行輸入用DO迴圈對數(shù)組進(jìn)行輸入輸出用DO迴圈逐個輸出數(shù)組元素用數(shù)組名對整個數(shù)組進(jìn)行輸入輸出數(shù)組中元素的輸入輸出順序總是與數(shù)組元素在電腦記憶體中的存放順序相一致。在用數(shù)組名進(jìn)行輸入輸出時要注意以下問題:利用數(shù)組名不能對數(shù)組中的部分元素進(jìn)行輸入或輸出,而是通過一個輸入或輸出語句一次性地完成整個數(shù)組的輸入或輸出。在用數(shù)組名進(jìn)行輸入或輸出時,無法指定輸入或輸出元素的順序;特別是對於二維數(shù)組,其輸入或輸出的格式與數(shù)學(xué)上的矩陣格式不一致。在輸入輸出語句中使用隱含DO迴圈利用DO迴圈和數(shù)組名進(jìn)行輸入輸出的優(yōu)缺點(diǎn):使用DO迴圈進(jìn)行輸入或輸出時,可以只輸入或輸出數(shù)組中的部分元素,但在一行上只能輸入或輸出一個元素,如果需要在一行上連續(xù)輸入或輸出多個元素則需要在輸入或輸出語句中連續(xù)列出這些元素,顯得很麻煩。使用數(shù)組名進(jìn)行輸入或輸出時,又只能輸入或輸出整個數(shù)組中的所有元素,而不能輸入或輸出部分元素,並且,對於二維數(shù)組來說,其輸入與輸出的格式與數(shù)學(xué)上的矩陣不一致。在輸入語句中使用隱含DO迴圈在輸出語句中使用隱含DO迴圈使用隱含DO迴圈進(jìn)行輸入輸出時應(yīng)注意的問題在輸入語句中使用隱含DO迴圈隱含DO迴圈輸入的一般形式READ(*,n)(輸入表,I=e1,e2,e3)在輸出語句中使用隱含DO迴圈隱含DO迴圈輸出的一般形式WRITE(*,n)(輸入表,I=e1,e2,e3)使用隱含DO迴圈進(jìn)行輸入輸出時應(yīng)注意的問題隱含DO迴圈不僅可以用於數(shù)組的輸入輸出,也可以用於簡單變數(shù)的輸入輸出。在使用隱含DO迴圈輸入時,控制隱含DO迴圈的參數(shù)不能出現(xiàn)在隱含DO迴圈的輸入表中。例題順序結(jié)構(gòu)程式設(shè)計數(shù)據(jù)類型及其運(yùn)算最基本的語句實(shí)例分析順序結(jié)構(gòu)是面向過程程式設(shè)計三種基本結(jié)構(gòu)中最簡單的一種結(jié)構(gòu),它只需按照處理順序,依次寫出相應(yīng)的語句即可。**§2.1數(shù)據(jù)類型及其運(yùn)算**數(shù)據(jù)

表現(xiàn)形式

數(shù)據(jù)類型常量變數(shù)運(yùn)算式函數(shù)整型實(shí)型雙精度型常量複型常量邏輯型常量字元型常量§2.1數(shù)據(jù)類型及其運(yùn)算常量變數(shù)及其定義符號常量及其定義FORTRAN運(yùn)算式**常量整型常量小數(shù)形式實(shí)型常量指數(shù)形式雙精度型常量複型常量邏輯型常量字元型常量*常量常量是在程式運(yùn)行過程中,其值不改變的量。例如15、0、-21、3.1416、’FORTRAN’等分為:直接常量和符號常量兩大類。

*1.直接常量

直接常量是指數(shù)據(jù)本身就是一個常量。分為:整型常量、實(shí)型常量(1)整型常量:稱為整型常數(shù)或整數(shù),(正數(shù)、負(fù)數(shù)、0)。如125,-258,+28等。注意:123,000×;千分位123.00×

;點(diǎn)123

00×

空格(77可以,而90及以上版本出錯)。

*77中一個整型常量占2個位元組90中整型常量的範(fàn)圍沒有明確規(guī)定。如16位電腦上整型常量的範(fàn)圍是2個位元組,表示為十進(jìn)位數(shù)為-32768~+32767,即-215~215-1。*

(2)實(shí)型常量

即實(shí)型常數(shù)或簡稱實(shí)數(shù)。它有2種表示形式:小數(shù)形式和指數(shù)形式。小數(shù)形式根據(jù)小數(shù)點(diǎn)前後是否有數(shù)字形成3種不同格式,分別是:m.n、m.、.n。數(shù)字前面可以加上“+”或“-”號,默認(rèn)為正號。小數(shù)點(diǎn)“.”前或後可以不出現(xiàn)數(shù)字。例如3.52、4.0、-5.(相當(dāng)於-5.0)、.6378(相當(dāng)於0.6378)等。*指數(shù)形式可以表示一個絕對值非常大或非常小的數(shù),表示方式是用E將有效數(shù)字和指數(shù)分隔,E的前面是指數(shù),E的後面是小數(shù)。例如:

1.32E5表示13200或1.32*105。1.285E-12表示1.285*10-12。注意:有效數(shù)字可是整型或?qū)嵭统A浚?E2和1.0E2兩種表示100.0,但與100同;E後只能是整型常量,如5E3.2×

,.E8×

。還有複型、邏輯型、字元型等類型的常量*練習(xí):P28/32.符號常量

是用一個識別字來代表一個常量。常用PARAMETER語句來定義。例如:PARAMETER(PI=3.1416,M=10,…)。含義:定義了兩符號常量PI和M,PI代表3.1416,M代表10,…注意:PARAMETER、()、如有多項(xiàng),用逗號隔開。

*符號常量及其定義注意問題:非執(zhí)行語句,寫在所有可執(zhí)行語句之前,且,一旦定義,不能再改變;命名規(guī)則:同變數(shù)名;但應(yīng)先寫類型說明,後寫PARAMETER語句;一個PARAMETER中,可定義多個符號常量;類型:數(shù)值型、邏輯型、字元型;符號常量不能作為語句標(biāo)號,也不能出現(xiàn)在FORMAT中;此外,均可。符號常量與變數(shù)的區(qū)別:編譯時,變數(shù)分配存儲空間,符號常量進(jìn)行數(shù)據(jù)替換。*變數(shù)及其定義變數(shù)與變數(shù)名隱含規(guī)則類型說明語句整型說明語句實(shí)型說明語句雙精度型說明語句複型說明語句邏輯型說明語句字元型說明語句隱含說明語句*變數(shù)說明中應(yīng)注意的問題有效範(fàn)圍:說明語句中所說明的變數(shù)類型只在本程式單位內(nèi)有效;優(yōu)先順序:類型說明語句→隱含說明語句→隱含規(guī)則(I-N規(guī)則);出現(xiàn)順序:IMPLICIT在最前,專門的類型說明語句在本程式中所有執(zhí)行語句的前面;隱含規(guī)則適用:整型和實(shí)型變數(shù);IMPLICIT適用:所有的FORTRAN變數(shù)的類型,但各種專門的類型說明語句只適用於對一種類型的變數(shù)進(jìn)行說明。*變數(shù)

是指在程式運(yùn)行過程中其值可以改變的量。變數(shù)實(shí)質(zhì)上代表一個記憶體單元*變數(shù)名

一個變數(shù)需要一個名字來識別同一程式中,不能用同一個變數(shù)名代表不同的變數(shù)。變數(shù)的名字即識別字。*

練習(xí):P28/2*表2.1FORTRAN77與FORTRAN90識別字對照FORTRAN類型組成字元長短開頭字元大小寫要求FORTRAN77及以前版本字母、數(shù)字1~6個字元超過6後面字元無效字母不區(qū)分FORTRAN90及以上字母、數(shù)字和下劃線1~31個字元超過31個後面字元無效字母不區(qū)分注意:要“見名知義”,如:AREA“面積”,GRADE“成績”,AVER“平均值”等。FORTRAN無“保留字”,但為避免誤解、混淆,應(yīng)儘量避免。*變數(shù)的說明

三種方式:1.強(qiáng)制說明2.

隱含說明語句IMPLICIT3.

隱含說明I—N規(guī)則順序:123*1.強(qiáng)制說明格式為:類型說明符變數(shù)名1,變數(shù)名2…*另一種格式:REAL::SCORE=89.5可同時進(jìn)行初始化INTEGER整型REAL實(shí)型DOUBLEPRECISION雙精度型

COMPLEX複型變數(shù)說明LOGICAL邏輯型CHARACTER字元型可定義多個,中間用“,”分開。如:REALAREA,AVER,STUD2.隱含說明語句IMPLICIT將某個或某些字母開頭的變數(shù)規(guī)定為所需的類型格式:IMPLICIT類型說明(字母表)例:IMPLICITINTEGER(A,C,T-V)含義*3.隱含約定

FORTRAN語言規(guī)定:以I,J,K,L,M,N6個字母開頭的變數(shù)被當(dāng)作整型變數(shù)。又稱I~N規(guī)則如:在無前面兩種說明時,I1,MA,N3S等都為整型變數(shù)。

*FORTRAN運(yùn)算式算術(shù)運(yùn)算式關(guān)係運(yùn)算式邏輯運(yùn)算式字元運(yùn)算式不同類型數(shù)據(jù)的混合運(yùn)算例題*算術(shù)運(yùn)算式運(yùn)算順序?yàn)椋撼藘?*→乘*、除/→加+、減-常用的算術(shù)型標(biāo)準(zhǔn)函數(shù)P19—20*注意問題書寫:左

右,數(shù)學(xué)

FORTRAN,適當(dāng)加括??;乘號*不能省略;只允許用圓括號;連續(xù)使用乘冪運(yùn)算符時,加上必要的括弧;求值順序:括弧內(nèi)→函數(shù)→**→*、/→+、-允許不同數(shù)值類型的量進(jìn)行混合運(yùn)算;實(shí)型運(yùn)算注意誤差問題;整型運(yùn)算注意整數(shù)範(fàn)圍。*例題A=1.0,B=3.5,T=10.0,X=5.0,I=-5,J=7,K=3,求下麵運(yùn)算式的值。-(A+T)(B+(X/T))/(4.0*A)(I*J)/K(I/K)*J+T/X-(K+1)/5+I*A-BSQRT(REAL(ABS(K)+1))MAX(J,MOD(J,K))J+INT(T/B)/A*§2.2最基本的語句賦值表控輸入輸出END、STOP、GOTO賦初值格式輸入輸出**賦值語句格式:變數(shù)名=運(yùn)算式算術(shù)賦值語句邏輯賦值語句邏輯型變數(shù)=邏輯運(yùn)算式數(shù)值型變數(shù)=邏輯運(yùn)算式×

邏輯型變數(shù)=算術(shù)運(yùn)算式×

字元賦值語句

*算術(shù)賦值語句數(shù)值型變數(shù)名或數(shù)組元素=算術(shù)運(yùn)算式右邊的算術(shù)運(yùn)算式允許整型與實(shí)型的混合運(yùn)算;但注意:整數(shù)相除,結(jié)果為整型;左、右類型不一致,系統(tǒng)自動右轉(zhuǎn)左算術(shù)賦值語句執(zhí)行過程:1、計算右邊的值2、計算結(jié)果轉(zhuǎn)換與左邊類型一致3、左邊=右邊。*表控輸入輸出語句格式:WRITE(*,*)

輸出表項(xiàng)

PRINT*,輸出項(xiàng)表輸出空行,WRITE(*,*)

;邏輯型變數(shù),.TRUE.輸出T;.FALSE.輸出F。表控輸入語句例題1、2*表控輸入語句格式:READ(*,*)

輸入表項(xiàng)注意輸入數(shù)據(jù)的個數(shù)、類型應(yīng)與READ一致規(guī)定:每個READ總是從新的輸入行開始讀數(shù)邏輯型變數(shù),.TRUE.用以T開頭的一串字母代替,.FALSE.以F開頭的一串字母代替READ(*,*),輸入Enter分隔符號:Enter,空格、逗號、斜杠(/)出現(xiàn)斜杠(/)符號,輸入結(jié)束,後面變數(shù)不再賦值數(shù)據(jù)各數(shù)字間不能有空格*END語句、STOP語句與GOTO語句END語句程式單位的結(jié)束主程序中END表示停止程式運(yùn)行副程式中END表示需要返回調(diào)用程式STOP語句作用是停止程式的運(yùn)行格式:STOP[n]GOTO語句格式:GOTO語句標(biāo)號

×

*程式舉例

例2.3任意輸入兩個數(shù),對它們進(jìn)行加、減、乘、除、乘方運(yùn)算分析:結(jié)構(gòu)?變數(shù)?結(jié)構(gòu):順序結(jié)構(gòu)變數(shù):X1、X2,S1、S2、S3、S4、S5*

realx1,x2 read*,x1,x2 s1=x1+x2 s2=x1-x2 s3=x1*x2 s4=x1/x2 s5=x1**x2 print*,"2數(shù)之和為",s1 print*,"2數(shù)之差為",s2 print*,"2數(shù)之積為",s3 print*,"2數(shù)之商為",s4 print*,"2數(shù)之冪為",s5 end問題:S1、S2、S3、S4、S5沒說明,如何判斷類型?*例2.4求f(x)=x3+sin2x+ln(x4+1)分析:f(x)用y表示,x從鍵盤輸入

implicitnone realx,y read*,x y=x**3+(sin(x))**2+log(x**4+1) print*,y end輸入:154輸出:2.401221*例2.5將兩個變數(shù)的值互換。分析:臨時變數(shù)T做橋樑

realx,y,t read*,x,y print*,"交換前x=",x print*,"交換前y=",y t=x x=y y=t print*,"交換後x=",x print*,"交換後y=",y end*方法二、直接用X和Y交換

integerx,y read*,x,y print*,"交換前x=",x print*,"交換前y=",y x=x+y y=x-y x=x-y print*,"交換後x=",x print*,"交換後y=",y end*如何記?左邊:xyx右邊:x與y,+--例2.6輸入一個三位整數(shù),將它反向輸出,如輸入123,輸出321。分析:關(guān)鍵在於如何將N拆分?

integern,m,n1,n2,n3 read*,n n1=mod(n,10) n2=mod(n/10,10) n3=n/100 m=n1*100+n2*10+n3 print*,"原來的數(shù)為:",n print*,"反向輸出的數(shù)為:",m end *如何取位?取第n位:除10n-1,除10取餘賦初值語句DATA語句格式DATA變數(shù)表列/初值表/,變數(shù)表列/初值表/,…用DATA注意變數(shù)與常量在個數(shù)、類型等方面要一一對應(yīng)初值表中,如n個連續(xù)的常量相同,簡寫:n*常量初值表中,不允許出現(xiàn)運(yùn)算式如有多個DATA語句給同一變數(shù)賦初值,以最後一個為準(zhǔn)*

選擇結(jié)構(gòu)程式設(shè)計邏輯if語句塊if結(jié)構(gòu)選擇結(jié)構(gòu)的嵌套用elseif語句實(shí)現(xiàn)多路分支塊分支選擇結(jié)構(gòu)程式舉例**關(guān)係運(yùn)算式格式:<算術(shù)量><關(guān)係運(yùn)算符><算術(shù)量>關(guān)係運(yùn)算符

.GT.(>大於);.LT.(<小於);.EQ.(==等於);

.NE.(/=不等於);.GE.(>=大於或等於);

.LE.(<=小於或等於)結(jié)果是邏輯型常數(shù).TRUE.或.FALSE.

注意兩邊的小數(shù)點(diǎn)不能漏實(shí)數(shù)存在誤差,在用.EQ.

與.NE.

時要特別注意一個算術(shù)型量的兩側(cè)不允許都是關(guān)係運(yùn)算符邏輯運(yùn)算式格式:<邏輯型量><邏輯運(yùn)算符><邏輯型量>邏輯運(yùn)算符

.AND.

與.OR.或.NOT.非

.EQV.等價.NEQV.不等價.XOR.異或結(jié)果是邏輯型值.TRUE.或.FALSE.含義運(yùn)算順序.NOT.→.AND.→.OR.→.EQV.

.NEQV.

.XOR.邏輯運(yùn)算式中,各種運(yùn)算符的優(yōu)先順序:注意不同運(yùn)算符的運(yùn)算對象和運(yùn)算結(jié)果一個邏輯型量的兩側(cè)都可以與邏輯運(yùn)算符相鄰,但不能與算術(shù)運(yùn)算符、關(guān)係運(yùn)算符相鄰不能在算術(shù)量的兩側(cè)都出現(xiàn)關(guān)係運(yùn)算符一定要注意運(yùn)算順序邏輯IF語句一般形式:if(邏輯運(yùn)算式)

內(nèi)嵌語句執(zhí)行過程:

1.先算圓括號內(nèi)判斷條件

2.成立,執(zhí)行內(nèi)嵌語句,然後執(zhí)行後面的語句

3.不成立,直接執(zhí)行後面的語句適用範(fàn)圍:只關(guān)心一種條件時,僅執(zhí)行一個處理的簡單情況注意問題:邏輯if語句中的邏輯運(yùn)算式一定要用一對圓括號括起來;邏輯if語句中的內(nèi)嵌語句只能是單個的可執(zhí)行語句,即內(nèi)嵌語句不能是非執(zhí)行語句,也不能有多於一個可執(zhí)行語句;在使用邏輯if語句時,一定要注意邏輯運(yùn)算式的正確寫法,特別是在使用多個邏輯if語句時更要注意。例3.1輸入三個數(shù),求出最大和最小的值。

realx,y,z,max,min read*,x,y,z max=xmin=x if(max<y)max=y if(max<z)max=z print*,"三個數(shù)中最大數(shù)是",max if(min>y)min=y if(min>z)min=z print*,“三個數(shù)中最小數(shù)是",min end塊IF結(jié)構(gòu)邏輯if語句的局限性只允許有一個語句,多個語句無法實(shí)現(xiàn)實(shí)現(xiàn)多個分支時,如用多個邏輯if語句實(shí)現(xiàn),則每一個邏輯if語句中的邏輯運(yùn)算式比較複雜塊if結(jié)構(gòu)的一般形式If(邏輯運(yùn)算式)thenS1elseS2endif注意問題邏輯運(yùn)算式必須用一對圓括號括起來S1、S2可由若干個可執(zhí)行語句組成,但一行上只能寫一個語句,語句太長時可以使用繼續(xù)行else語句必須單獨(dú)占一行endif語句必須單獨(dú)占一行,表示塊if結(jié)構(gòu)結(jié)束if語句與endif語句是必須的,而then、else語句可根據(jù)實(shí)際情況省略邏輯if與塊if區(qū)別塊if語句至少應(yīng)有一個end

if語句與它相對應(yīng);而邏輯if語句不用塊if結(jié)構(gòu)中有then;而邏輯if語句中無塊if語句中的then後面有多句;邏輯if語句有一句邏輯if可用塊if實(shí)現(xiàn);反之,不一定。例題3.2選擇結(jié)構(gòu)的嵌套一般形式注意每層必以if開始,以end

if結(jié)束。採用縮進(jìn)規(guī)則每層不允許出現(xiàn)交叉可從內(nèi)層轉(zhuǎn)到外層。反之不行;then塊與else塊也不能互轉(zhuǎn)例題3.3N-S流程圖用ELSEIF語句實(shí)現(xiàn)多路分支一般形式注意的問題:用ELSEIF語句實(shí)現(xiàn)多路分支例題3.4例題3.5使用ELSEIF語句時應(yīng)注意的問題elseif語句相當(dāng)於將else語句與下一行的塊if語句連接成一個語句用塊if實(shí)現(xiàn)多路分支,每一塊if必有一endif與之對應(yīng)。但elseif語句不需endif與之對應(yīng)塊if結(jié)構(gòu)中,可有多個else

if,但只能有一個else語句,且與最後一個else

if語句相配對塊if結(jié)構(gòu)中,也可只有else

if,而沒有else特別強(qiáng)調(diào),條件必須寫對,否則會出現(xiàn)邏輯錯誤塊SELECT CASE選擇結(jié)構(gòu)

問題:用elseif語句實(shí)現(xiàn)多路分支,書寫是否方便?是否容易閱讀?解決辦法:塊select case選擇結(jié)構(gòu)

一般格式selectcase(運(yùn)算式)

case(運(yùn)算式1)塊1case(運(yùn)算式2)塊2……case(運(yùn)算式n)塊ncasedefault

默認(rèn)塊endselect執(zhí)行過程說明(1)selectcase後括弧裏的“運(yùn)算式”,用來表示待選擇的內(nèi)容,如成績、工資、年齡等,一般為變數(shù)名,可是整型、邏輯型、單個字元型變數(shù)或者相應(yīng)的運(yùn)算式(2)後面各case分支中,case後面括弧裏的運(yùn)算式相當(dāng)於前面selectcase括弧裏運(yùn)算式的具體取值,取值不同,動作不同(3)casedefault是缺省情況,可有可無(4)endselect為case結(jié)構(gòu)結(jié)束標(biāo)誌

例3.4、設(shè)計程式,完成小學(xué)加、減、乘、除四則運(yùn)算,即輸入兩個數(shù),再輸入一個運(yùn)算符號,做對應(yīng)的運(yùn)算,並顯示相應(yīng)的結(jié)果。

reala,b characterop!定義一個字元變數(shù)

read*,a,b,opselectcase(op) case('+') print*,'兩個數(shù)之和為:',a+b case('-') if(a<b)then print*,'被減數(shù)不能小於減數(shù)' else print*,'兩個數(shù)之差為:',a-b endifcase('*') print*,'兩個數(shù)之積為',a*bcase('/') if(b==0)then print*,'除數(shù)不能為0' else print*,'兩個數(shù)之商為',a/b endifcasedefault print*,"輸入錯誤,請重新輸入"endselectend說明case後括弧內(nèi)運(yùn)算式的值可用以下方式確定:(1)用逗號隔開的單個值,如:case(1,3,5,7)(2)用冒號分隔的值的範(fàn)圍。一般形式為case(a:b),其中,a為下界,b為上界,下界或上界也可缺省,如:case(2:8)、case(:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論