華科fortran第3章1 Fortran語(yǔ)言程序設(shè)計(jì)初步課件_第1頁(yè)
華科fortran第3章1 Fortran語(yǔ)言程序設(shè)計(jì)初步課件_第2頁(yè)
華科fortran第3章1 Fortran語(yǔ)言程序設(shè)計(jì)初步課件_第3頁(yè)
華科fortran第3章1 Fortran語(yǔ)言程序設(shè)計(jì)初步課件_第4頁(yè)
華科fortran第3章1 Fortran語(yǔ)言程序設(shè)計(jì)初步課件_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第三章 Fortran語(yǔ)言程序設(shè)計(jì)初步3.1 Fortran語(yǔ)言發(fā)展概況3.2 簡(jiǎn)單的Fortran程序分析3.3 Fortran源程序的書(shū)寫(xiě)格式3.4 Fortran字符集3.5 運(yùn)行一個(gè)Fortran程序的過(guò)程 50年代末誕生了第一個(gè)主要用于科學(xué)計(jì)算的高級(jí)語(yǔ)言FORTRAN語(yǔ)言。Fortran是英文FORmula TRANslation的縮寫(xiě),意為“公式翻譯”。 它是為科學(xué)、工程問(wèn)題中的那些能夠用數(shù)學(xué)公式表達(dá)的問(wèn)題而設(shè)計(jì)的語(yǔ)言,主要用于數(shù)值計(jì)算。這種語(yǔ)言簡(jiǎn)單易學(xué),因?yàn)榭梢韵癯瓕?xiě)數(shù)學(xué)教科書(shū)里的公式一樣書(shū)寫(xiě)數(shù)學(xué)公式,它比英文書(shū)寫(xiě)的自然語(yǔ)言更接近數(shù)學(xué)語(yǔ)言。FORTRAN語(yǔ)言簡(jiǎn)介3.1 Fortr

2、an語(yǔ)言的發(fā)展概況 Fortran語(yǔ)言是第一個(gè)真正推廣的高級(jí)語(yǔ)言。至今它已有五十多年歷史,但仍歷久不衰,始終是數(shù)值計(jì)算領(lǐng)域所使用的主要語(yǔ)言。Fortran語(yǔ)言問(wèn)世以來(lái),根據(jù)需要幾經(jīng)發(fā)展,先后推出形成了很多版本。FortranI: 第一代Fortran語(yǔ)言,在1954年提出來(lái)的,于1956年在IBM 704計(jì)算機(jī)上得以實(shí)現(xiàn)。FortranII:是1958年出現(xiàn)的,它對(duì)FortranI進(jìn)行了很多擴(kuò)充(如引進(jìn)了子程序),F(xiàn)ortranII在很多機(jī)器上得以實(shí)現(xiàn)。 FortranIII:未在任何計(jì)算機(jī)上實(shí)現(xiàn)。FortranIV: 1962年出現(xiàn)。對(duì)原來(lái)的Fortran作了一些改變,使得FortranII

3、源程序在FortranIV編譯程序下不能全部直接使用,導(dǎo)致了語(yǔ)言不兼容的問(wèn)題。這樣就形成了當(dāng)時(shí)同時(shí)使用FortranII和FortranIV兩種程序設(shè)計(jì)語(yǔ)言的局面。 Fortran66:1966年正式公布了兩個(gè)美國(guó)標(biāo)準(zhǔn)文本:標(biāo)準(zhǔn)基本Fortran X3.10-1966 (相當(dāng)于FortranII)和標(biāo)準(zhǔn)Fortran X3.9-1966(相當(dāng)于FortranIV)。問(wèn)題: 很多編譯程序并不向這一標(biāo)準(zhǔn)靠攏,它們往往為實(shí)現(xiàn)一些有用的功能而忽略標(biāo)準(zhǔn); FortranIV、66都不是結(jié)構(gòu)化的語(yǔ)言,沒(méi)有直接實(shí)現(xiàn)三種基本結(jié)構(gòu)的語(yǔ)句,在程序中往往需要用一些以GOTO語(yǔ)句以實(shí)現(xiàn)特定的算法; 而且為了使非標(biāo)準(zhǔn)的

