FORTRAN90學(xué)習(xí)指導(dǎo)書_第1頁
FORTRAN90學(xué)習(xí)指導(dǎo)書_第2頁
FORTRAN90學(xué)習(xí)指導(dǎo)書_第3頁
FORTRAN90學(xué)習(xí)指導(dǎo)書_第4頁
FORTRAN90學(xué)習(xí)指導(dǎo)書_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、輔導(dǎo)資料fortran90 楚紅fortran90學(xué)習(xí)指導(dǎo)一、fortran90基礎(chǔ)知識(shí)1源程序及其構(gòu)成 書寫格式:主程序定義語句、結(jié)束語句注意:在沒有程序名稱的時(shí)候,程序開頭的program也不要出現(xiàn)。如果使用了程序名稱且在end語句中出現(xiàn),則end語句中的program不能省略。語句行可以是0132個(gè)字符;除賦值語句外,每個(gè)語句都要使用關(guān)鍵字開頭。如果希望一行中出現(xiàn)多個(gè)語句,語句一定要用分號(hào)隔開??崭癫荒茈S便使用,關(guān)鍵字、變量和常量名以及操作符中的空格會(huì)使字符失去其原有的含義。但它們之間一定要加空格。注釋行:以感嘆號(hào)為標(biāo)記,或“c”、“*”(fortran90中不提倡此用法)續(xù)行標(biāo)記:在句

2、末尾添加續(xù)行符&,如果將關(guān)鍵字分成兩行,則下一行開頭也要加續(xù)行標(biāo)記。如果續(xù)行符出現(xiàn)在注釋語句中,則失去了續(xù)行的功能。2fortran90字符集1 26個(gè)英文字母(大小寫字母等價(jià))2 10個(gè)阿拉伯?dāng)?shù)字3 下劃線4 21個(gè)特殊字符:空格 = + - * / ( ) , . : ! “ % & ; ? $5 其他字符(只可以出現(xiàn)在字符常量、字符串編輯描述符、注釋和輸入輸出記錄中)3基本數(shù)據(jù)類型1 整型 kind值可以為1、2、4 類型說明關(guān)鍵字:integer kind值決定數(shù)據(jù)的范圍。對(duì)于整數(shù)沒有誤差。 i=3/2=1;i=1/2=0 integer(kind=4):a integer*4:a i

3、nteger(4):a2 實(shí)型 kind值可以為4(單精度7位有效數(shù)字)、8(雙精度1517位有效數(shù)字) 類型說明關(guān)鍵字:real 小數(shù)表示形式、指數(shù)表示形式 (規(guī)格化的指數(shù)形式)錯(cuò)誤表示形式:e34、.e34、0.14e2.3 8開3次方:8.0*(1.0/3.0)3 復(fù)型 kind值為4、8 是實(shí)數(shù)的有序?qū)?,將兩個(gè)實(shí)數(shù)中間用逗號(hào)分隔,然后放在一對(duì)括號(hào)中 類型說明關(guān)鍵字:complex 復(fù)數(shù)的運(yùn)算:+、*、/4 字符型 kind值為國家語言種類 由一對(duì)單撇號(hào)或一對(duì)雙撇號(hào)之間的字符序列組成。 字符串內(nèi)大小寫字母均可使用,但識(shí)別為不同字符。撇號(hào)不是字符串的組成部分。 類型說明關(guān)鍵字:charac

4、ter character(len=10,kind=):a character(10):a character*10:a character*(*),parameter:a=aasdfasd 運(yùn)算符:/ 函數(shù):char(num);ichar(char);len(string);len_trim(string) index(string,key);trim(string)5 邏輯型 kind值為2、4 只有真(.true.)和假(.false.)兩個(gè)值。4命名規(guī)則1 名字的長度不能超過31個(gè)字符。2 名字的組成成分可以是字母、數(shù)字和下劃線。3 名字的第一個(gè)字符必須是字母。4 要特別注意,在名字中

