




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、以下文字轉載自 D_Atmosphere 討論區 】 原文由 superjyq 所發表 】我的 Fortran 基本用法小結 高級語言和算法組 heavensky目錄:一、說明二、概述三、數據類型及基本輸入輸出四、流程控制五、循環六、數組七、函數八、文件、說明本文多數內容是我讀彭國倫 Fortran 95 程序設計 的筆記。只讀到第九章, 主要是 39章, 都是些最基本的用法(原書共 16 章)。這里主要摘錄了我看書過程中總結的一些Fortran 和C 不同的地方,主要是語法方面。希望這份筆記能夠給學過 C 但沒有接觸過 Fortran 的同學 帶去一些幫助。要想弄得更清楚些,推薦看一下原書,
2、覺得作者真的寫得很好,很清楚;如 果有 C 語言的基礎,看完前九章應該很快的,花一兩天就行了。覺得如果耐心看完本文, 基本功能應該也可以順利用起來了。另外,由于我之前沒有用過Fortran,這次為了趕文檔看書又看得很粗淺,大多數東西看過之后都沒來得及仔細想, 只是按著作者的意思去理解。 所以這份筆記還處于紙上談兵的層次。 如果有不妥的地方,希望大家指正。謝謝!文中藍色的部分是程序代碼,! 后面的內容為注釋。二、概述1、名詞解釋Fortran=Formula Translator/Translation 一看就知道有什么特色了:可以把接近數學語言的文本翻譯成機械語言。的確,從一開始,IBM 設計
3、它的時候就是為了方便數值計算和科學數據處理。設計強大的數組操作就是為了 實現這一目標。 Fortran 奠定了高級語言發展的基礎。現在 Fortran 在科研和機械方面應用很 廣。2、Fortran 的主要版本及差別按其發展歷史, Fortran 編譯器的版本其實很多。 現在在廣泛使用的是 Fortran 77 和 Fortran90。 Fortran 90 在 Fortran 77 基礎上添加了不少使用的功能,并且改良了 77 編程的版面格式,所 以編程時推薦使用 90。鑒于很多現成的程序只有 77版本,有必要知道 77 的一些基本常識, 至少保證能夠看懂 77程序。以下是 77和 90的一
4、些格式上的區別。Fortran 77 : 固定格式( fixed format ),程序代碼擴展名: .f 或 .for(1)若某行以 C,c 或*開頭,則該行被當成注釋;(2)每行前六個字符不能寫程序代碼,可空著,或者15 字符以數字表明行代碼(用作格式化輸入輸出等) ;772為程序代碼編寫區; 73 往后被忽略;(3)太長的話可以續行,所續行的第六個字符必須是"0" 以外的任何字符。Fortran 90 :自由格式( free format ), 擴展名: .f90(1)以"!" 引導注釋;(2)每行可 132 字符,行代碼放在每行最前面;(3)以
5、& 續行,放在該行末或下行初。以下都是討論 Fortran 90 。3、Fortran 的一些特點和 C 不同,在下面涉及具體方面時可以看到。這里只是大致提一些。(1)不分大小寫(2)每句末尾不必要寫分號(3)程序代碼命令間的空格沒有意義(4)不像 C, Fortran 不使用 (5)數據類型多出了復數和邏輯判斷類型。比如復數類型complex : a !聲明復數的方法。復數顯然方便了科學計算,滿足了工程方面的需求a=(1.0,2.0) ! a=1+i(6)多出了乘冪運算( * )。乘冪除了整數還可以是實數形式。如開方,開立方 a=4.0*0.5 , a=8.0*(1.0/3.0) 。
6、(7)數組有一些整體操作的功能;可以方便的對部分元素進行操作(8)有些情況下可以聲明大小待定的數組,很實用的功能4、Fortran 的基本程序結構 先看一看所謂的 "Hello Fortran" 程序。 program main ! 程序開始, main 是 program 的名字,完全自定義 write(*,*) "Hello"! 主程序stop !終止程序end programmain !end 用于封裝代碼,表示代碼編寫完畢。 中的內容可省略,下同。再看一段實用一些的程序, 好有點感性認識。 程序用于計算圓柱的表面積, 要求輸入底面半 徑和高。其中
7、展示了 Fortran 的一些特色用法。 程序摘自維基。 其實是一個叫 的網上引用的維基的網頁。推薦去看看!能查到不少有意思的東西。program cylinder! 給主函數起個名字! Calculate the area of a cylinder.! Declare variables and constants.! constants=pi! variables=radius squared and heightimplicit none ! Require all variables to be explicitly declared! 這個一般都是要寫上的。下面會進一步說明。 in
8、teger : ierr character : ynreal : radius, height, areareal, parameter : pi = 3.1415926536 !這是常量的聲明方法interactive_loop: do !do 循環, Fortran 中的循環可以加標簽,如 do 前 !面的 interactive_loop 就是標簽! Prompt the user for radius and height and read them.write (*,*) 'Enter radius and height.'! 屏幕輸出read (*,*,iosta
9、t=ierr) radius,height! 鍵盤輸入。 isotat 的值用于判斷!輸入成功否。! If radius and height could not be read from input,! then cycle through the loop.if (ierr /= 0) thenwrite(*,*) 'Error, invalid input.'cycle interactive_loop !cycle 相當于 C 里的 continue end if! Compute area. The * means "raise to a power.&qu
10、ot;area = 2 * pi * (radius*2 + radius*height)! 指數運算比 C 方便! Write the input variables (radius, height) ! and output (area) to the screen.write (*,'(1x,a7,f6.2,5x,a7,f6.2,5x,a5,f6.2)') &!"&" 表示續行。這里!還顯示了格式化輸出'radius=',radius,'height=',height,'area=',ar
11、eayn = ' 'yn_loop: do! 內嵌的另一個 do 循環write(*,*) 'Perform another calculation? yn' read(*,'(a1)') ynif (yn='y' .or. yn='Y') exit yn_loopif (yn='n' .or. yn='N' .or. yn=' ') exit interactive_loopend do yn_loop! 結束內嵌 do 循環end do interactive_l
12、oop end program cylinderFortran 程序的主要結構就是這樣了。一般還會有些 module 的部分在主函數前,函數在主函 數后。三、數據類型及基本輸入輸出1、數據類型,聲明及賦初值(1) integer: 短整型 kind=2, 長整型 kind=4integer(kind=2) : a=3如果聲明成 integer: a ,則默認為長整型。!":" 在聲明并同時賦初值時必須要寫上; 類型名后面有形容詞時也必須有; 其他情況可略 去 ! 所謂形容詞,可以看一下這個。比如聲明常數real, parameter : pi=3.1415926 。 par
13、ameter 就是形容詞。(2) real:單精度kind=4 (默認),雙精度kind=8real(kind=8) : a=3.0還有指數的形式,如 1E10 為單精度, 1D10 為雙精度( 3) complex 單精度和雙精度complex(kind=4) b( 4) charactercharacter(len=10) c !len 為最大長度( 5) logicallogical*2 : d=.ture. ( 等價于 logical(2):d=.ture.)(6)自定義類型type:類似于 C中的structFortran 77 中給變量賦初值常用 DATA 命令,可同時給多個變量賦
14、初值data a,b,string /1, 2.0, 'fortran'/與 C 不同的是, Fortran 中變量不聲明也能使用 ,即有默認類型(跟 implicit 命令有關) 。按照 默認的規定,以i,j,k,l,m,n開頭的變量被定義為integer,其余為real。取消該設置需在程序聲 明部分之前加 implicit none 。彭國倫建議一般都使用該語句。另一點關于聲明的不同是 Fortran 有"等價聲明 ":integer a,bequivalence(a,b)使得a,b使用同一塊內存。這樣可以節省內存;有時可精簡代碼。如:equivalen
15、ce(很長名字的變量,比如三維數組的某個元素,a),之后使用a來編寫程序就簡潔多了。2、基本輸入輸出輸入: read(*,*) a! 從鍵盤讀入輸出: write(*,*) "text"!在屏幕上輸出。Fortran 77 用 'text'。 Fortran 90!一般 " "和' '都可print * , "text"! 只能屏幕輸出( *,* )完整寫為 (unit=*,fmt=* )。其中 unit 為輸入 /輸出位置, 如屏幕, 文件等; fmt 為格式。print 后面的 * 表示按默認格式如
16、果這兩項都寫成 * ,則按默認的方式進行,即上面描述的。 輸出。四、流程控制1、運算符(1)邏輯運算符= /= > >= < <=!Fortran 90 用法.EQ. .NE. .GT. .GE. .LT. .LE. !Fortran 77 用法(2)涉及相互關系的集合運算符.AND. .OR. .NOT. .EQV. .NEQV.! 僅 .NOT. 連接一個表達式,其余左右兩邊都要有表達式(可以是logical 類型的變量)LEQV.:當兩邊邏輯運算值相同時為真,.NEQV.:當兩邊邏輯運算值不同時為真 2、IF(1) 基本 :if(邏輯判斷式)then end if
17、如果 then 后面只有一句,可寫為if(邏輯判斷式) !then和end if可省略(2) 多重判斷:if( 邏輯判斷式 ) then else if else if else end if(3)嵌套:if( 邏輯判斷式 ) thenif( 邏輯判斷式 ) thenif( 邏輯判斷式 ) then else if( 邏輯判斷式 ) thenelseend if!沒必要跟C語句多時用 了,因為有end ifend ifend if(4) 算術判斷: program example implicit none real c write (*,*) "input a number&quo
18、t; read (*,*) cif(c) 10,20,30!10,20和30為行代碼 根據c小于/等于/大于0,執行10/20/30行的程序10 write (*,*)"A"goto 40!goto 可實現跳到任意前面或后面的行代碼處,但用多了破壞程序結構20 write (*,*)"B" goto 4030 write (*,*)"C" goto 40 40 stop end 3、SELECT CASE 類似于 C 的 switch 語句select case變量)case (數值1)!比如case(1:5)代表1<=變量&l
19、t;=5會執行該模塊!case( 1,3,5)代表變量等于1或3或5會執行該模塊case(數值2)!括號中數值只能是integer,character或logical型常量,不能是 real型 case default end case 4、PAUSE, CONTINUEpause暫停程序執行,按 en ter可繼續執行continue 貌似沒什么用處,可用作封裝程序的標志五、循環1、DOdo counter=初值,終值,增/減量!counter的值從初值到終值按增/減量變化,!counter 每取一個值對應著一次循環。增/減量不寫則默認為1! 循環主體也沒有必要用 end doFortran
20、 77 中不是用 end do 來終止,而是下面這樣子:do循環最后一行的行代碼counter=初值,終值,增/減量行代碼 !這是do的最后一行2、DO WHILE do while( 邏輯運算 ) end do類似于C中的while(邏輯運算)。一開始那個計算圓柱表面積的程序中,應該也算是這一類。不過它是通過內部的if 語句來控制循環。 看來也是可以的, 不過在這本書上沒看到這樣寫。 其實應該也可以歸于下面這種。3、沒看到和C里面的dowhile(邏輯運算);相對應的循環語句,不過可以這樣,保證至少做一次循環:do while(.ture.) if( 邏輯運算 ) exit !exit 就好
21、比 C 里面的 break。 C 里的 continue 在 Fortran 里是 cycle end do4、 Fortran 的一個特色:帶署名的循環可以這樣,不易出錯:,如下outer: do i=1,3 inner: do j=1,3 end do inner end do outer還可以這樣,很方便:loop 1: do i=1,3loop2: do j=1,3 if(i=3) exit loop1 if(j=2) cycle loop2!exit 終止整個循環 loop1!cycle 跳出 loop2 的本次循環,進行 loop2 的下一次循環write(*,*) i,j end
22、 do loop2 end do loop1還有一些循環主要用于Fortran 中的數組運算,為 Fortran 特有,很實用。六、數組1、數組的聲明和 C 不同的是, Fortran 中的數組元素的索引值寫在()內,且高維的也只用一個()integer a(5)! 聲明一個整型一維數組real : b(3,6) !聲明一個實型二維數組類型可以是 integer, real, character, logical 或 type。最高可以到 7 維。數組大小必須為常數。但是和 C 語言不同, Fortran 也有辦法使用大小可變的數組,方法如 下:integer, allocatable : a
23、(:) !聲明 大小可變經過某個途徑得知所需數組大小 size 之后,用下面的語句: allocate(a(size)!配置內存空間之后該數組和通過一般方法聲明的數組完全相同。與 C 不同, Fortran 索引值默認為從 1 開始,而且可以在聲明時改變該規則:integer a(-3:1)! 索引值為 -3,-2,-1,0, 1integer b(2:3,-1:3) !b(23,-13) 為可使用的元素2、數組在內存中的存放和C不同,Fortran中的數組比如a(2,2)在內存中存放順序為a(1,1),a(2,1),a(1,2),a(2,2)。原則是先放低維的元素,再放高維的元素。此規則稱為 column major。3、賦初值( 1 )最普通的做法:integer a(5)data a /1,2,3,4,5/或 integer : a(5)=(/1,2,3,4,5/)若integer : a(5)=5,貝U 5個元素均為5對于 integer : a(2,2)=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025中國銀行外匯商業房抵押貸款合同中國銀行抵押貸款
- 2025授權專賣店特許合同范本
- 2025設備租賃合同欠款爭議解決
- 2025專利使用許可專用合同范本
- 《2025年度企業雇傭合同》
- 2025年標準管理資金信托合同模板
- 2025企業臨時工勞動合同樣本示范
- 2025租賃合同格式
- 2025網絡安全等級保護測評服務合同
- 2025合同違約不及時履行將產生保函責任
- 電臺項目可行性研究報告
- 2025年度事業單位招聘考試公共基礎知識仿真模擬試卷及答案(共五套)
- 人教版(2024)七年級下冊英語期中質量檢測試卷(含答案)
- 針刺傷預防與處理(中華護理學會團體標準)
- 2024年度《安全教育家長會》課件
- 安全生產法律法規知識培訓課件
- 地鐵安檢專業知識培訓課件
- 2024年國家國防科技工業局軍工項目審核中心招聘筆試參考題庫附帶答案詳解
- 南京開通KT820數控車床說明書
- GB/T 17554.1-2006識別卡測試方法第1部分:一般特性測試
- 三年級家長會(語文).ppt
評論
0/150
提交評論