4、Fortran源程序能夠交換移植,產(chǎn)生了“預(yù)處理程序”,通過(guò)預(yù)處理程序讀入非標(biāo)準(zhǔn)的Fortran源程序,生成標(biāo)準(zhǔn)的Fortran文本,從而實(shí)現(xiàn)了源程序的交換移植,但這種自動(dòng)生成的Fortran程序通常讓人難以理解。 Fortran90:因?yàn)镕ortran77有著明顯的局限性,為了引入一些新的功能,適應(yīng)語(yǔ)言的發(fā)展,1991年通過(guò)了Fortran90新標(biāo)準(zhǔn)ANSI X3.198-1991 ,相應(yīng)的國(guó)際化標(biāo)準(zhǔn)組織的編號(hào)為ISO/IEC1539:1991。 新的Fortran標(biāo)準(zhǔn)廢棄了過(guò)時(shí)的嚴(yán)格的源程序書(shū)寫(xiě)格式,改善了語(yǔ)言的正規(guī)性,并提高了程序的安全性,功能有更大的擴(kuò)充,是一個(gè)能適應(yīng)現(xiàn)代程序設(shè)計(jì)思想的

5、現(xiàn)代程序設(shè)計(jì)語(yǔ)言。 為了保護(hù)對(duì)Fortran77用戶在軟件開(kāi)發(fā)上的巨大投資,整個(gè)Fortran77被作為Fortran90的一個(gè)嚴(yán)格子集。 對(duì)科學(xué)計(jì)算特別有益之一是自動(dòng)存儲(chǔ)、假定形狀數(shù)組、可選參數(shù)、結(jié)構(gòu)和指針。用更友好的接口把軟件很好地工程化。FORTRAN 2000:全面引入面向?qū)ο蟮木幊趟枷?。FORTRAN已經(jīng)完全趕上了編程語(yǔ)言的潮流。Fortran95:它的設(shè)計(jì)在1995年11月完成,是Fortran90的最小擴(kuò)展。為什么選擇 Fortran77 由于很多用戶在Fortran程序上作了巨大的投資,許多大型科學(xué)計(jì)算Fortran程序(有些長(zhǎng)達(dá)數(shù)十萬(wàn)條語(yǔ)句),如分子動(dòng)力學(xué)模擬計(jì)算(C60-C

6、240的碰撞)等程序仍在頻繁地使用。 在科技領(lǐng)域內(nèi)某些標(biāo)準(zhǔn)程序庫(kù)(International Mathematics and Statics Library, Numerical Algorithms Group)內(nèi)有數(shù)千以上的子程序是用Fortran寫(xiě)的,特別是早期的程序都是用Fortran77編寫(xiě)的,這些程序庫(kù)已通過(guò)長(zhǎng)期使用驗(yàn)證了穩(wěn)定性。 科學(xué)研究經(jīng)常需要使用或改編以前的程序,這時(shí)必須了解Fortran77的編程手法。因此,仍然需要學(xué)習(xí)將Fortran77作為基礎(chǔ),但隨時(shí)與Fortran90比較不同之處。Fortran90/95是具有強(qiáng)烈現(xiàn)代特色的語(yǔ)言,總結(jié)了現(xiàn)代軟件的要求與算法應(yīng)用的發(fā)展