5、不能出現(xiàn)空格。5 變量名不能與全局名(程序單位名,數(shù)組名)同名,也不要與關(guān)鍵字同名。6 名稱不區(qū)分大小寫。二、基本語句1類型說明語句a 顯式說明:b 隱含說明:implicit integer (a-c) !fortran90不再使用c i-n規(guī)則:d 屏蔽i-n規(guī)則:implicit none2種別說明program ex0435implicit none! 判斷可以記錄9個(gè)位數(shù)的整數(shù)kind值integer, parameter : long_int = selected_int_kind( 9 ) ! 判斷可以記錄3個(gè)位數(shù)的整數(shù)kind值integer, parameter : shor

6、t_int = selected_int_kind( 3 ) ! 判斷可以有10個(gè)有效位數(shù), 指數(shù)可以記錄到50的浮點(diǎn)數(shù)kind值integer, parameter : long_real = selected_real_kind( 10, 50 )! 判斷可以有3個(gè)有效位數(shù), 指數(shù)可以記錄到3的浮點(diǎn)數(shù)kind值integer, parameter : short_real= selected_real_kind( 3, 3 )integer(kind=long_int) : a = 12345678integer(kind=short_int) : b = 12real(kind=long

7、_real) : c = 1.23456789d45real(kind=short_real) : d = 1230write(*, (i3,1x,i10) ) long_int, awrite(*, (i3,1x,i10) ) short_int, bwrite(*, (i3,1x,e10.5) ) long_real, cwrite(*, (i3,1x,e10.5) ) short_real, dstopendprogram ex0436implicit nonereal(kind=4) : areal(kind=8) : ba=1.0_4 ! 確定1.0這個(gè)數(shù)字是使用單精度b=1.0_8

8、 ! 確定1.0這個(gè)數(shù)字是使用雙精度write(*,*) a,bstopend3屬性說明: external:當(dāng)用戶過程作為實(shí)元時(shí) intrinsic:當(dāng)內(nèi)在函數(shù)名作為實(shí)元時(shí) save:保存外部過程變量的值 intent:決定虛元值的傳遞方向 parameter:符號(hào)常量聲明equivalence:等價(jià)聲明 !equivalence(a,b)表示a,b使用同一內(nèi)存空間optional:可選擇屬性的變?cè)猘llocatable:動(dòng)態(tài)屬性的變?cè)猘ssign:賦值語句entry:為函數(shù)子程序或子例子程序提供多個(gè)入口4算術(shù)表達(dá)式 a算術(shù)運(yùn)算符:* * 、/ +、 注意:同級(jí)運(yùn)算左結(jié)合,乘方運(yùn)算右結(jié)合 b

9、內(nèi)在函數(shù): 數(shù)值函數(shù):abs(x):對(duì)任何類型的數(shù)值求絕對(duì)值。類似的有cabs();iabs();dabs()aimag(z):返回復(fù)數(shù)z的虛部。aint(a,kind):返回舍去小數(shù)后的參數(shù)值。int()anint(a,kind):返回最接近參數(shù)a的整數(shù)值。nint()ceiling(a):返回一個(gè)等于或大于a的最小整數(shù)。cmplx(x):復(fù)數(shù)類型轉(zhuǎn)換;當(dāng)復(fù)數(shù)賦值時(shí)實(shí)部或虛部為表達(dá)式,則要用該函數(shù)floor(a):返回等于或小于a的最大整數(shù)。mod(a,b):計(jì)算a/b的余數(shù)。當(dāng)參數(shù)為浮點(diǎn)數(shù)時(shí),返回(a-int(a/b)*b)sign(a,b):b=0 返回abs(a);b5) 或 all(

10、ab)!a、b是類型相同的數(shù)組,檢查a中是否每一個(gè)元素都比數(shù)組b中任何一個(gè)元素大,返回一個(gè)邏輯值。any():對(duì)數(shù)組進(jìn)行邏輯判斷,只要有一個(gè)元素滿足條件就返回真值count():返回?cái)?shù)組中合乎條件的元素?cái)?shù)目。product():返回?cái)?shù)組中所有元素的相乘值。sum():計(jì)算數(shù)組元素的總和。 數(shù)組查詢函數(shù):allocated():檢查一個(gè)可變大小的數(shù)組是否已經(jīng)聲明大小。lbound():返回?cái)?shù)組聲明時(shí)的下限值shape():返回?cái)?shù)組的維數(shù)及大小。如:integer a(2,3,4) integer b(3) b=shape(a) 執(zhí)行結(jié)果:b(1)=2 b(2)=3 b(3)=4size():返回

