Fortran之COMMON語(yǔ)句(最新整理)_第1頁(yè)
Fortran之COMMON語(yǔ)句(最新整理)_第2頁(yè)
Fortran之COMMON語(yǔ)句(最新整理)_第3頁(yè)
已閱讀5頁(yè),還剩4頁(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 之 common 語(yǔ)句fortran 程序中各程序單位之間的數(shù)據(jù)交換可以通過(guò)虛實(shí)結(jié)合來(lái)實(shí)現(xiàn),還可以通過(guò)建立公用區(qū)的方式來(lái)完成。公用區(qū)有兩種,一種是無(wú)名公用區(qū),任何一個(gè)程序中只可能有一個(gè)無(wú)名公用區(qū);一種是有名公用區(qū),一個(gè)程序中可以根據(jù)需要由程序員開(kāi)辟任意多個(gè)有名公用區(qū)。建立無(wú)名和有名公用區(qū)都通過(guò)common 語(yǔ)句來(lái)進(jìn)行。按照結(jié)構(gòu)化程序設(shè)計(jì)的指導(dǎo)思想,通常主張通過(guò)虛實(shí)結(jié)合的途徑來(lái)傳送數(shù)據(jù)而不主張使用公用區(qū)。因?yàn)榍罢呤钩绦蛴休^好的可讀性,而且容易跟蹤數(shù)據(jù)的流向,便于對(duì)程序進(jìn)行調(diào)試和維護(hù)。但是虛實(shí)結(jié)合的傳送方式速度較慢,特別是在各程序單位之間有大量的數(shù)據(jù)需要傳送時(shí)速度問(wèn)題就更為突出。不

2、同程序單位利用公用區(qū)交換數(shù)據(jù)的速度卻比虛實(shí)結(jié)合的方式傳送速度快得多。所以在很多應(yīng)用程序中如果各程序單位之間有大量數(shù)據(jù)需要傳送時(shí),程序員一般仍然采用開(kāi)辟公用區(qū)的方式。11.2.1 無(wú)名公用區(qū)開(kāi)辟無(wú)名公用區(qū) common 語(yǔ)句的一般形式如下:common a1,a2,其中 a1,a2,允許是普通變量名、數(shù)組名和數(shù)組說(shuō)明符(注意:不是數(shù)組元素),它們之間用逗號(hào)隔開(kāi)。例如:在主程序中寫(xiě):common x,y,i,z(3) 在子程序中寫(xiě):common a,b,j,t(3)于是,在無(wú)名公用區(qū)中變量 x 和 a,y 和 b,i 和 j 分別分配在同一個(gè)存儲(chǔ)單元中,數(shù)組 z 和 t 同占三個(gè)存儲(chǔ)單元。占同一個(gè)

3、存儲(chǔ)單元的那些變量在不同的程序單位中,它們的名字不需要相同。fortran 編譯程序在編譯時(shí)為 common 語(yǔ)句開(kāi)辟一個(gè)無(wú)名公用區(qū),當(dāng)把不同的程序單位連接在一起的時(shí)候,不同程序單位在 common 語(yǔ)句中的變量按其在語(yǔ)句中出現(xiàn)的先后順序占用無(wú)名公用區(qū)連續(xù)的存儲(chǔ)單元,也就是說(shuō)每個(gè)程序單位中的 common 語(yǔ)句總是給出現(xiàn)在語(yǔ)句中的第一個(gè)變量分配在無(wú)名公用區(qū)的第一個(gè)存儲(chǔ)區(qū)單元。common 語(yǔ)句開(kāi)辟公用區(qū)的主要用途就是使不同程序單位的變量之間進(jìn)行數(shù)據(jù)傳送,另一種用途是用來(lái)節(jié)省存儲(chǔ)空間。下面的例子通過(guò)公用區(qū)進(jìn)行交換數(shù)據(jù):program main common z1,z2 read(*,*)a1,a