7、,增加了許多現(xiàn)代特征的新概念、新功能、新結(jié)構(gòu)、新形式。Fortran90的現(xiàn)代特性表現(xiàn)在:Fortran90/95 加強(qiáng)了程序的可讀性、可維護(hù)性: 淘汰所有轉(zhuǎn)移語(yǔ)句,用新的控制結(jié)構(gòu)實(shí)現(xiàn)選擇分叉與重復(fù)操作,使程序結(jié)構(gòu)化。 同時(shí)增加了結(jié)構(gòu)塊、模塊及過(guò)程的調(diào)用靈活形式,使程序易讀易維護(hù),新的模塊裝配取代了Fortran77的許多舊語(yǔ)句,使程序員更為清晰明確地定義全局?jǐn)?shù)據(jù)。 增加了新的數(shù)據(jù)種別說(shuō)明,使得Fortran程序在不同計(jì)算機(jī)編譯環(huán)境下有更自由的移植性。 發(fā)展了現(xiàn)代算法功能: 加強(qiáng)了數(shù)組的算法功能,引進(jìn)了多種數(shù)組操作功能與概念,使數(shù)組像一個(gè)變量一樣自由操作,使數(shù)組的并行化運(yùn)算成為可能。 增加了適

8、于操作數(shù)據(jù)結(jié)構(gòu)的派生類(lèi)型,提高了文字處理功能,勝任信息管理系統(tǒng)、辦公自動(dòng)化的任務(wù)。特別是動(dòng)態(tài)存儲(chǔ)功能的引進(jìn)極大地加強(qiáng)了它在數(shù)值計(jì)算領(lǐng)域中應(yīng)用的威力。 擴(kuò)大與編程者的友好界面: 新的編程形式減少了煩瑣與格式束縛,接近自然語(yǔ)言與公式演算。 允許在字符數(shù)據(jù)中選取不同種別,在字符串中可使用各國(guó)文字(例如漢字),還可任意使用化學(xué)、物理、數(shù)學(xué)的各種專(zhuān)業(yè)字符。例1.1 輸入兩個(gè)數(shù),求算數(shù)平均和幾何平均值。 1.0 2.0 鍵盤(pán)輸入(a,b)值 1.500000 1.414214 計(jì)算結(jié)果輸出至屏幕F77的固定書(shū)寫(xiě)格式 PROGRAM Example_1_1 C-求兩種平均値- (注釋行) REAL a, b

9、, av1, av2 READ (*,*) a, b av1 = (a + b)/2 av2 = sqrt(a*b) WRITE(*,*) av1, av2 END3.2 簡(jiǎn)單的FORTRAN 77程序分析F90的自由格式PROGRAM Example_1_1 ! 求兩種平均値REAL: a, b, av1, av2READ *, a, bav1 = (a + b)/2; av2 = (a*b)*0.5PRINT *, av1, av2END 程序説明: 程序中第1行是注釋行,對(duì)程序起說(shuō)明作用。 F77注釋行是以“C”或“*”作為該行第一個(gè)字符的, F90可在任意一行末以“!”開(kāi)始作為注釋符。