11、數(shù)組大小ubound():返回?cái)?shù)組上限unpack(vector,mask,field):根據(jù)邏輯運(yùn)算的結(jié)果,返回一個(gè)變形的多維數(shù)組。結(jié)果會(huì)根據(jù)在內(nèi)存中的順序,如果邏輯為真,回填入vector的值,否則就回填入field的值。integer:a(4)=(/1,2,3,4/)integer:b(2,2)logical:c(2,2)=reshape(/.true.,.true.,.false.,.false./),(/2,2/)b=unpack(a,c,0)執(zhí)行后b=(/1,2,0,0/) 數(shù)組變形函數(shù):reshape(data,shape):通過shape的設(shè)置,把一串?dāng)?shù)據(jù)“整形”后,再傳給一個(gè)

12、數(shù)組。例如:integer:a(3,3)=(/1,2,3,4,5,6,7,8,9/)integer:b(9)b=reshape(a,(/9/)a=reshape(b,(/3,3/)但是:integer:a(3,3)integer:b(9)a=(/1,2,3,4,5,6,7,8,9/) !編譯出錯(cuò),形狀不同,必須用函數(shù)b=reshape(a,(/9/)a=reshape(b,(/3,3/)endtranspose():返回一個(gè)轉(zhuǎn)置矩陣 c算術(shù)表達(dá)式 書寫表達(dá)式應(yīng)注意幾點(diǎn):(教材41面1、2、3、4) 注意表達(dá)式結(jié)果的類型和種別。5賦值語句 賦值語句的功能:計(jì)算、類型轉(zhuǎn)換、賦值6輸入輸出語句a 表

13、控格式的輸入輸出:read *,a,bread(*,*)a,b 注意: 各數(shù)據(jù)間有分隔符: 逗號(hào)或空格。 類型匹配:整數(shù):不得帶小數(shù)點(diǎn); 實(shí)數(shù):可以為整數(shù);小數(shù)形式;指數(shù)形式 復(fù)數(shù):(實(shí)部,虛部);實(shí)部和虛部可以為整型也可為實(shí)型 字符:一串字符,賦值時(shí)長度轉(zhuǎn)化;一串字符,即可省略。 邏輯:以t或f作為第一個(gè)字母的字符串(點(diǎn)號(hào)、空格在前忽略) 如果輸入一個(gè)整型數(shù),則偶數(shù)為假,奇數(shù)為真 個(gè)數(shù): 1)不得少于變量的個(gè)數(shù); 2)可分行輸入; 3)多余的數(shù)據(jù)不起作用 4)每一個(gè)read開始一個(gè)新的記錄 無效值的輸入 , , 連續(xù)兩個(gè)逗號(hào),對(duì)變量值不影響。 空格可以多個(gè),/ 表示輸入數(shù)據(jù)結(jié)束,后面的數(shù)據(jù)被

14、取消, 沒有輸入數(shù)據(jù)的變量值為0;read*,a,b,c 輸入: 2,1/3 結(jié)果: a=2 b=1 c=0 r*c: r為重復(fù)數(shù) 4*0.5,2*3,2*ab,3*(1.0,-1.0) 多個(gè)read語句 每個(gè)read必須從一個(gè)新的行輸入數(shù)據(jù)print *,a,bwrite(*,*)a,b 固定的輸出寬度 類型:復(fù)型: 帶( )輸出 邏輯型:t,f 輸出一個(gè)字符 字符型:丟失,采用左對(duì)齊輸出3. 一行顯示不下,數(shù)據(jù)自動(dòng)換行輸出4. 多個(gè)print語句:每個(gè)開始輸出一個(gè)新的記錄b 輸入輸出編輯符一般形式:read (,)read ,write (,)print ,格式說明:*、格式語句標(biāo)號(hào)、整型