4、2,a3 call quad(a1,a2,a3) write(*,*)z1,z2endsubroutine quad(a,b,c) common x1,x2.end或者:program main common z1,z2,a1,a2,a3 read(*,*)a1,a2,a3 call quad() write(*,*)z1,z2endsubroutine quad() common x1,x2,a,b,c.end建立無(wú)名公用區(qū)的規(guī)則:(1) common 語(yǔ)句是說(shuō)明語(yǔ)句,必須出現(xiàn)在所有可執(zhí)行語(yǔ)句之前。common 語(yǔ)句中只允許出現(xiàn)變量名、數(shù)組名和數(shù)組說(shuō)明符,后者意味著可用 common 語(yǔ)句說(shuō)

5、明數(shù)組,此數(shù)組必然放在公用區(qū)中。(2) 由于公用語(yǔ)句中的變量在編譯時(shí)已被分配在實(shí)在的存儲(chǔ)單元中,因此在公用語(yǔ)句中不能出現(xiàn)虛擬參數(shù)。同樣,在編譯時(shí),可調(diào)數(shù)組的大小不定, 無(wú)法分配固定的存儲(chǔ)單元,因此可調(diào)數(shù)組名也不能出現(xiàn)在公用語(yǔ)句中。但是可調(diào)數(shù)組的維的上、下界變量可以通過(guò) common 語(yǔ)句傳送,當(dāng)然這些變量就不再允許出現(xiàn)在虛參表中。例如:subroutine sub(a,b) common na,nbdimension a(na),b(nb).但是為了程序清晰起見(jiàn),通常不提倡采用這種方式,而是希望通過(guò)虛實(shí)結(jié)合來(lái)傳送與可調(diào)數(shù)組有關(guān)的全部量。(3) 一個(gè)程序在運(yùn)行過(guò)程中只有一個(gè)無(wú)名公用區(qū)。在同一個(gè)程

6、序單位中可以出現(xiàn)幾個(gè) common 語(yǔ)句,它們的作用相當(dāng)于一個(gè)。fortran 編譯程序按common 語(yǔ)句在同一程序單位中出現(xiàn)的先后次序把語(yǔ)句中變量按順序放在無(wú)名公用區(qū)的存儲(chǔ)單元中。(4) 各程序單位 common 語(yǔ)句中的變量類(lèi)型必須按位置一一對(duì)應(yīng)一致才能正確傳送數(shù)據(jù)。例如:主程序中有:common a(5),i子程序中有:common b(4),i,p主程序中 a 數(shù)組元素是實(shí)型,使數(shù)組元素 a(5)和子程序中的整型變量 i 共用存儲(chǔ)單元,使主程序中的整型變量 i 和子程序中的實(shí)型變量 p 共用存儲(chǔ)單元都是錯(cuò)誤的。(5) 在一個(gè)程序單位中,分配在公用區(qū)中的名字只能在公用語(yǔ)句中出現(xiàn)一次。(

7、6) 各程序單位中,無(wú)名公用區(qū)中的變量個(gè)數(shù)可以不一樣。如:主程序中有:common x(9),a,b,c,d子程序中有:common a(4),x(2)這是允許的。(7) 不要混淆 equivalence 和 common 語(yǔ)句,equivalence 語(yǔ)句是給同一程序單位中的不同變量分配同一個(gè)存儲(chǔ)單元,而 common 語(yǔ)句則用于給不同程序單位的變量分配同一存儲(chǔ)單元。因此不允許在同一程序單位中寫(xiě):common a,b,c equivalence(a,b)因?yàn)?common 語(yǔ)句把變量 a、b、c 分配在公用區(qū)的相鄰的三個(gè)存儲(chǔ)單元中, 而 equivalence 語(yǔ)句卻又把 a、b、c 分配在