10、 第2行是主程序名,第3行是變量類(lèi)型定義,第4行是輸入語(yǔ)句,第56行是賦值部分,第7行是打印輸出語(yǔ)句,最后是程序結(jié)束。 F90中用“;”將兩行并為一行。 例1.2 輸入圓錐底面半徑R,高度H,求體積和表面積。 從數(shù)學(xué)公式中知道:V=R2H/3圓錐側(cè)面積圓錐體積F90的自由格式 PROGRAM Example_1_2 REAL : pi, r, h, v, s pi = 3.141593 PRINT *,Input radius r and height h ? READ *, r, h v = pi*h*r*2/3.0 s = pi*r*(r + sqrt(r*2 + h*2) PRINT *

11、, Volume =, v PRINT *, Area =, s END 例1.3 分別求半徑R=1,3,12.5時(shí)的圓周長(zhǎng)。此源程序由二部分組成:主程序和子程序。F90的自由格式real : r(3) !MAIN PROGRAMdata r /1, 3, 12.5/do i=1,3 print *, 半徑, r(i), 圓周長(zhǎng), c(r(i)end doendfunction c(radius) ! SUB PROGRAM pi=acos(-1.0) c=2*pi*radius returnend 一個(gè)Fortran程序由一個(gè)或若干個(gè)程序單位組成。 主程序和輔程序分別是一個(gè)獨(dú)立的程序單位。主

12、程序單元起整體控制作用,各輔程序單元完成總問(wèn)題中的一個(gè)子問(wèn)題。 每一個(gè)程序單位都是以END語(yǔ)句結(jié)束的。END既是一個(gè)程序單位的結(jié)束標(biāo)志,又是一個(gè)獨(dú)立的語(yǔ)句(結(jié)束語(yǔ)句)。 主程序中的END語(yǔ)句的作用-是使程序“停止運(yùn)行”。 輔程序中的END語(yǔ)句-是“使流程返回調(diào)用程序”。Fortran程序的特點(diǎn) 一個(gè)程序單位包括若干行。F77規(guī)定,一行只能寫(xiě)一個(gè)語(yǔ)句,一行中不能寫(xiě)幾個(gè)語(yǔ)句。如果一個(gè)語(yǔ)句太長(zhǎng),一行內(nèi)寫(xiě)不下的話,可以寫(xiě)在繼續(xù)行(要用“續(xù)行標(biāo)志”)。 F77行分為下面兩類(lèi)。語(yǔ)句行:由一個(gè)Fortran語(yǔ)句組成, Fortran語(yǔ)句分為執(zhí)行語(yǔ)句和非執(zhí)行語(yǔ)句。 執(zhí)行語(yǔ)句使計(jì)算機(jī)在運(yùn)行時(shí)產(chǎn)生某些操作,如賦值

13、語(yǔ)句、打印語(yǔ)句等。 非執(zhí)行語(yǔ)句(包括說(shuō)明語(yǔ)句,數(shù)據(jù)語(yǔ)句等)將有關(guān)信息通知編譯系統(tǒng),以便在編譯時(shí)作出相應(yīng)的處理,例如類(lèi)型說(shuō)明語(yǔ)句、函數(shù)子程序語(yǔ)句等。非語(yǔ)句行:即注釋行它不是Fortran語(yǔ)句,它不被翻譯成機(jī)器目標(biāo)指令。不產(chǎn)生任何機(jī)器操作。它僅僅是為了人們閱讀程序的方便而加到程序中的。一個(gè)程序中注釋行的數(shù)目不受限制,根據(jù)需要而定。但一個(gè)程序單位不能只由注釋行組成。注釋行的內(nèi)容完全是根據(jù)程序設(shè)計(jì)人員需要而寫(xiě)的,一般是為程序(或程序中一部分)的作用作注釋以易于理解程序。 F90行不分類(lèi)。注釋可以寫(xiě)在任一行末尾,而且一行不限語(yǔ)句數(shù),可以將幾個(gè)F77行合并寫(xiě)入一行。這樣,極大地簡(jiǎn)化了程序?qū)懛?,使得程序可?/p>

14、編寫(xiě)得更為清晰明了。因此F90的格式較F77有柔軟性。 Fortran程序中的語(yǔ)句可以有標(biāo)號(hào)。一個(gè)語(yǔ)句有否標(biāo)號(hào)是根據(jù)需要而定,其作用是標(biāo)志一個(gè)語(yǔ)句以便被其它語(yǔ)句引用。在同一個(gè)程序單元中不能有兩個(gè)相同標(biāo)號(hào)的語(yǔ)句。標(biāo)號(hào)不影響語(yǔ)句的執(zhí)行順序。 在F90中因?yàn)樘岢Y(jié)構(gòu)化程序設(shè)計(jì),一般不使用標(biāo)號(hào)。 一個(gè)程序單位中各類(lèi)語(yǔ)句的位置是有一定規(guī)定的。 例如 PROGRAM語(yǔ)句應(yīng)是主程序的第一個(gè)語(yǔ)句 FUNCTION語(yǔ)句是函數(shù)子程序的第一個(gè)語(yǔ)句 SUBROUTINE語(yǔ)句是SUB子程序的第一個(gè)語(yǔ)句 END語(yǔ)句只能是程序單位中最后一行。 主程序 PROGRAM 程序名 語(yǔ)句可省略 .END PROGRAM 程序名 E