15、變量、格式字符表達(dá)式、數(shù)組或數(shù)組元素作用:精確地說明每一個(gè)數(shù)據(jù)應(yīng)該怎樣輸入或輸出,包括類型、小數(shù)點(diǎn)位置、有效位數(shù)、輸出結(jié)果的形式1、format語句標(biāo)號(hào) (為提高程序的可讀性,f90中一般不用) write (*,900)int1,real1(3),char1900format(i5,3f5.4,a16)2、整型變量名(使用assign語句) assign 900 to myfmt900format( i5,3f5.4,a16 ) write(*,myfmt)iolist3、字符表達(dá)式或變量 write(*,( i5,3f5.4,a16 )iolist或:character(80)mylist

16、 mylist=( i5,3f5.4,a16 ) write(*,mylist)iolist4、數(shù)組或數(shù)組元素名character(6) array(3) data array / (i5, ,3f5.2, ,a16) / write (*, array) iolist character(80) array(5) array(2) = (i5, 3f5.2, a16) write (*, array(2) iolist1 整型編輯符 riw.m注意: 1數(shù)字在指定的區(qū)域內(nèi)右端對(duì)齊,不足w則左邊補(bǔ)空格。 2負(fù)數(shù)的符號(hào)也包含在字段寬度內(nèi) 3如果應(yīng)輸出的列數(shù)超過了規(guī)定的字段寬度,則不輸出有效數(shù)據(jù),

17、以w個(gè)*填充。 4、bn, bz :blank interpretation specifies interpretation of blanks in numeric fields (空格是否當(dāng)0處理)僅用于輸入格式語句,如100 format(bn,2i3)2 實(shí)型編輯符 rfw.drew.drgw.d r重復(fù)系數(shù)w字段寬度(總寬度) d小數(shù)部分寬度f編輯符功能:用于實(shí)數(shù)編輯,小數(shù)形式的輸出(定點(diǎn)數(shù):單精度實(shí)數(shù),4個(gè)字節(jié),7個(gè)有效數(shù)字)f8.3,f6.21 不帶小數(shù)點(diǎn) 1234567890123456 12345.678 9012.342 帶小數(shù)點(diǎn) 123.4567345.8910 123

18、.4567 345.89 !d不起作用,取w個(gè)寬度,小數(shù)點(diǎn)計(jì)入w中3 以表控格式 123.12,456.23 123.12 456.23如果:123.4562,23.1436 123.4562 0 !第二個(gè)數(shù)讀入時(shí)碰到逗號(hào),表示該數(shù)輸入結(jié)束指數(shù)形式的輸入 f8.3 1234e3 !1234.000 0.1234e3 !123.400e編輯符功能:格式:數(shù)符+0+小數(shù)點(diǎn)+小數(shù)部分+e+符號(hào)+指數(shù)部分2位 3 d 4指數(shù)部分寬度固定4列,w=d+3+4優(yōu)點(diǎn):不必事先估計(jì)數(shù)的大小,能容納任意大小的數(shù)據(jù)。g編輯符功能:根據(jù)輸出實(shí)數(shù)大小決定用f或e格式輸出。較大或較小,自動(dòng)按e格式條件:abs(a)10

19、*d 使用e格式輸入輸出條件:10*dabs(a)=0.1 使用f格式輸入輸出注意:采用f格式,d為全部數(shù)字的總位數(shù),且優(yōu)先滿足整數(shù)位數(shù)write(*,(g9.4)123.0 !g9.4=f5.1,4xwrite(*,(g9.2)123.0 !g9.2=e9.2 3 邏輯格式編輯符:rlw功能:邏輯值的輸入輸出規(guī)則:輸出一個(gè)字母,在字段最右端,前面補(bǔ)空格輸入時(shí)按寬度讀取,以第一個(gè)字母作為邏輯值,如果第一個(gè)字母非t或f,則出錯(cuò)write(*,(l4).true. !輸出三個(gè)空格和一個(gè)t 4 字符格式編輯符:raw a字符型數(shù)據(jù)的輸入:字符變量的長度l對(duì)格式起一定的作用 若wl,僅保留右邊的l個(gè)字

20、符 若wl,右邊加l-w個(gè)空格 字符變量的輸出:輸出形式要有w個(gè)字符若wl 右對(duì)齊,左邊補(bǔ)w-l個(gè)空格 character(len=5):a a=ab !ab a=abcdefg !abcde read *,a ab !ab abcdefg !abcde read (a3) ab !ab abcde !abc read (a7) abcdefgh !cdefg a=abcde print (a3),a !abc print (a7),a ! abcde 5 x編輯符功能:在輸出時(shí)產(chǎn)生空格;輸入時(shí),表示跳過n個(gè)字符 1不需變量對(duì)應(yīng)2.是不可重復(fù)的編輯符6 撇號(hào)編輯符功能:輸入所需的字符串,描述字

21、符串常量。 print (i=,i3),i !錯(cuò),應(yīng)將其中一對(duì)引號(hào)改為雙引號(hào)7 h編輯符nh注意:1. n 必定等于字符串長度,否則編譯出錯(cuò) print (2hi=,i3),i !正確 print (3hi=,i3),i !出錯(cuò) 2. 字符串中空格有意義 8 斜杠編輯描述符作用:結(jié)束本記錄的輸出并開始下一個(gè)記錄的輸出(換行輸出)9 冒號(hào)編輯符作用:結(jié)束前一個(gè)編輯符的功能。注意:1用空格式語句來輸出一個(gè)空行,如:format() 此時(shí),write,print語句不應(yīng)有變量輸出,否則出現(xiàn)死循環(huán)2遇到右括號(hào)或斜杠/編輯符,表示結(jié)束本記錄的輸出,但不意味著停止全部輸出,只要輸出列表中還有未輸出變量,將

22、重復(fù)使用格式說明或斜杠右邊的格式說明組織輸出。print (2hi=,/i3),iprint (2hi=,i3),i,j i= 1i= 23format語句和write語句的位置可以相鄰,也可在程序的任何一個(gè)地方4用表控格式輸出時(shí),在write語句中的輸出項(xiàng)可以包含字符串但在輸出時(shí)用到format語句,則不能再包含字符串,否則必須加以說明。print (2hi=,i3),iprint (i3),i=,i !出錯(cuò) 應(yīng)改為print (a,i3),i=,i 三、選擇結(jié)構(gòu)程序設(shè)計(jì)1關(guān)系表達(dá)式和邏輯表達(dá)式1 關(guān)系運(yùn)算符:注意:相等 = = 不等 /=l 復(fù)型常量和變量:只能進(jìn)行 .eq.、.ne.l

23、.eq.(= =)或.ne.(/=)要小心使用;實(shí)型量一般要改寫:0.1*10.eq.1為.false. 應(yīng)改為 abs(0.1*10-1)=1e-6l 兩個(gè)整型表達(dá)式進(jìn)行邏輯運(yùn)算結(jié)果為整型,而不是邏輯型l 邏輯運(yùn)算符之間的空格不能省略。特別是.not.與其他邏輯運(yùn)算符相連時(shí)。2 邏輯表達(dá)式和計(jì)算: 邏輯運(yùn)算符:not and or eqv(邏輯等)neqv(邏輯不等) xor(異或) 運(yùn)算優(yōu)先級(jí):從左到右依次降低3 運(yùn)算順序: ( ) 函數(shù) 算術(shù) 關(guān)系 邏輯 高 低4 練習(xí)表達(dá)式的寫法 1、 數(shù)學(xué)式 abcd !不能出現(xiàn)連不等式 2、 1x2+y206、邏輯型變量a值為真(或?yàn)榧伲?!a7、

24、字符變量a為小寫字母 !a=a .and. a=a .and. a=a .and. a=0 .and.x=1 .and.x=0)then if(x=1)then if(x=2)then print *,越界 elseif(x=1)then y=2.0 elseif(x=0)then y=1.0 else print *,越界 endifl 舉例:任意輸入4個(gè)整數(shù),把它們按從小到大輸出。program mainimplicit noneinteger:a,b,c,d,eread *,a,b,c,dif (ab) thene=a;a=b;b=eendifif(ca) thene=a;a=c;c=b

25、;b=eelseif(cb) thene=b;b=c;c=eendifif(da)thenprint *,d,a,b,celseif(db)thenprint *,a,d,b,celseif(d=0)then if(x=15)then if(x=30)then if(x=45)then if(x=75)then if(xe2且e30或e1e2且e30,則執(zhí)行循環(huán)體直到循環(huán)終端語句。(5)執(zhí)行終端語句后,v增加一個(gè)步長e3,循環(huán)次數(shù)減1,(6) 返回(4)重復(fù)執(zhí)行(4)(5)注意事項(xiàng):(1)e2不允許為最大整數(shù)值(2)e3不允許為零,否則循環(huán)不能終止 注意:是判斷一個(gè)do語句是否成立的條件(3)

26、do循環(huán)變量在循環(huán)體內(nèi)不能再次定義 do i=3,6 i=5 !錯(cuò)誤 j=j+i enddo m=1do 10 i=1,3,m m=m+i 10 i=i+m(4)循環(huán)變量的初值e1、終值e2和步長e3只是在循環(huán)入口有效,進(jìn)入循環(huán)后,它的值與循環(huán)次數(shù)無關(guān)。(5)在帶循環(huán)變量do 結(jié)構(gòu)中仍可使用exit和cycle語句。(6)循環(huán)正常退出時(shí),v的值超過循環(huán)變量的終值。循環(huán)非正常退出時(shí),v保持當(dāng)前值。例5-4 判斷一個(gè)整數(shù)n是否為素?cái)?shù)。(教材85頁)(7)循環(huán)變量在循環(huán)體內(nèi)不能被重新賦值,但是在循環(huán)體外則可被重新賦值。(8)在do結(jié)構(gòu)中包含的if結(jié)構(gòu)和case結(jié)構(gòu)等必須時(shí)完整的結(jié)構(gòu),不允許出現(xiàn)結(jié)構(gòu)的

27、交叉。(9)循環(huán)可以不經(jīng)enddo,但是不能從循環(huán)體外轉(zhuǎn)入循環(huán)體內(nèi)。6do while結(jié)構(gòu) do while結(jié)構(gòu)的一般形式:結(jié)構(gòu)名: do while(邏輯表達(dá)式) 循環(huán)體 end do 結(jié)構(gòu)名 相當(dāng)于 do if(.not.邏輯表達(dá)式)exit 循環(huán)體 end do7do 結(jié)構(gòu)的嵌套一個(gè)do結(jié)構(gòu)循環(huán)體內(nèi)可以包含另一個(gè)do循環(huán)結(jié)構(gòu),這就是do結(jié)構(gòu)循環(huán)嵌套注意:1 內(nèi)循環(huán)必須完全嵌套在外循環(huán)體內(nèi),不能相互交叉2 循環(huán)嵌套中各層的循環(huán)控制變量不能同名8隱含do循環(huán)隱含do循環(huán)實(shí)際上是帶控制變量的do結(jié)構(gòu)。但簡化成只有do結(jié)構(gòu)的第一句,且把do關(guān)鍵字隱去。 隱含do循環(huán)的形式為: (list,v=u

28、1,u2,u3)幾種常見的隱含do循環(huán)的形式:1.按指定步長讀寫。例如 print *,(x(j),j=1,19,2)2.隱含do循環(huán)與普通變量混合使用。例如 print *,a,b,(x(i),i=1,3),c3.用于輸出一些特殊符號(hào)。例如 print *,(-,i=1,80)4.隱含do循環(huán)可以并列出現(xiàn)。例如 read *,(a(i),i=1,4),(b(i),i=1,4)5.隱含do循環(huán)可以嵌套使用。例如 print *,(a(i,j),j=1,5),i=1,3) read *,n,(a(i),i=1,n)注意:隱含do循環(huán)只能出現(xiàn)在輸入和輸出語句中9循環(huán)程序設(shè)計(jì)方法: 補(bǔ)充:循環(huán)控制的

29、設(shè)計(jì)方法:1 關(guān)鍵:找出循環(huán)體a) 求累加和s=s+tb) 求連乘積t=t*nc) 求x nt=t*xd) 求連加的循環(huán)次數(shù)s=s+1e) 其他s=s+a a=2 確定循環(huán)的初值a) 求累加和初值為0或所給數(shù)據(jù)的第一項(xiàng)b) 求連乘積初值為1或所給數(shù)據(jù)的第一項(xiàng)c) 求最大值初值為所給數(shù)據(jù)的第一項(xiàng)或足夠小的量d) 求最小值初值為所給數(shù)據(jù)的第一項(xiàng)或足夠大的量 注意:賦值語句的位置3 循環(huán)次數(shù)的選定a) 已知累加計(jì)算的項(xiàng)數(shù)nb) 未知計(jì)算項(xiàng)數(shù)n,當(dāng)通項(xiàng)值小于一個(gè)值時(shí)停止,可取n為一個(gè)夠大的值。例:歌德巴赫猜想(將一個(gè)100200的偶數(shù)分解成兩個(gè)素?cái)?shù)之和)program mainlogical:prim

