




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Sun Studio 12: Fortran 編程指南Previous :第10章并行化第 11 章 C-Fortran接口本章論述Fortran與C的互操作性方面的問題,內容僅適用于 Sun Studio Fortran 95和C編譯器的特定情況11.9 Fortran 2003 與C的互操作性 簡要說明了 Fortran 2003 標準第15部分中提 到的C綁定功能。(此標準可以從國際Fortran標準 Web站點獲得)。Fortran 95編譯器實現了標準中所述的這些功能。如不特別注明,32位x86處理器視為與 32位SPARC處理器等同。對于 64位 x86處理器和64位SPARC 處
2、理器也是如此,只是 x86系統未定義 REAL*16和 COMPLEX*32 數據類型,這些數據類型只能用于 SPARC。11.1兼容性問題大多數C-Fortran接口必須在以下這些方面全部保持一致:? 函數和子例程的定義及調用? 數據類型的兼容性? 參數傳遞(按引用或按值)? 參數的順序? 過程名(大寫、小寫或帶有結尾下劃線(_)? 向鏈接程序傳遞正確的庫引用某些C-Fortran接口還必須符合:? 數組索引及順序? 文件描述符和stdio? 文件權限11.1.1函數還是子例程?函數一詞在C和Fortran中有不同的含義。根據具體情況做出選擇很重要:在C中,所有的子程序都是函數;但 void
3、函數不會返回值。 在Fortran中,函數會傳遞一個返回值,但子例程一般不傳遞返回值。當Fortran例程調用C函數時:?如果被調用的C函數返回一個值,則將其作為函數從Fortran中調用?如果被調用的 C函數不返回值,則將其作為子例程調用。當C函數調用Fortran子程序時:如果被調用的Fortran子程序是一個函數,則將其作為一個返回兼容數據類型 的函數從C中調用。如果被調用的Fortran子程序是一個子例程,則將其作為一個返回int (與 Fortran INTEGER*4兼容)或void 值的函數從 C中調用。如果 Fortran子 例程使用交替返回,則會返回一個值,這種情況下它是RE
4、TURN語句中的表達式的值。如果 RETURN語句中沒有出現表達式,但在SUBROUTINE語句中聲明了交替返回,則會返回零。11.1.2數據類型的兼容性表11 總結了 Fortran 95 (與C比較)數據類型的數據大小和缺省對齊。該表假設 未應用影響對齊或提升缺省數據大小的編譯選項。請注意以下事項:? C數據類型int 、long int 和long 在32位環境下是等同的(4字節)。 但是,在64位環境下long和指針為8字節。這稱為LP64數據模型。? 在64位SPARC 環境下,當用任意-m64選項進行編譯時,REAL*16和COMPLEX*32與16字節邊界對齊。? 標有4/8的對
5、齊表示缺省情況下與 8字節邊界對齊,但在COMMON 塊中與 4字節邊界對齊。COMMON 中的最大缺省對齊為 4字節。當用-m64選項進 行編譯時,4/8/16表示與16字節邊界對齊。? REAL(KIND=16)、REAL*16、COMPLEX(KIND=16)、COMPLEX*32 只 能用于SPARC平臺。? 數組和結構的元素及字段必須兼容。? 不能按值傳遞數組、字符串或結構。? 可以在調用點使用 %VAL(arg),按值將參數從 Fortran 95例程傳遞到 C例 程。假如Fortran例程具有一個顯式接口塊, 該接口塊用VALUE屬性聲明了偽 參數,則可以按值將參數從 C傳遞到F
6、ortran 95。? 數值序列類型的組件的對齊方式與通用塊的對齊方式相同,也會受到-aligncommon選項的影響。數值序列類型是這樣一種序列類型:其中所有組件的類型為缺省整數、缺省實數、雙精度實數、缺省復數或缺省邏輯,而不 是指針。? 在大多數情況下,非數值序列類型的數據類型組件以自然對齊的方式對齊,但QUAD 變量除外。對于四精度變量,32位SPARC 平臺和 64位SPARC 平 臺之間的對齊方式不同。? 在所有平臺上,用 BIND(C)屬性定義的VAX結構和數據類型的組件始終與C結構具有相同的對齊方式。表11 數據大小與對齊一(以字節表示)按引用傳遞(f95和cc )Fortran
7、 95數據類型C數據類型大 小對齊BYTE xchar x11rCHARACTERxun sig ned char x ;11CHARACTER (LEN= n)xunsigned char x n;n11COMPLEX xstruct float r,i;84x;COMPLEX(KIND=4) xstruct float r,i;84x;COMPLEX(KIND=8) xstruct double164/8COMPLEX (KIND=16)dr,di; x;324/8/16x (SPARC)struct long double, dr,di; x;DOUBLE COMPLEX xstruct
8、 double dr,164/8di; x;DOUBLE PRECISION xdouble x ;84REAL xfloat x ;44REAL (KIND=4) xfloat x ;44REAL (KIND=8) xdouble x ;84/8REAL (KIND=16)long double x ;164/8/16x (SPARC)1INTEGER xint x ;44INTEGER (KIND=1) xsig ned char x ;14Fortran 95數據類型C數據類型大 小對齊INTEGER (KIND=2) xshort x ;24INTEGER (KIND=4) xint
9、x ;44INTEGER (KIND=8) xlong long int x;841LOGICAL xint x ;44LOGICAL (KIND=1) xsig ned char x ;14LOGICAL (KIND=2) xshort x ;24LOGICAL (KIND=4) xint x ;44LOGICAL (KIND=8) xlong long int x;8411.1.3大小寫敏感性C和Fortran在區分大小寫方面采取截然相反的處理方法:? C區分大小寫一大小寫很重要。?Fortran在缺省情況下忽略大小寫。f95缺省通過將子程序名轉換成小寫來忽略大小寫。除了字符串常量以外,它
10、會將所有大寫字母都轉換成小寫字母。對于大/小寫問題,有兩種常用解決方案:? 在C子程序中,使 C函數名全為小寫。? 用-U選項編譯Fortran程序,該選項會通知編譯器保留函數/子程序名稱的現有大/小寫區別。只能米用這兩種解決方案中的一種,不能同時米用。本章大多數示例的 C函數名均采用小寫字母,并且 沒有使用f95-U 編譯器選項。11.1.4例程名中的下劃線Fortran編譯器通常會在入口點定義和調用中都出現的子程序名末尾追加一個下劃線(_)。該慣例不同于具有相同的用戶指定名稱的C過程或外部變量。幾乎所有Fortran庫過程名都有兩個前導下劃線,以減少與用戶指定的子例程名的沖突。對于下劃線問
11、題,有三種常用解決方案:? 在C函數中,通過在函數名末尾追加下劃線來更改該名稱。? 使用BIND(C)屬性聲明來指明外部函數是C語言函數。? 使用f95 -ext_names選項編譯對無下劃線的外部名稱的引用。只能使用上述解決方案中的一種。本章的示例都可以使用 BIND(C)屬性聲明來避免下劃線。BIND(C)聲明可從Fortran調用的C外部函數,以及可從 C中作為參數調用的 Fortran例程。Fortran 編譯器在處理外部名稱時通常不追加下劃線。BIND(C)必須出現在每個包含這樣的引用的子程序中。慣常用法是:FUNCTION ABCEXTERNAL XYZBIND(C) ABC, X
12、YZ在此處,用戶不僅指定 XYZ是外部C函數,而且還指定 Fortran調用程序ABC應該 可以從C函數調用。如果使用 BIND(C) ,C函數不需要在函數名末尾追加下劃線。11.1.5按引用或值傳遞參數通常,Fortran例程按引用傳遞參數。 在調用中,如果非標準函數 VAL()中包含一個 參數,則調用例程會按值傳遞該參數。Fortran 95按值傳遞參數的標準方法是通過VALUE屬性和INTERFACE 塊。請參見11.4按值傳遞數據參數。C通常按值傳遞參數。如果在參數前加上表示和”的符號(&), C會使用指針按引用傳遞參數。C總是按引用傳遞數組和字符串。11.1.6參數順序除字符串參數之
13、外,Fortran和C均以相同的順序傳遞參數。但對于每個字符型參數, Fortran例程都會傳遞一個附加參數,用以指定串長度。這些參數在C中是long int數量,按值進行傳遞。參數順序為:? 與每個參數相應的地址(數據或函數)? 與每個字符參數對應的long int (字符串長度的完整列表位于其他參數的完 整列表之后)示例:Fortra n 代碼片段:等價的C代碼片段:CHARACTER*7 SINTEGER B(3)CALL SAM( S, B(2)char s7;int b3;sam( s, & b1, 7L );11.1.7數組索引和順序Fortran與C的數組索引和順序不同。11.1
14、.7.1數組索引C數組總是從0開始,而Fortran數組在缺省情況下是從1開始。有兩種常用的索引處理方法。? 如上述示例所示,可以使用 Fortran缺省設置。此時,Fortran元素B(2)等 同于C元素b1。? 可以指定Fortran數組B以B(0)開始,如下所示:INTEGER B(0:2)這樣,Fortran元素B(1)就等同于C元素b111.1.7.2數組順序Fortran數組按列主順序存儲:A(3,2)A(1,1) A(2,1) A(3,1) A(1,2) A(2,2) A(3,2)C數組按行主順序存儲:A32A00 A01 A10 A11 A20 A21 這對于一維數組不存在任何
15、問題。但對于多維數組,應注意下標在所有引用和聲明中是 如何出現和使用的一可能需要做些調整。例如,在C中進行部分矩陣操作,而后在 Fortran中完成余下部分,這樣做可能會產 生混淆。最好是將整個數組傳遞給另一語言中的例程,然后在該例程中執行 所有矩陣操作,以避免在 C和Fortran中各執行部分操作的情況。11.1.8文件描述符和stdioFortran I/O 通道采用的是單元號。底層SunOS操作系統不處理單元號,而是處理文件描述符。Fortran運行時系統會不斷變換,所以大多數Fortran程序沒必要識別文件描述符。許多C程序都使用一組稱為 標準I/O (即stdio )的子例程。有許多
16、 Fortran I/O 函 數也使用標準I/O,而后者又使用操作系統 I/O調用。下表列出了這些 I/O系統的某 些特性。表11 Fortran 與 C 之間的I/O 比較Fortra n單元標準I/O文件指針文件描述符文件打開為讀寫打開為讀打開、為寫打開、為 讀與打開,或者為追加打開;請參見 open (2)為讀打開、為寫打開 或同時為讀寫打 開屬性已格式化或未格式化始終未格式化,但可用格 式解釋例程進行讀或寫始終未格式化I訪問直接或順序直接訪問(如果物理文件 的表示是直接訪問),但 總是可以按順序讀取直接訪問(如果物理 文件的表示是直接 訪問),但總是可以 按順序讀取1結構記錄字節流字節
17、流I形式0-2147483647 間的任意非負整數指向用戶地址空間中結構 的指針0-1023間的整數11.1.9庫與使用f95 命令鏈接要鏈接正確的Fortran和C庫,請使用f95命令調用鏈接程序示例1:用編譯器進行鏈接:demo% cc -c someCrouti ne.cdemo% f95 theF95routi ne.f someCrout in e.o r = 32.;double complex zw - i = .007;w = (32., .007)z - r = 66.67;z = (66.67, 94.1)z - i = 94.1;returnend在64位 環境下,在寄存
18、器中返回 COMPLEX值11.3.3字符串由于沒有標準接口,因此不推薦在C與Fortran例程間傳遞字符串。不過,請注意以下方面:? 所有C字符串均按引用傳遞。? Fortran調用會為參數列表中具有字符類型的每個參數傳遞一個附加參數。此額外參數給出串長度,它等同于按值傳遞的 C長整數。(這要依具體實現而定。) 額外的串長度參數出現在調用中的顯式參數之后。下例展示了具有字符串參數的Fortra n調用及其等同的 C調用:表 11 -5 傳遞 CHARACTER 串rFortra n 調用:等價的C調用:廠CHARACTER*7 Schar s7;rFortra n 調用:等價的C調用:INT
19、EGER B(3)int b3;CALL CSTRNG( S, B(2)cstrng_( s, & b1, 7L );如果在被調用例程中不需要串長度,則可以忽略額外的參數。但要注意,Fortran不會自動以C期望的顯式空字符來終結字符串。該終結符必須由調用程序添加。字符數組調用與單個字符變量調用看起來一樣。會傳遞數組的起始地址,所使用的長度 是數組中單個元素的長度。11.3.4 一維數組在C中數組下標以0開始表11 -6傳遞一維數組Fortra n調用 CC 調用 Fortra nin teger i, Sumexter n void vecref_in teger a(9)(int, int
20、 * );exter nal FixVecint i, sum;call FixVec ( a, Sum )in t v9=.void fixvec_ (vecref_( v, &sum );in t v9, i nt *sum )subrouti ne VecRef( v,total)int i;in teger i, total, v(9)total = 0*sum 一 0;rFortra n調用 CC 調用 Fortra nfor ( i = 0;i x;v - x = v - y;SUBROUTINE FFLIP(P)STRUCTURE /POINT/REAL X,Y,ZEND STR
21、UCTURERECORD /POINT/ PREAL TrFortra n調用 CC 調用 Fortra n!v - y = t;T = P.Xv - z = -2.*(v- z);P.X = P.YP.Y = TP.Z = -2.*P.Z請注意,在所有平臺上Fortran 77 (VAX)結構與C結構的對齊方式始終相同。但是,平臺之間對齊方式會有所變化。表11 -9傳遞Fortran 95 派生類型rFortran 95 調用 CC 調用 Fortran 95TYPE poi ntstruct point SEQUENCEfloat x,y,z;REAL : x, y, z;END TYPE
22、 poi ntexter n void fflip_ (TYPE (poi nt) basestruct point *);EXTERNAL flipstruct point d;CALL flip( base)struct point *ptx = &d;struct point fflip_ (ptx);float x,y,z;;SUBROUTINE FFLIP( P )void flip_( struct pointTYPE POINT*v )SEQUENCE x;TYPE (POINT) Pv - x = v - y;REAL : Tv - y = t;T = P%Xv- z = -2
23、.*(v- z);P%X = P%YP%Y = TP%Z = -2.*P%Z請注意,Fortran 95標準要求派生類型定義中有 SEQUENCE語句,以確保編譯器保持 存儲序列的順序。在所有平臺上,數值序列類型的組件缺省情況下與字(4字節)邊界對齊。這與x86平臺上C結構的對齊方式相匹配,但是不同于SPARC平臺上C結構的對齊方式。使用-aligncommon選項可更改數值序列類型的對齊方式,以便與C結構相匹配。使用-aligncommon=8匹配 32 位 SPARC C 結構,使用-aligncommon=16匹配 64 位 SPARC。未使用SEQUENCE顯式聲明的派生類型與 SPA
24、RC平臺上的C結構對齊方式相同, 但與x86平臺上的對齊方式不同。這種對齊方式不隨編譯器選項而改變。11.3.7指針由于Fortran例程按引用傳遞參數,因此可將FORTRAN 77 (Cray)指針作為指針的指針傳遞給C例程。表 11 -10 傳遞 FORTRAN 77 (Cray) 指針1Fortra n調用 CC 調用 Fortra nREAL XPOINTER (P2X, X) EXTERNAL PASSP2X = MALLOC(4)X = 0.exter n void fpass_( float* );float *p2x;rFortra n調用 CC 調用 Fortra nCALL
25、 PASS(P2X)fpass_(&p2x);void pass_(p)SUBROUTINE FPASS (P2X) float *p;REAL XPOINTER (P2X, X)*p = 100.1;X = 0.C指針與Fortran 95標量指針兼容,但與 數組指針不兼容。Fortran 95 用標量指針調用CFortran 95 例程:INTERFACESUBROUTINE PASS(P) REAL, POINTER : PEND SUBROUTINEEND INTERFACEREAL, POINTER : P2XALLOCATE (P2X)P2X = 0CALL PASS(P2X)PR
26、INT*, P2XENDFortran 95用標量指針調用CC例程:void pass_(p); float *p;*p = 100.1;Cray與Fortran 95指針間的主要區別是 Cray指針的目標始終是已命名的。在許多 上下文中,聲明 Fortran 95指針會自動標識其目標。另外,被調用C例程還需要顯式 INTERFACE 塊。要將Fortran 95指針傳遞給數組或數組段,需要特定的INTERFACE塊,如下例所示:Fortran 95 例程:INTERFACESUBROUTINE S(P)in teger P(*)END SUBROUTINE SEND INTERFACEin
27、teger, target: A(0:9)in teger, poin ter : P(:)P = A(0:9:2) ! poin ter selects every other eleme nt of A call S(P)C例程:void s_(i nt p)/#i nclude int main (i nt ac, char 請注意,如果要以不同的數據類型作為實際參數來調用C例程,應該在接口塊中包含!$PRAGMA IGNORE_TKR I,以防止編譯器在實際參數和偽參數之間要求類型、 類別和等級匹配。對于傳統Fortran 77,按值調用僅對簡單數據可用,并且只能為調用C例程的Fort
28、ran77例程所用。無法做到讓C例程調用Fortran 77例程并按值傳遞參數。數組、字符串或結構最好是按引用傳遞。要將值從Fortran 77例程傳遞到C例程,請使用非標準Fortran函數%VAL(arg)作為調用中的一個參數。在以下示例中,Fortran 77例程按值傳遞x,按引用傳遞y。C例程同時增加了 x和 y,但只有y發生了改變。Fortra n調用 CFortra n 例程: change middle element */ p2 = 444;請注意,由于C例程S不是Fortran 95例程,因此不能在接口塊中將其定義成假定 的形狀(integerP(:)。如果C例程需要知道數組
29、的實際大小,必須將其作為參數傳遞給C例程。另請注意,C與Fortran間的下標編排不同,C數組以下標0開始。11.4按值傳遞數據參數從C中調用時,Fortran 95程序應在偽參數中使用 VALUE屬性,并且應為從 Fortran 95中調用的C例程提供一個INTERFACE塊。表11 -11在C與Fortran 95之間傳遞簡單數據元素Fortran 95 調用 CC 調用 Fortran 95PROGRAM callcINTERFACEINTEGER FUNCTION crtn (I)BIND(C) crtnINTEGER, VALUE,INTENT(IN) : IEND FUNCTION
30、 crtnEND INTERFACEM = 20MM = crtn (M)WRITE (*,*) M, MMEND PROGRAMFortran 95 調用 CC 調用 Fortran 95int crtn (i nt x)int y;prin tf(%d input n, x);y = x + 1;prin tf(%d returni ngn,y);return(y);Results:20 in put21 retur ning20 21Fortra n調用 CREAL x, yx = 1.y = 0.PRINT *, x,yCALL value( %VAL(x), y)PRINT *, x
31、,yENDC例程:void value_( float x, float *y) printf(%f, %fn,x,*y);x = x + 1.;*y = *y + 1.;prin tf(%f, %fn,x,*y);編譯并運行會產生以下輸出結果:1.00000 0.x and y from Fortra n1.000000, 0.000000x and y from C2.000000, 1.000000new x and y from C1.00000 1.00000new x and y from Fortra n11.5返回值的函數返回 BYTE、INTEGER、REAL、LOGICAL
32、、DOUBLE PRECISION 或 REAL*16 類 型值的Fortran函數與返回兼容類型的 C函數是等同的(請參見 表11 -1 )。字符型函數的返回值存在兩個額外參數,復數型函數的返回值存在一個額外參數11.5.1返回簡單數據類型下例返回一個 REAL 或 float 值。BYTE、INTEGER、LOGICAL、DOUBLEPRECISION 和 REAL*16 的處理方式類似:表11 -2返回 REAL 或Float值的函數Fortra n調用 CC 調用 Fortra n1real ADD1, R, Sfloat r, s;external ADD1exter n float
33、 fadd1_();R = 8.0r = 8.0;S = ADD1( R )s = fadd1_( &r );float add1_( pf )real fun cti on fadd1 (p)float *pf;real pfadd1 = p + 1.0float f ;returnf = *pf;endf+;return ( f );11.5.2 返回 COMPLEX 數據COMPLEX數據的互操作性情況在 SPARC 32位和64位實現之間有所不同11.5.2.1 32 位平臺在32位平臺上,返回 COMPLEX 或DOUBLE COMPLEX 的Fortran函數等同于 具有一個指向內
34、存中返回值的附加第一參數的C函數。Fortran函數及其相應的 C函數的一般樣式如下:Fortra n函數C函數COMPLEX FUNCTIONCF( a1,a2,.,an)cf_ ( retur n, a1, a2,., an)struct float r, i; * return表11 -13返回COMPLEX 數據的函數(32位SPARC )Fortra n 調用 CC 調用 Fortra nCOMPLEX U, V, RETCPX EXTERNAL RETCPXU = ( 7.0, -8.0)V = RETCPX(U)struct complex float r, i; ;struct
35、 complex c1, c2; r = 7.0;u - i = -8.0;retfpx_( v, u );struct complex float r, i; ;void retcpx_( temp, w )struct complex *temp, *w;temp-r = w-r + 1.0;temp-i = w-i + 1.0;return;COMPLEX FUNCTIONRETFPX(Z)COMPLEX ZRETFPX = Z + (1.0, 1.0)RETURNEND11.5.2.2 64 位 SPARC 平臺在64位SPARC環境下,在浮點寄存器中返回 COMPLEX值:在%f0和
36、%f1中返回 COMPLEX和 DOUBLECOMPLEX 在%f0、f1、%f2 和 %f3 中返回COMPLEX*32。對于64位SPARC,返回結構(其字段均為浮點型)的 C函數將在浮點寄存器中返回該結構,但條件是最多需要4個這樣的寄存器進行此操作。在64位SPARC 平臺上,Fortran函數及其相應的 C函數的一般樣式如下:Fortra n函數C函數COMPLEX FUNCTION CF( a1,a2, ., an)struct float r,i; cf_ (a1,a2, ., an)表11 -14返回 COMPLEX 數據的函數(64位SPARC )Fortra n調用 C1CO
37、MPLEX U, V, RETCPXEXTERNAL RETCPXU = ( 7.0, -8.0)V = RETCPX(U)struct complex float r, i; ;struct complex retcpx_(struct complex *w ) struct complex temp;temp.r = w-r + 1.0;temp.ii = w-i + 1.0;return (temp);1C 調用 Fortra n1struct complex float r, i; ; struct complex c1, c2;Fortra n調用 CC 調用 Fortra nstr
38、uct complex *u=&c1;extern struct complex retfpx_(struct complex *); u - r = 7.0;u - i = -8.0;retfpx_( u );COMPLEX FUNCTION RETFPX(Z)COMPLEX ZRETFPX = Z + (1.0, 1.0)RETURNEND11.5.3 返回 CHARACTER 串不鼓勵在C與Fortran例程之間傳遞字符串。但是,具有字符串值的 Fortran函數等 同于具有兩個附加第一參數(數據地址和串長度)的C函數。Fortran函數及其相應的C函數的一般樣式如下:Fortra n函
39、數C函數CHARACTER*! FUNCTION C( a1, ., an)void c_ (result, le ngth, a1,.,an)char result ;long len gth;以下是一個示例表11 -15返回 CHARACTER 串的函數CHARACTER STRING*16,CSTR*9STRING =STRING = 123 /CSTR( * ,9)void cstr_( char *p2rslt, longrslt_le n,char *p2arg, int *p2 n,longarg_le n ) /* return n copies of arg*/int cou
40、n t, i;char *cp;count = *p2 n;cp = p2rslt;for (i=0;ico unt;i+)*cp+ = *p2arg ;void fstr_( char *, lo ng,char *, int *,long );char sbf9 = 123456789;char *p2rslt = sbf;int rslt_le n =sizeof(sbf);char ch = *;int n = 4;int chen = sizeof(ch);/* make n copies of ch insbf*/fstr_( p2rslt, rslt_le n,&ch, &n,
41、ch_le n );FUNCTION FSTR( C, N)CHARACTER FSTR*(*), C FSTR =DO I = 1,NFSTR(I:I) = CEND DOFSTR(N+1:N+1) = CHAR(0)END在本例中,C函數和調用C例程必須在列表(字符參數的長度)末尾提供兩個額外的 初始參數(指向結果字符串和串長度的指針)和一個附加參數。請注意,在從C中調用的Fortran例程中,需要顯式添加一個末尾空字符。缺省情況下,Fortran字符串不以空字符終結。11.6帶標號的COMMON可以在 C中使用全局struct 來模擬 Fortran帶標號的 COMMON表11 -16模擬帶標號的 COMMONFortran COM MON 定義C “ COMMO 定義COMMON /BLOCK/ALPHA,NUMextern struct block float alpha;int num;extern struct block block_ ;main ()block_.alpha = 32.;block_. num += 1;請注意,C例程建立的外部名稱必須以下劃線
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畜禽智能飼喂與管理系統考核試卷
- 衛浴零售商風險管理與業務連續性規劃考核試卷
- 管理團隊建設考核試卷
- 化學礦產業與現代農業的協同發展考核試卷
- 筆的故障分析與品質改進考核試卷
- 礦物加工自動化與信息化考核試卷
- 稻谷加工與國際貿易實務考核試卷
- 遼寧省撫順市六校協作體2025屆高三九月份統一聯考英語試題含解析
- 江蘇城鄉建設職業學院《中醫經典導讀》2023-2024學年第一學期期末試卷
- 天津市紅橋區名校2024-2025學年普通高中教育教學質量監測考試(1月)生物試題含解析
- 中國古典文獻學(全套)
- 面試真題華中科技
- 自身免疫性腦炎
- 醫院質控科工作質量考核指標
- CRPS電源設計向導 CRPS Design Guide r-2017
- GB/T 9345.1-2008塑料灰分的測定第1部分:通用方法
- GB/T 4937.22-2018半導體器件機械和氣候試驗方法第22部分:鍵合強度
- GB/T 3452.2-2007液壓氣動用O形橡膠密封圈第2部分:外觀質量檢驗規范
- 煤礦從業人員安全培訓考試題庫(附答案)
- 第十章-國際政治與世界格局-(《政治學概論》課件)
- 2023年法律職業資格考試歷年真題精選合集
評論
0/150
提交評論