15、ND必須有FORTRAN 程序的構(gòu)成a)程序單位輔程序(過(guò)程) SUBROUTINE 子程序 FUNCTION 函數(shù) BLOCK DATA 塊數(shù)據(jù) MODULE 模塊 (F90) 內(nèi)部過(guò)程CONTAINS (F90)各程序單位(除模塊程序單位外)的程序體形式相同,共分兩部分:前面是說(shuō)明部分,后面是執(zhí)行部分(模塊程序單位只有說(shuō)明部分),兩部分之間沒(méi)有確切的分界,緊密銜接,但不準(zhǔn)彼此穿插。即:程序單位單位起始語(yǔ)句程序體單位結(jié)束語(yǔ)句。 程序體說(shuō)明部分執(zhí)行部分。PROGRAM,F(xiàn)UNCTION,SUBROUTINE,BLOCK DATA等程序單位開(kāi)始語(yǔ)句 變量類(lèi)型和語(yǔ)句函數(shù)等定義語(yǔ)句(說(shuō)明部分) 執(zhí)行

16、語(yǔ)句,DATA語(yǔ)句,F(xiàn)ORMAT語(yǔ)句 (執(zhí)行部分)END語(yǔ)句b)程序體和語(yǔ)句順序Fortran要求嚴(yán)格的語(yǔ)句順序。在每個(gè)程序單位中,根據(jù)語(yǔ)句種類(lèi)按如下的次序排列。F77中的順序可簡(jiǎn)單歸納為: c)英文名變量名和程序名等使用的英文名是由(F77:6;F90:31)個(gè)字符(包含英文字母A-Z、數(shù)字0-9、F90:下劃線 _)構(gòu)成,且第一個(gè)字符必須是字母。其英文名的有效使用范圍原則上限于一個(gè)程序單位之內(nèi)(內(nèi)部過(guò)程除外)。如下面的語(yǔ)句是錯(cuò)誤的: INTEGER : 1A ! 不是以字母開(kāi)頭 INTEGER: A_name_made_up_of_more_than_31_letters !太長(zhǎng) INTE

17、GER : China:0 ! 含有不允許的字符 INTEGER : A-3 ! 減號(hào)在此是無(wú)意義的 d) 標(biāo)號(hào)和標(biāo)簽可在語(yǔ)句開(kāi)頭加上標(biāo)號(hào)或標(biāo)簽,用于指定特定的語(yǔ)句。有效范圍限于一個(gè)程序單位內(nèi)。標(biāo)號(hào):1-5位的10進(jìn)制整數(shù),且至少一位不為0,前導(dǎo)0不起作用。F90中,不可對(duì)空語(yǔ)句加上語(yǔ)句標(biāo)號(hào)。例: DO 10 k = 1,100 . 10 CONTINUE標(biāo)簽:英文名,后面接“:”(冒號(hào)) (F90)注:不能使用整型變量來(lái)指定轉(zhuǎn)向語(yǔ)句的標(biāo)號(hào)。如下是錯(cuò)誤的。 n = 10 GOTO n例: DO k = 1,100loop2: DO . END DO loop2 !已有標(biāo)簽名時(shí)不能省略標(biāo)簽名。