30、e do n=100,200,2 n1=1 do if(n13)then n1=n1+1 else n1=n1+2 endif prime=.true.kend=sqrt(real(n1) do k=2,kend if(mod(n1,k)= =0)prime=.false. enddo if(.not.prime) cycle n2=n-n1;prime=.true. kend=sqrt(real(n2) do k=2,kend if(mod(n2,k)=0) prime=.false. enddo if(.not.prime) cycle write (*,100) n,n1,n2 exit

31、 enddo enddo100 format(1x,i3,=,i3,+,i3) end10加密解密程序:program ex0612implicit none integer i integer strlen integer, parameter : key = 2 character(len=20) : string write(*,*) string: read(*,*) string strlen = len_trim(string) do i = 1, strlen string(i:i) = char( ichar(string(i:i) + key ) end do write(*

32、,(encoded:,a20) string stopendprogram ex0613implicit none integer i integer strlen integer, parameter : key = 2 character(len=20) : string write(*,*) encoded string: read(*,*) string strlen = len_trim(string) do i = 1, strlen string(i:i) = char( ichar(string(i:i) - key ) end do write(*,(string:,a20)

33、 string stopend五、程序過程1函數(shù)子程序編寫規(guī)則:1 函數(shù)開始語句的一般形式recursive function 函數(shù)名(虛元表)result(結(jié)果名)如果函數(shù)是遞歸的,則應(yīng)以recursive開頭。2 函數(shù)結(jié)束語句是函數(shù)的結(jié)束標(biāo)志,將控制返回到主調(diào)程序。 end function 函數(shù)名 內(nèi)部子程序必須加上關(guān)鍵字function或subroutine3 函數(shù)過程體是函數(shù)語句和函數(shù)結(jié)束語句之間的程序段,分為說明部分和執(zhí)行部分。說明部分應(yīng)對(duì)程序體內(nèi)一切變量、數(shù)組等實(shí)體(包括變?cè)┳鞒稣f明,同時(shí)還要說明函數(shù)結(jié)果變量名,但不可說明函數(shù)名。4 執(zhí)行部分中必須對(duì)函數(shù)結(jié)果名至少賦值一次。5

34、虛元只能是變量名、數(shù)組名、過程名、指針等。虛元還有可選屬性 optional 相關(guān)函數(shù)present()2接口塊功能:用于通知編譯程序主調(diào)程序調(diào)用過程時(shí)所需要的接口信息,記錄外部子程序的信息,如名字、數(shù)字、參數(shù)類型等,寫在主調(diào)程序的說明部分,寫在類型說明語句之前,內(nèi)容是被調(diào)用過程的有關(guān)說明部分。結(jié)構(gòu)形式:interface ;接口入口 interface body;說明內(nèi)容end interface ;接口出口說明:接口塊是外部子程序頭的精確拷貝,定義了它的參數(shù)和結(jié)果,以及它的end語句。功能簡單的程序,不必寫接口塊。但下列情形必須使用接口塊:1、調(diào)用的外部過程是一個(gè)函數(shù),且函數(shù)結(jié)果是一個(gè)數(shù)組

35、;或函數(shù)結(jié)果值是一個(gè)字符型,且長度不是常數(shù),也不是假定長度(*);或被調(diào)用過程中的啞元是一個(gè)數(shù)組片段。2、實(shí)際參數(shù)是關(guān)鍵字變?cè)?,或?qū)嶋H參數(shù)是缺省的可選變?cè)?、一個(gè)外部函數(shù)使系統(tǒng)中的內(nèi)在操作符擴(kuò)展了原有的功能。 interface operator (+) interface operator (.concat.)4、外部過程擴(kuò)展了賦值號(hào)的使用范圍。5、用一個(gè)類屬名調(diào)用過程。 interface name3子例子程序結(jié)構(gòu)的一般形式:recusivesubroutine 子程序名(虛元表)declaration statements !說明部分executable statements !執(zhí)行部

36、分containsinternal subprograms !內(nèi)部過程end subroutine 子程序名 !過程結(jié)束語句過程的另一種形式是子例子程序,它和函數(shù)子程序的區(qū)別:1. 函數(shù)子程序必須有返回值,有result關(guān)鍵字。而子例子程序本身并不返回值,它的計(jì)算結(jié)果全部都通過虛實(shí)結(jié)合傳遞給主調(diào)程序。一般用來完成某一個(gè)操作,如矩陣的轉(zhuǎn)置、排序等。函數(shù)子程序和子例行子程序都不一定只返回一個(gè)結(jié)果,其他的結(jié)果可以通過虛元傳遞。2.函數(shù)子程序的調(diào)用就像通常的函數(shù)引用一樣,出現(xiàn)在表達(dá)式中。而子例子程序必須通過call語句來調(diào)用。 call 子程序名(實(shí)元表)3.從形式上看,子例子程序的結(jié)構(gòu)除第一句和最后

37、一句外,其余部分的編寫形式與函數(shù)子程序完全相同。4關(guān)鍵字變?cè)和ǔT谡{(diào)用過程中要記住虛元名及其位置,而使用關(guān)鍵字變?cè)?,就不必記住虛元的次序了,填寫的?shí)元次序可以是任意的。一般形式: 虛元名=實(shí)元表達(dá)式例如:subroutine sum(m,sum1,sum2)注意:不是每一個(gè)實(shí)元都必須有確定的值。使用關(guān)鍵字變?cè){(diào)用可寫成: call sum(m=n,sum2=sumy,sum1=sumy)注意:關(guān)鍵字變?cè)恍杩紤]虛元的位置和次序,但必須知道虛元的名字。當(dāng)部分變?cè)褂藐P(guān)鍵字變?cè){(diào)用子程序時(shí),第一個(gè)關(guān)鍵字變?cè)懊娴乃凶冊(cè)急仨毰c相應(yīng)的虛元一一對(duì)應(yīng),一旦使用一個(gè)關(guān)鍵字變?cè)?,其后面的變?cè)脖仨毷褂?/p>

