




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、輔導資料fortran90 楚紅fortran90學習指導一、fortran90基礎知識1源程序及其構(gòu)成 書寫格式:主程序定義語句、結(jié)束語句注意:在沒有程序名稱的時候,程序開頭的program也不要出現(xiàn)。如果使用了程序名稱且在end語句中出現(xiàn),則end語句中的program不能省略。語句行可以是0132個字符;除賦值語句外,每個語句都要使用關鍵字開頭。如果希望一行中出現(xiàn)多個語句,語句一定要用分號隔開??崭癫荒茈S便使用,關鍵字、變量和常量名以及操作符中的空格會使字符失去其原有的含義。但它們之間一定要加空格。注釋行:以感嘆號為標記,或“c”、“*”(fortran90中不提倡此用法)續(xù)行標記:在句
2、末尾添加續(xù)行符&,如果將關鍵字分成兩行,則下一行開頭也要加續(xù)行標記。如果續(xù)行符出現(xiàn)在注釋語句中,則失去了續(xù)行的功能。2fortran90字符集1 26個英文字母(大小寫字母等價)2 10個阿拉伯數(shù)字3 下劃線4 21個特殊字符:空格 = + - * / ( ) , . : ! “ % & ; ? $5 其他字符(只可以出現(xiàn)在字符常量、字符串編輯描述符、注釋和輸入輸出記錄中)3基本數(shù)據(jù)類型1 整型 kind值可以為1、2、4 類型說明關鍵字:integer kind值決定數(shù)據(jù)的范圍。對于整數(shù)沒有誤差。 i=3/2=1;i=1/2=0 integer(kind=4):a integer*4:a i
3、nteger(4):a2 實型 kind值可以為4(單精度7位有效數(shù)字)、8(雙精度1517位有效數(shù)字) 類型說明關鍵字:real 小數(shù)表示形式、指數(shù)表示形式 (規(guī)格化的指數(shù)形式)錯誤表示形式:e34、.e34、0.14e2.3 8開3次方:8.0*(1.0/3.0)3 復型 kind值為4、8 是實數(shù)的有序?qū)?,將兩個實數(shù)中間用逗號分隔,然后放在一對括號中 類型說明關鍵字:complex 復數(shù)的運算:+、*、/4 字符型 kind值為國家語言種類 由一對單撇號或一對雙撇號之間的字符序列組成。 字符串內(nèi)大小寫字母均可使用,但識別為不同字符。撇號不是字符串的組成部分。 類型說明關鍵字:charac
4、ter character(len=10,kind=):a character(10):a character*10:a character*(*),parameter:a=aasdfasd 運算符:/ 函數(shù):char(num);ichar(char);len(string);len_trim(string) index(string,key);trim(string)5 邏輯型 kind值為2、4 只有真(.true.)和假(.false.)兩個值。4命名規(guī)則1 名字的長度不能超過31個字符。2 名字的組成成分可以是字母、數(shù)字和下劃線。3 名字的第一個字符必須是字母。4 要特別注意,在名字中
5、不能出現(xiàn)空格。5 變量名不能與全局名(程序單位名,數(shù)組名)同名,也不要與關鍵字同名。6 名稱不區(qū)分大小寫。二、基本語句1類型說明語句a 顯式說明:b 隱含說明:implicit integer (a-c) !fortran90不再使用c i-n規(guī)則:d 屏蔽i-n規(guī)則:implicit none2種別說明program ex0435implicit none! 判斷可以記錄9個位數(shù)的整數(shù)kind值integer, parameter : long_int = selected_int_kind( 9 ) ! 判斷可以記錄3個位數(shù)的整數(shù)kind值integer, parameter : shor
6、t_int = selected_int_kind( 3 ) ! 判斷可以有10個有效位數(shù), 指數(shù)可以記錄到50的浮點數(shù)kind值integer, parameter : long_real = selected_real_kind( 10, 50 )! 判斷可以有3個有效位數(shù), 指數(shù)可以記錄到3的浮點數(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這個數(shù)字是使用單精度b=1.0_8
8、 ! 確定1.0這個數(shù)字是使用雙精度write(*,*) a,bstopend3屬性說明: external:當用戶過程作為實元時 intrinsic:當內(nèi)在函數(shù)名作為實元時 save:保存外部過程變量的值 intent:決定虛元值的傳遞方向 parameter:符號常量聲明equivalence:等價聲明 !equivalence(a,b)表示a,b使用同一內(nèi)存空間optional:可選擇屬性的變元allocatable:動態(tài)屬性的變元assign:賦值語句entry:為函數(shù)子程序或子例子程序提供多個入口4算術表達式 a算術運算符:* * 、/ +、 注意:同級運算左結(jié)合,乘方運算右結(jié)合 b
9、內(nèi)在函數(shù): 數(shù)值函數(shù):abs(x):對任何類型的數(shù)值求絕對值。類似的有cabs();iabs();dabs()aimag(z):返回復數(shù)z的虛部。aint(a,kind):返回舍去小數(shù)后的參數(shù)值。int()anint(a,kind):返回最接近參數(shù)a的整數(shù)值。nint()ceiling(a):返回一個等于或大于a的最小整數(shù)。cmplx(x):復數(shù)類型轉(zhuǎn)換;當復數(shù)賦值時實部或虛部為表達式,則要用該函數(shù)floor(a):返回等于或小于a的最大整數(shù)。mod(a,b):計算a/b的余數(shù)。當參數(shù)為浮點數(shù)時,返回(a-int(a/b)*b)sign(a,b):b=0 返回abs(a);b5) 或 all(
10、ab)!a、b是類型相同的數(shù)組,檢查a中是否每一個元素都比數(shù)組b中任何一個元素大,返回一個邏輯值。any():對數(shù)組進行邏輯判斷,只要有一個元素滿足條件就返回真值count():返回數(shù)組中合乎條件的元素數(shù)目。product():返回數(shù)組中所有元素的相乘值。sum():計算數(shù)組元素的總和。 數(shù)組查詢函數(shù):allocated():檢查一個可變大小的數(shù)組是否已經(jīng)聲明大小。lbound():返回數(shù)組聲明時的下限值shape():返回數(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():返回數(shù)組上限unpack(vector,mask,field):根據(jù)邏輯運算的結(jié)果,返回一個變形的多維數(shù)組。結(jié)果會根據(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ù)據(jù)“整形”后,再傳給一個
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/) !編譯出錯,形狀不同,必須用函數(shù)b=reshape(a,(/9/)a=reshape(b,(/3,3/)endtranspose():返回一個轉(zhuǎn)置矩陣 c算術表達式 書寫表達式應注意幾點:(教材41面1、2、3、4) 注意表達式結(jié)果的類型和種別。5賦值語句 賦值語句的功能:計算、類型轉(zhuǎn)換、賦值6輸入輸出語句a 表
13、控格式的輸入輸出:read *,a,bread(*,*)a,b 注意: 各數(shù)據(jù)間有分隔符: 逗號或空格。 類型匹配:整數(shù):不得帶小數(shù)點; 實數(shù):可以為整數(shù);小數(shù)形式;指數(shù)形式 復數(shù):(實部,虛部);實部和虛部可以為整型也可為實型 字符:一串字符,賦值時長度轉(zhuǎn)化;一串字符,即可省略。 邏輯:以t或f作為第一個字母的字符串(點號、空格在前忽略) 如果輸入一個整型數(shù),則偶數(shù)為假,奇數(shù)為真 個數(shù): 1)不得少于變量的個數(shù); 2)可分行輸入; 3)多余的數(shù)據(jù)不起作用 4)每一個read開始一個新的記錄 無效值的輸入 , , 連續(xù)兩個逗號,對變量值不影響。 空格可以多個,/ 表示輸入數(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為重復數(shù) 4*0.5,2*3,2*ab,3*(1.0,-1.0) 多個read語句 每個read必須從一個新的行輸入數(shù)據(jù)print *,a,bwrite(*,*)a,b 固定的輸出寬度 類型:復型: 帶( )輸出 邏輯型:t,f 輸出一個字符 字符型:丟失,采用左對齊輸出3. 一行顯示不下,數(shù)據(jù)自動換行輸出4. 多個print語句:每個開始輸出一個新的記錄b 輸入輸出編輯符一般形式:read (,)read ,write (,)print ,格式說明:*、格式語句標號、整型
15、變量、格式字符表達式、數(shù)組或數(shù)組元素作用:精確地說明每一個數(shù)據(jù)應該怎樣輸入或輸出,包括類型、小數(shù)點位置、有效位數(shù)、輸出結(jié)果的形式1、format語句標號 (為提高程序的可讀性,f90中一般不用) write (*,900)int1,real1(3),char1900format(i5,3f5.4,a16)2、整型變量名(使用assign語句) assign 900 to myfmt900format( i5,3f5.4,a16 ) write(*,myfmt)iolist3、字符表達式或變量 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)右端對齊,不足w則左邊補空格。 2負數(shù)的符號也包含在字段寬度內(nèi) 3如果應輸出的列數(shù)超過了規(guī)定的字段寬度,則不輸出有效數(shù)據(jù),
17、以w個*填充。 4、bn, bz :blank interpretation specifies interpretation of blanks in numeric fields (空格是否當0處理)僅用于輸入格式語句,如100 format(bn,2i3)2 實型編輯符 rfw.drew.drgw.d r重復系數(shù)w字段寬度(總寬度) d小數(shù)部分寬度f編輯符功能:用于實數(shù)編輯,小數(shù)形式的輸出(定點數(shù):單精度實數(shù),4個字節(jié),7個有效數(shù)字)f8.3,f6.21 不帶小數(shù)點 1234567890123456 12345.678 9012.342 帶小數(shù)點 123.4567345.8910 123
18、.4567 345.89 !d不起作用,取w個寬度,小數(shù)點計入w中3 以表控格式 123.12,456.23 123.12 456.23如果:123.4562,23.1436 123.4562 0 !第二個數(shù)讀入時碰到逗號,表示該數(shù)輸入結(jié)束指數(shù)形式的輸入 f8.3 1234e3 !1234.000 0.1234e3 !123.400e編輯符功能:格式:數(shù)符+0+小數(shù)點+小數(shù)部分+e+符號+指數(shù)部分2位 3 d 4指數(shù)部分寬度固定4列,w=d+3+4優(yōu)點:不必事先估計數(shù)的大小,能容納任意大小的數(shù)據(jù)。g編輯符功能:根據(jù)輸出實數(shù)大小決定用f或e格式輸出。較大或較小,自動按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ī)則:輸出一個字母,在字段最右端,前面補空格輸入時按寬度讀取,以第一個字母作為邏輯值,如果第一個字母非t或f,則出錯write(*,(l4).true. !輸出三個空格和一個t 4 字符格式編輯符:raw a字符型數(shù)據(jù)的輸入:字符變量的長度l對格式起一定的作用 若wl,僅保留右邊的l個字
20、符 若wl,右邊加l-w個空格 字符變量的輸出:輸出形式要有w個字符若wl 右對齊,左邊補w-l個空格 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編輯符功能:在輸出時產(chǎn)生空格;輸入時,表示跳過n個字符 1不需變量對應2.是不可重復的編輯符6 撇號編輯符功能:輸入所需的字符串,描述字
21、符串常量。 print (i=,i3),i !錯,應將其中一對引號改為雙引號7 h編輯符nh注意:1. n 必定等于字符串長度,否則編譯出錯 print (2hi=,i3),i !正確 print (3hi=,i3),i !出錯 2. 字符串中空格有意義 8 斜杠編輯描述符作用:結(jié)束本記錄的輸出并開始下一個記錄的輸出(換行輸出)9 冒號編輯符作用:結(jié)束前一個編輯符的功能。注意:1用空格式語句來輸出一個空行,如:format() 此時,write,print語句不應有變量輸出,否則出現(xiàn)死循環(huán)2遇到右括號或斜杠/編輯符,表示結(jié)束本記錄的輸出,但不意味著停止全部輸出,只要輸出列表中還有未輸出變量,將
22、重復使用格式說明或斜杠右邊的格式說明組織輸出。print (2hi=,/i3),iprint (2hi=,i3),i,j i= 1i= 23format語句和write語句的位置可以相鄰,也可在程序的任何一個地方4用表控格式輸出時,在write語句中的輸出項可以包含字符串但在輸出時用到format語句,則不能再包含字符串,否則必須加以說明。print (2hi=,i3),iprint (i3),i=,i !出錯 應改為print (a,i3),i=,i 三、選擇結(jié)構(gòu)程序設計1關系表達式和邏輯表達式1 關系運算符:注意:相等 = = 不等 /=l 復型常量和變量:只能進行 .eq.、.ne.l
23、.eq.(= =)或.ne.(/=)要小心使用;實型量一般要改寫:0.1*10.eq.1為.false. 應改為 abs(0.1*10-1)=1e-6l 兩個整型表達式進行邏輯運算結(jié)果為整型,而不是邏輯型l 邏輯運算符之間的空格不能省略。特別是.not.與其他邏輯運算符相連時。2 邏輯表達式和計算: 邏輯運算符:not and or eqv(邏輯等)neqv(邏輯不等) xor(異或) 運算優(yōu)先級:從左到右依次降低3 運算順序: ( ) 函數(shù) 算術 關系 邏輯 高 低4 練習表達式的寫法 1、 數(shù)學式 abcd !不能出現(xiàn)連不等式 2、 1x2+y206、邏輯型變量a值為真(或為假) !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個整數(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增加一個步長e3,循環(huán)次數(shù)減1,(6) 返回(4)重復執(zhí)行(4)(5)注意事項:(1)e2不允許為最大整數(shù)值(2)e3不允許為零,否則循環(huán)不能終止 注意:是判斷一個do語句是否成立的條件(3)
26、do循環(huán)變量在循環(huán)體內(nèi)不能再次定義 do i=3,6 i=5 !錯誤 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)入口有效,進入循環(huán)后,它的值與循環(huán)次數(shù)無關。(5)在帶循環(huán)變量do 結(jié)構(gòu)中仍可使用exit和cycle語句。(6)循環(huán)正常退出時,v的值超過循環(huán)變量的終值。循環(huán)非正常退出時,v保持當前值。例5-4 判斷一個整數(shù)n是否為素數(shù)。(教材85頁)(7)循環(huán)變量在循環(huán)體內(nèi)不能被重新賦值,但是在循環(huán)體外則可被重新賦值。(8)在do結(jié)構(gòu)中包含的if結(jié)構(gòu)和case結(jié)構(gòu)等必須時完整的結(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(邏輯表達式) 循環(huán)體 end do 結(jié)構(gòu)名 相當于 do if(.not.邏輯表達式)exit 循環(huán)體 end do7do 結(jié)構(gòu)的嵌套一個do結(jié)構(gòu)循環(huán)體內(nèi)可以包含另一個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)實際上是帶控制變量的do結(jié)構(gòu)。但簡化成只有do結(jié)構(gòu)的第一句,且把do關鍵字隱去。 隱含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.用于輸出一些特殊符號。例如 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)程序設計方法: 補充:循環(huán)控制的
29、設計方法:1 關鍵:找出循環(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ù)的第一項b) 求連乘積初值為1或所給數(shù)據(jù)的第一項c) 求最大值初值為所給數(shù)據(jù)的第一項或足夠小的量d) 求最小值初值為所給數(shù)據(jù)的第一項或足夠大的量 注意:賦值語句的位置3 循環(huán)次數(shù)的選定a) 已知累加計算的項數(shù)nb) 未知計算項數(shù)n,當通項值小于一個值時停止,可取n為一個夠大的值。例:歌德巴赫猜想(將一個100200的偶數(shù)分解成兩個素數(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ù)是遞歸的,則應以recursive開頭。2 函數(shù)結(jié)束語句是函數(shù)的結(jié)束標志,將控制返回到主調(diào)程序。 end function 函數(shù)名 內(nèi)部子程序必須加上關鍵字function或subroutine3 函數(shù)過程體是函數(shù)語句和函數(shù)結(jié)束語句之間的程序段,分為說明部分和執(zhí)行部分。說明部分應對程序體內(nèi)一切變量、數(shù)組等實體(包括變元)作出說明,同時還要說明函數(shù)結(jié)果變量名,但不可說明函數(shù)名。4 執(zhí)行部分中必須對函數(shù)結(jié)果名至少賦值一次。5
34、虛元只能是變量名、數(shù)組名、過程名、指針等。虛元還有可選屬性 optional 相關函數(shù)present()2接口塊功能:用于通知編譯程序主調(diào)程序調(diào)用過程時所需要的接口信息,記錄外部子程序的信息,如名字、數(shù)字、參數(shù)類型等,寫在主調(diào)程序的說明部分,寫在類型說明語句之前,內(nèi)容是被調(diào)用過程的有關說明部分。結(jié)構(gòu)形式:interface ;接口入口 interface body;說明內(nèi)容end interface ;接口出口說明:接口塊是外部子程序頭的精確拷貝,定義了它的參數(shù)和結(jié)果,以及它的end語句。功能簡單的程序,不必寫接口塊。但下列情形必須使用接口塊:1、調(diào)用的外部過程是一個函數(shù),且函數(shù)結(jié)果是一個數(shù)組
35、;或函數(shù)結(jié)果值是一個字符型,且長度不是常數(shù),也不是假定長度(*);或被調(diào)用過程中的啞元是一個數(shù)組片段。2、實際參數(shù)是關鍵字變元,或?qū)嶋H參數(shù)是缺省的可選變元。3、一個外部函數(shù)使系統(tǒng)中的內(nèi)在操作符擴展了原有的功能。 interface operator (+) interface operator (.concat.)4、外部過程擴展了賦值號的使用范圍。5、用一個類屬名調(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關鍵字。而子例子程序本身并不返回值,它的計算結(jié)果全部都通過虛實結(jié)合傳遞給主調(diào)程序。一般用來完成某一個操作,如矩陣的轉(zhuǎn)置、排序等。函數(shù)子程序和子例行子程序都不一定只返回一個結(jié)果,其他的結(jié)果可以通過虛元傳遞。2.函數(shù)子程序的調(diào)用就像通常的函數(shù)引用一樣,出現(xiàn)在表達式中。而子例子程序必須通過call語句來調(diào)用。 call 子程序名(實元表)3.從形式上看,子例子程序的結(jié)構(gòu)除第一句和最后
37、一句外,其余部分的編寫形式與函數(shù)子程序完全相同。4關鍵字變元:通常在調(diào)用過程中要記住虛元名及其位置,而使用關鍵字變元后,就不必記住虛元的次序了,填寫的實元次序可以是任意的。一般形式: 虛元名=實元表達式例如:subroutine sum(m,sum1,sum2)注意:不是每一個實元都必須有確定的值。使用關鍵字變元調(diào)用可寫成: call sum(m=n,sum2=sumy,sum1=sumy)注意:關鍵字變元不需考慮虛元的位置和次序,但必須知道虛元的名字。當部分變元使用關鍵字變元調(diào)用子程序時,第一個關鍵字變元前面的所有變元都必須與相應的虛元一一對應,一旦使用一個關鍵字變元,其后面的變元也必須使用
38、關鍵字變元。(例如:教材110頁)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! 計算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ù)字 if ( present(a) ) then ra=a else ra=0.0 ! 默認值為0 end if if ( present(b) ) then rb=b else rb=0.0 ! 默認值為0 end if if ( present(c) ) then rc=c else rc=0.0 ! 默認值為0 end if ! func(x)=a*x2+b*x+c func = ra*x*2 + rb*x + rc returnend6可選變元:調(diào)用時可根據(jù)實際需要,只對虛元表中部分虛元作虛實結(jié)合。可選擇變元必須在過程中被說明成是可選擇的。即要求它具有optio
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 ISO/IEC 15415:2024 EN Automatic identification and data capture techniques - Bar code symbol print quality test specification - Two-dimensional symbols
- 2025年度化工生產(chǎn)工廠技術許可合同協(xié)議
- 2025年城市管道天然氣項目建議書
- 設備管理科設備維護與更新計劃
- 提升倉庫服務質(zhì)量的個人策略計劃
- 社區(qū)個人工作計劃改善社區(qū)供水設施
- 2025年特種大型鋁合金型材合作協(xié)議書
- 新聞媒體安全管理的必要性計劃
- 社團交流合作的網(wǎng)絡平臺計劃
- 2025年中大型重載軸承項目建議書
- 2023年高考真題-化學(福建卷) 含解析
- 天津市-2024年-社區(qū)工作者-上半年筆試真題卷
- 紅色中國風2025靈蛇賀歲
- 教師校園食品安全培訓
- 烈士褒揚課件教學課件
- 公務用車分時租賃實施方案
- 《論語》原文-翻譯-完整版
- 退休延期留用崗位協(xié)議書
- 3.1 歌曲《音階歌》課件(10張內(nèi)嵌音頻)
- 中醫(yī)適宜技術-中藥熱奄包
- 2024-2025學年小學科學五年級下冊青島版(六三制2024)教學設計合集
評論
0/150
提交評論