18、END DO標(biāo)號(hào)區(qū):第l5列可以寫(xiě)l至5位整數(shù)。也可以沒(méi)有標(biāo)號(hào)。標(biāo)號(hào)區(qū)中的空格不起作用。如lOO與100 或1 0 0作用相同。標(biāo)號(hào)應(yīng)是無(wú)符號(hào)整數(shù)(無(wú)正負(fù)號(hào)或小數(shù)點(diǎn))。標(biāo)號(hào)大小順序沒(méi)有任何要求。假如第二行的標(biāo)號(hào)為1000,第三行的標(biāo)號(hào)可以是10,也可以是99999。標(biāo)號(hào)區(qū)內(nèi)不得出現(xiàn)標(biāo)號(hào)以外的內(nèi)容,但注釋行例外。注釋行的內(nèi)容可以寫(xiě)在標(biāo)號(hào)區(qū)內(nèi),一行中第一列為C或*的,該行即被認(rèn)為注釋行,編譯時(shí)對(duì)該行內(nèi)容不作翻譯,對(duì)程序運(yùn)行不產(chǎn)生任何影響。如果在第一列上出現(xiàn)的不是數(shù)字、空格或C和*的字符,編譯時(shí)按出錯(cuò)處理。一行分為四個(gè)區(qū), 分別書(shū)寫(xiě)源程序不同部分的內(nèi)容續(xù)行區(qū):第6列如果在一行的第6列上寫(xiě)一個(gè)非空格和

19、非零的字符,則該行作為其上一行的續(xù)行。 F77允許一個(gè)語(yǔ)句有19個(gè)續(xù)行(即一個(gè)語(yǔ)句最多可以寫(xiě)成20行)。有的程序中第6列上用“l(fā)”,“2”,表示該行是第1個(gè)或第2個(gè)續(xù)行,但用數(shù)字字符容易與第7列的數(shù)字形成連續(xù)的數(shù)字串而引起錯(cuò)覺(jué),故最好使用固定的特殊字符。 語(yǔ)句區(qū):第772列不要求一定從第7列開(kāi)始寫(xiě)語(yǔ)句,可以從第7列以后(72列以前)的任何一列開(kāi)始寫(xiě),但一行只能寫(xiě)一個(gè)語(yǔ)句。如果寫(xiě)滿了72列,一旦在終端上修改程序時(shí)在該行又插入了一些字符,就會(huì)使本行最后幾個(gè)字符超出語(yǔ)句區(qū)而引起意料不到的錯(cuò)誤。特別注意到語(yǔ)句最后的空格將可能溢出72列,在某些計(jì)算機(jī)系統(tǒng)上將導(dǎo)致難以查出的錯(cuò)誤。應(yīng)注意,引號(hào)內(nèi)的字符串中所

20、包括的空格是有效的,不能忽略。注釋區(qū):第7380列在卡片輸入法時(shí)代,程序員一般利用此8列為程序行編序號(hào)以便查找。注釋區(qū)只對(duì)程序員提供辨別信息,不是語(yǔ)句的一部分,在編譯時(shí)不對(duì)7280列作處理。續(xù)行標(biāo)志區(qū)b) 自由格式在F90中,用自由格式編寫(xiě)程序有很大的自由度。與固定格式相比,不易產(chǎn)生鍵入位置的錯(cuò)誤,而且易讀易懂。行:一行為132列??梢杂袕?fù)數(shù)條程序語(yǔ)句,語(yǔ)句間用分號(hào)“;”分開(kāi)。語(yǔ)句沒(méi)有位置規(guī)定。注釋行:起始用注釋符“!”號(hào),此行其后的所有字符均作為注釋?zhuān)ㄗ址械?號(hào)除外,如 print *,help! )。續(xù)行:當(dāng)一個(gè)語(yǔ)句非常長(zhǎng)以至于132列都書(shū)寫(xiě)不下時(shí),允許有39個(gè)續(xù)行。在語(yǔ)句行最后加上續(xù)行符“&”號(hào)。如果字符串跨2行以上,則在續(xù)行的開(kāi)始位置也要加&號(hào)。注意語(yǔ)句的有效字符是從“&”前

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論