38、關(guān)鍵字變?cè)#ɡ纾航滩?10頁)program ex0827 implicit none interface real function func(x,a,b,c) ! 定義子程式func的接口 implicit nonereal x real, optional : a,b,c end function end interface write(*,*) func(2.0, c=1.0) ! f(2)=0*22 + 0*2 + 1 = 1 write(*,*) func(2.0, a=2.0, b=1.0) ! f(2)=2*22 + 1*2 + 0 = 10 stopend! 計(jì)算func

39、(x)=a*x2+b*x+c! a,b,c不傳入的話為0real function func(x,a,b,c) implicit none real x ! x值一定要傳入 real, optional : a,b,c ! a,b,c可以不傳入 real ra, rb, rc ! 實(shí)際計(jì)算的數(shù)字 if ( present(a) ) then ra=a else ra=0.0 ! 默認(rèn)值為0 end if if ( present(b) ) then rb=b else rb=0.0 ! 默認(rèn)值為0 end if if ( present(c) ) then rc=c else rc=0.0 ! 默認(rèn)值為0 end if ! func(x)=a*x2+b*x+c func = ra*x*2 + rb*x + rc returnend6可選變?cè)赫{(diào)用時(shí)可根據(jù)實(shí)際需要,只對(duì)虛元表中部分虛元作虛實(shí)結(jié)合??蛇x擇變?cè)仨氃谶^程中被說明成是可選擇的。即要求它具有optio

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論