c語(yǔ)言程序單調(diào)fren語(yǔ)言的源程序_第1頁(yè)
c語(yǔ)言程序單調(diào)fren語(yǔ)言的源程序_第2頁(yè)
c語(yǔ)言程序單調(diào)fren語(yǔ)言的源程序_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

c語(yǔ)言程序單調(diào)fren語(yǔ)言的源程序

在windows操作系統(tǒng)中,混合編程的編程數(shù)據(jù)在6.6的幫助文件中有詳細(xì)介紹。對(duì)于初學(xué)者來(lái)說(shuō),僅靠參考該幫助文件而來(lái)很好地實(shí)現(xiàn)Fortran與C或C++的混合編程還是比較困難的。為此,國(guó)內(nèi)有些學(xué)者已經(jīng)發(fā)表了在這方面的研究和體會(huì)。肖曉玲等、周振紅等以及簡(jiǎn)建勇等研究了VC與Fortran的混合語(yǔ)言編程。他們?cè)敿?xì)地描述了VC與Fortran之間的調(diào)用約定,命名約定以及參數(shù)傳遞方式。兩文中均沒(méi)有完整的混合語(yǔ)言編程源程序以供參考。黃芝平等研究了VC++6.0與FortranPowerStation4.0之間的混合語(yǔ)言編程。文中將Fortran語(yǔ)言源程序制作成動(dòng)態(tài)鏈接庫(kù)的例子非常具有參考價(jià)值,初學(xué)者參考后易于實(shí)現(xiàn)。在此期間,張向強(qiáng),陳志英也研究了VC++6.0與FortranPowerStation4.0之間的混合語(yǔ)言編程。2006年,章大勇,鄭海研究了VC++可執(zhí)行程序調(diào)用Fortran語(yǔ)言編寫(xiě)的可執(zhí)行程序的混合語(yǔ)言編程方法。該方法并不涉及這兩種語(yǔ)言之間的混合程序編寫(xiě)問(wèn)題。最近,亓雪冬等研究了Linux操作系統(tǒng)下Fortran與C語(yǔ)言的混合編程方法。文中介紹了若干種Fortran與C混合編程的方法。與前面列舉的大部分參考文獻(xiàn)一樣,文中沒(méi)有給出完整的可直接執(zhí)行的源程序。Fortran與VC++或C語(yǔ)言的混合編程應(yīng)用越來(lái)越廣泛。隨著Linux操作系統(tǒng)被越來(lái)越多的人接受以及大規(guī)模數(shù)值計(jì)算的需求,Fortran與VC++或C語(yǔ)言混合編程在Linux操作系統(tǒng)下的應(yīng)用也越來(lái)越多。因?yàn)镕ortran與VC++和C語(yǔ)言混合編程差別不大,所以這里下面我們僅討論Fortran與C語(yǔ)言的混合編程問(wèn)題且僅限于C語(yǔ)言程序調(diào)用Fortran語(yǔ)言程序。由于目前有關(guān)這類混合語(yǔ)言編程的可以直接運(yùn)行并且能夠清晰地說(shuō)明混合編程的過(guò)程的可參考的源程序比較缺少,因此本文結(jié)合所研究的C語(yǔ)言程序在不同操作系統(tǒng)下調(diào)用Fortran語(yǔ)言程序的方法的基礎(chǔ)上給出了完整的可直接執(zhí)行的混合語(yǔ)言編程源程序。1c和fran的混合編程語(yǔ)法1.1fortan中的個(gè)數(shù)形式本文所用的Windows操作系統(tǒng)下的軟件環(huán)境是在計(jì)算機(jī)上同時(shí)安裝了MicrosoftVisualC++6.0和CompaqVisualFortran6.0(或升級(jí)至6.6)。命名規(guī)則:需要注意的是Fortran語(yǔ)言不區(qū)分字母的大小寫(xiě),而C語(yǔ)言中是嚴(yán)格區(qū)分字母的大小寫(xiě)的。Fortran語(yǔ)言中的subroutine或function的名字在C語(yǔ)言中聲明或調(diào)用時(shí)是以該名稱的全部小寫(xiě)方式實(shí)現(xiàn)的。例如,Fortran編寫(xiě)的subroutineGauss_Integration在C語(yǔ)言中聲明時(shí)應(yīng)為externvoidgauss_integration();。該例子表明Fortran語(yǔ)言中的subroutine對(duì)應(yīng)C語(yǔ)言中的void函數(shù)。Fortran中的函數(shù)對(duì)應(yīng)C語(yǔ)言中同類型的函數(shù)。不同的是C語(yǔ)言中沒(méi)有自帶復(fù)數(shù)類型。因此對(duì)于Fortran中的復(fù)數(shù)類型的函數(shù)或變量,在C語(yǔ)言中必須自己建立復(fù)數(shù)結(jié)構(gòu)如下來(lái)與Fortran語(yǔ)言中的復(fù)數(shù)類型匹配。參數(shù)傳遞:在Fortran語(yǔ)言中所有參數(shù)都是以傳址的方式傳遞的。而C語(yǔ)言中默認(rèn)只有數(shù)組是以傳址的方式傳遞的,其它參數(shù)都以傳值的方式傳遞。因?yàn)镃語(yǔ)言對(duì)指針操作非常方便,所以我們推薦在C語(yǔ)言調(diào)用Fortran語(yǔ)言的subroutine或function時(shí)所有的參數(shù)都采用傳址的方式。這樣做的好處是可以減少傳遞錯(cuò)誤的發(fā)生。參數(shù)傳遞中特別需要注意的是數(shù)組的傳遞。首先是Fortran中的數(shù)組下標(biāo)默認(rèn)是從1開(kāi)始的,而C語(yǔ)言中是從0開(kāi)始的。其次,Fortran與C語(yǔ)言中的數(shù)組在內(nèi)存中的存儲(chǔ)方式是不同的。Fortran中數(shù)組是以列為主排列的,而C語(yǔ)言中的數(shù)組是以行為主排列的。例如一個(gè)二維數(shù)組在Fortran語(yǔ)言中該數(shù)組在內(nèi)存中的存儲(chǔ)方式為,(11,21,12,22),而在C語(yǔ)言中的存儲(chǔ)方式為,(11,21,12,22)。關(guān)于這方面的詳細(xì)描述可以參考文獻(xiàn)。Fortran中的全局變量傳遞到C語(yǔ)言中有兩種方式。一種方法是利用Fortran語(yǔ)言的common語(yǔ)句,它對(duì)應(yīng)C語(yǔ)言中同名的結(jié)構(gòu)。例如common/examp3/number,對(duì)應(yīng)C語(yǔ)言中的結(jié)構(gòu)externstructexamp3;。另一種方式就是用module的方式。例如,moduleexamp/realrnumber1/endmoduleexamp(這里/表示回車換行)對(duì)應(yīng)C語(yǔ)言中的全局變量externfloatEXAMP_mp_NUMBER1;。該例子說(shuō)明兩點(diǎn),一是module方式的全局變量在C語(yǔ)言中除字母mp小寫(xiě)外,其它部分必須大寫(xiě)。二是Fortran中的real類型與C語(yǔ)言中的float相對(duì)等,而real*8(或doubleprecision)與C語(yǔ)言中的double類型相對(duì)應(yīng)。此外,需要補(bǔ)充的是文獻(xiàn)中舉例說(shuō)明Fortran中的type類型與C語(yǔ)言中的結(jié)構(gòu)對(duì)應(yīng)。但是遺憾的是作者多次試驗(yàn)都沒(méi)有成功。至今也沒(méi)有在文獻(xiàn)中或網(wǎng)絡(luò)上發(fā)現(xiàn)有這方面成功的案例。1.2混合語(yǔ)言編程語(yǔ)法在Windows操作系統(tǒng)下的VisualFortran6.0和VC++6.0編譯器中所編寫(xiě)的C語(yǔ)言程序調(diào)用Fortran語(yǔ)言程序的混合語(yǔ)言編程程序不能直接在Linux操作系統(tǒng)下運(yùn)行。針對(duì)不同的Linux操作系統(tǒng)混合編程語(yǔ)法也會(huì)略有不同。這里以O(shè)penuse10.2,Fedorarelease9和Centosrelease4.5為例來(lái)簡(jiǎn)要介紹Linux操作系統(tǒng)下C語(yǔ)言程序調(diào)用Fortran語(yǔ)言程序的混合語(yǔ)言編程語(yǔ)法。重點(diǎn)是實(shí)用性。首先是Windows操作系統(tǒng)下C語(yǔ)言程序中常用的以下頭文件在Linux操作系統(tǒng)下一般是不需要的。而頭文件math.h在兩個(gè)系統(tǒng)中當(dāng)用到特定的數(shù)學(xué)函數(shù)時(shí)都是需要的其次,在采用編譯器默認(rèn)選項(xiàng)的情況下Windows操作系統(tǒng)中C語(yǔ)言程序調(diào)用的Fortran語(yǔ)言所編寫(xiě)的函數(shù)名在Linux操作系統(tǒng)中必須在該函數(shù)名后加一下劃線。例如,Window操作系統(tǒng)中C語(yǔ)言程序調(diào)用的Fortran語(yǔ)言所編寫(xiě)的函數(shù)名為gauss_integration,那么該函數(shù)在Linux操作系統(tǒng)下的函數(shù)名應(yīng)為gauss_integration_。當(dāng)C語(yǔ)言程序調(diào)用Fortran語(yǔ)言程序時(shí)如果所有參數(shù)都采用傳址方式傳遞的話,在Linux操作系統(tǒng)下對(duì)應(yīng)函數(shù)的參數(shù)傳遞部分與在Windows操作系統(tǒng)下的情形完全相同,不需要做任何修改。最后,必須注意的是在Linux操作系統(tǒng)下連接C語(yǔ)言程序的目標(biāo)文件和Fortran語(yǔ)言程序的目標(biāo)文件時(shí)最好使用編譯器gfortran。否則的話,將發(fā)生Fortran程序中write,read等命令無(wú)法識(shí)別的錯(cuò)誤。2c和fran混合語(yǔ)言編程的示例Windows操作系統(tǒng)下的源程序3c/fortorn語(yǔ)言混合語(yǔ)言的應(yīng)當(dāng)實(shí)現(xiàn)的全局變量傳遞C語(yǔ)言程序調(diào)用的Fortran語(yǔ)言程序c_call_for.f90與上面Windows系統(tǒng)下的文件完全相同,不需要做任何變動(dòng)。在Linux操作系統(tǒng)下,作者還沒(méi)有成功地實(shí)現(xiàn)Windows操作系統(tǒng)下已經(jīng)實(shí)現(xiàn)的全局變量傳遞,例如Windows系統(tǒng)下的number和number1。全局變量在C語(yǔ)言程序和Fortran語(yǔ)言程序間的傳遞可以間接地通過(guò)函數(shù)參數(shù)傳遞來(lái)實(shí)現(xiàn)。即全局變量傳遞成功與否對(duì)C和Fortran語(yǔ)言混合語(yǔ)言編程影響不大。上面的程序在Openuse10.2,Fedorarelease9和Centosrelease4.5三個(gè)Linux版本下都成功地運(yùn)行過(guò)。在每個(gè)版本下都必須同時(shí)安裝cc和gfortran編譯器。對(duì)于本例的編譯過(guò)程如下,4混合語(yǔ)言編程實(shí)例通過(guò)多次數(shù)值試驗(yàn)深入探索和研究了Windows操作系統(tǒng)和Linux操作系統(tǒng)下C語(yǔ)言程序調(diào)用Fortran語(yǔ)言程序的混合語(yǔ)言編程過(guò)程和技巧。文中以完整實(shí)例說(shuō)明了在這兩個(gè)不同操作系統(tǒng)下實(shí)現(xiàn)C與Fortran語(yǔ)言混合語(yǔ)言編程的區(qū)別與聯(lián)系。所編寫(xiě)的完整實(shí)例有助于理解和實(shí)現(xiàn)混合語(yǔ)言編程,從而提高學(xué)習(xí)和應(yīng)用C與Fortran語(yǔ)言混合語(yǔ)言編程的工作效率。該實(shí)例具有很好的通用性,只要稍加修改即可被參考者所利用。#include<stdlib.h>

溫馨提示

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