8、同一個(gè)存儲(chǔ)單元中,這是矛盾的,因此禁止以上寫(xiě)法。(8) 公用區(qū)可以用 equivalence 語(yǔ)句來(lái)擴(kuò)大加長(zhǎng)。例如:eimension a(4),b(4) common a,c equivalence(a(3),b(1)公用語(yǔ)句在無(wú)名公用區(qū)開(kāi)辟了連續(xù)的五個(gè)存儲(chǔ)單元,等價(jià)語(yǔ)句使 a(3)和b(1)共用存儲(chǔ)單元因而把 b 數(shù)組帶入了無(wú)名公用區(qū),使公用區(qū)向后擴(kuò)大了一個(gè)存儲(chǔ)單元。這種情況下公用區(qū)的存儲(chǔ)分配如下圖:a(1)a(2)a(3)a(4) cb(1)b(2)b(3)b(4)公用區(qū)可以用這種方式加長(zhǎng)。但是通過(guò) common 語(yǔ)句和 equivalence 語(yǔ)句的聯(lián)用,只允許公用區(qū)向后延伸,不允許向

9、前延伸。對(duì)于上例,如果把equivalence 語(yǔ)句改為:equivalence(a(1),b(2)則是非法的,它使得公用區(qū)出現(xiàn)下圖所示的情況:a(1)a(2)a(3)a(4) cb(1)b(2)b(3)b(4)b 并沒(méi)有在 common 語(yǔ)句中說(shuō)明,它是由等價(jià)語(yǔ)句帶進(jìn)來(lái)的,但 b 的元素向前越過(guò)了公用區(qū)的第一個(gè)存儲(chǔ)單元,這是不允許的。11.2.2 有名公用區(qū)common 語(yǔ)句說(shuō)明有名公用區(qū)的形式如下:common/n1/a1,a2,/n2/b1,b2,其中,n1,n2 為公用區(qū)名,它們放在兩個(gè)斜杠之間。公用區(qū)名的取名方法與變量名同。公用區(qū)名可以和本程序單位中的變量同名,但不允許和子程序同 名

10、。a1、a2、,b1、b2、代表各公用區(qū)中的變量名、數(shù)組名或數(shù)組說(shuō)明符。也可以用兩個(gè)連續(xù)的斜杠來(lái)表示無(wú)名公用區(qū),例如:common r,x,y,z /c2/ a,b,c也可以寫(xiě)成:common /r,x,y,z /c2/ a,b,c或者:common /c2/ a,b,c /r,x,y,zcommon 語(yǔ)句中的公用區(qū)的變量可以“化整為零”,只要它們?cè)谟忻脜^(qū)中的順序不變,例如以上語(yǔ)句可寫(xiě)成:common r /c2/ a /x,y,z /c2/ b,c或者寫(xiě)成:common r /c2/ acommon /c2/ b,/x common / y,z,/c2/ c但是這種寫(xiě)法可讀性差,建議把一

11、個(gè)公用區(qū)用一條 common 語(yǔ)句來(lái)完成,例如下面的語(yǔ)句使人一目了然。common r,x,y,z common /c2/ a,b,c用無(wú)名公用區(qū)為各程序單位傳送不同的變量時(shí),必須使各個(gè)程序單位中的公用變量與單一的無(wú)名公用區(qū)中相應(yīng)的變量進(jìn)行對(duì)應(yīng),程序之間的數(shù)據(jù)傳送顯得僵化繁瑣。利用有名公用區(qū)避免了無(wú)名公用區(qū)的敝端,使之做到公用之中有“專(zhuān)用”,只需在各個(gè)程序單位中做到同名公用區(qū)中數(shù)據(jù)順序一一對(duì)應(yīng)就行了。有名公用區(qū)的使用不僅保留了各程序單位之間數(shù)據(jù)的快速傳送,也使程序得到了簡(jiǎn)化。說(shuō)明有名公用區(qū)的規(guī)則與說(shuō)明無(wú)名公用區(qū)的規(guī)則基本相同,不同之處是:(1) 各程序單位的同名公用區(qū)中,變量不僅在類(lèi)型上要一一

12、對(duì)應(yīng)一致,而且個(gè)數(shù)必須相同。(2) 如果有名公用區(qū)中出現(xiàn)字符型變量,則要求整個(gè)公用區(qū)中的變量都具有字符類(lèi)型。也就是不允許字符變量與其它變量放在同一個(gè)有名公用區(qū)中?!啊薄啊盿t the end, xiao bian gives you a passage. minand once said, people who learn to learn are very happy people. in every wonderful life, learning is an eternal theme. as a professional clerical and teaching position, i understand the importance of continuous learning, life is diligent, nothing can be gained, only continuous learning can achieve better self. only by constantly learning and mastering the latest relevant knowledge, can employees from all walks of life keep up with the pace of enterp

溫馨提示

  • 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)論