Fortran90學習指導_第1頁
Fortran90學習指導_第2頁
Fortran90學習指導_第3頁
Fortran90學習指導_第4頁
Fortran90學習指導_第5頁
已閱讀5頁,還剩51頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

6、t_int = selected_int_kind( 3 ) ! 判斷可以有10個有效位數, 指數可以記錄到50的浮點數kind值integer, parameter : long_real = selected_real_kind( 10, 50 )! 判斷可以有3個有效位數, 指數可以記錄到3的浮點數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這個數字是使用單精度b=1.0_8

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

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

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

11、數組大小ubound():返回數組上限unpack(vector,mask,field):根據邏輯運算的結果,返回一個變形的多維數組。結果會根據在內存中的順序,如果邏輯為真,回填入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)執行后b=(/1,2,0,0/) 數組變形函數:reshape(data,shape):通過shape的設置,把一串數據“整形”后,再傳給一個

12、數組。例如: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/) !編譯出錯,形狀不同,必須用函數b=reshape(a,(/9/)a=reshape(b,(/3,3/)endtranspose():返回一個轉置矩陣 c算術表達式 書寫表達式應注意幾點:(教材41面1、2、3、4) 注意表達式結果的類型和種別。5賦值語句 賦值語句的功能:計算、類型轉換、賦值6輸入輸出語句a 表

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

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

15、變量、格式字符表達式、數組或數組元素作用:精確地說明每一個數據應該怎樣輸入或輸出,包括類型、小數點位置、有效位數、輸出結果的形式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、數組或數組元素名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數字在指定的區域內右端對齊,不足w則左邊補空格。 2負數的符號也包含在字段寬度內 3如果應輸出的列數超過了規定的字段寬度,則不輸出有效數據,

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重復系數w字段寬度(總寬度) d小數部分寬度f編輯符功能:用于實數編輯,小數形式的輸出(定點數:單精度實數,4個字節,7個有效數字)f8.3,f6.21 不帶小數點 1234567890123456 12345.678 9012.342 帶小數點 123.4567345.8910 123

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

19、*d 使用e格式輸入輸出條件:10*dabs(a)=0.1 使用f格式輸入輸出注意:采用f格式,d為全部數字的總位數,且優先滿足整數位數write(*,(g9.4)123.0 !g9.4=f5.1,4xwrite(*,(g9.2)123.0 !g9.2=e9.2 3 邏輯格式編輯符:rlw功能:邏輯值的輸入輸出規則:輸出一個字母,在字段最右端,前面補空格輸入時按寬度讀取,以第一個字母作為邏輯值,如果第一個字母非t或f,則出錯write(*,(l4).true. !輸出三個空格和一個t 4 字符格式編輯符:raw a字符型數據的輸入:字符變量的長度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編輯符功能:在輸出時產生空格;輸入時,表示跳過n個字符 1不需變量對應2.是不可重復的編輯符6 撇號編輯符功能:輸入所需的字符串,描述字

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

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 三、選擇結構程序設計1關系表達式和邏輯表達式1 關系運算符:注意:相等 = = 不等 /=l 復型常量和變量:只能進行 .eq.、.ne.l

23、.eq.(= =)或.ne.(/=)要小心使用;實型量一般要改寫:0.1*10.eq.1為.false. 應改為 abs(0.1*10-1)=1e-6l 兩個整型表達式進行邏輯運算結果為整型,而不是邏輯型l 邏輯運算符之間的空格不能省略。特別是.not.與其他邏輯運算符相連時。2 邏輯表達式和計算: 邏輯運算符:not and or eqv(邏輯等)neqv(邏輯不等) xor(異或) 運算優先級:從左到右依次降低3 運算順序: ( ) 函數 算術 關系 邏輯 高 低4 練習表達式的寫法 1、 數學式 abcd !不能出現連不等式 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個整數,把它們按從小到大輸出。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,則執行循環體直到循環終端語句。(5)執行終端語句后,v增加一個步長e3,循環次數減1,(6) 返回(4)重復執行(4)(5)注意事項:(1)e2不允許為最大整數值(2)e3不允許為零,否則循環不能終止 注意:是判斷一個do語句是否成立的條件(3)

26、do循環變量在循環體內不能再次定義 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)循環變量的初值e1、終值e2和步長e3只是在循環入口有效,進入循環后,它的值與循環次數無關。(5)在帶循環變量do 結構中仍可使用exit和cycle語句。(6)循環正常退出時,v的值超過循環變量的終值。循環非正常退出時,v保持當前值。例5-4 判斷一個整數n是否為素數。(教材85頁)(7)循環變量在循環體內不能被重新賦值,但是在循環體外則可被重新賦值。(8)在do結構中包含的if結構和case結構等必須時完整的結構,不允許出現結構的

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

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

29、設計方法:1 關鍵:找出循環體a) 求累加和s=s+tb) 求連乘積t=t*nc) 求x nt=t*xd) 求連加的循環次數s=s+1e) 其他s=s+a a=2 確定循環的初值a) 求累加和初值為0或所給數據的第一項b) 求連乘積初值為1或所給數據的第一項c) 求最大值初值為所給數據的第一項或足夠小的量d) 求最小值初值為所給數據的第一項或足夠大的量 注意:賦值語句的位置3 循環次數的選定a) 已知累加計算的項數nb) 未知計算項數n,當通項值小于一個值時停止,可取n為一個夠大的值。例:歌德巴赫猜想(將一個100200的偶數分解成兩個素數之和)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函數子程序編寫規則:1 函數開始語句的一般形式recursive function 函數名(虛元表)result(結果名)如果函數是遞歸的,則應以recursive開頭。2 函數結束語句是函數的結束標志,將控制返回到主調程序。 end function 函數名 內部子程序必須加上關鍵字function或subroutine3 函數過程體是函數語句和函數結束語句之間的程序段,分為說明部分和執行部分。說明部分應對程序體內一切變量、數組等實體(包括變元)作出說明,同時還要說明函數結果變量名,但不可說明函數名。4 執行部分中必須對函數結果名至少賦值一次。5

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

35、;或函數結果值是一個字符型,且長度不是常數,也不是假定長度(*);或被調用過程中的啞元是一個數組片段。2、實際參數是關鍵字變元,或實際參數是缺省的可選變元。3、一個外部函數使系統中的內在操作符擴展了原有的功能。 interface operator (+) interface operator (.concat.)4、外部過程擴展了賦值號的使用范圍。5、用一個類屬名調用過程。 interface name3子例子程序結構的一般形式:recusivesubroutine 子程序名(虛元表)declaration statements !說明部分executable statements !執行部

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

37、一句外,其余部分的編寫形式與函數子程序完全相同。4關鍵字變元:通常在調用過程中要記住虛元名及其位置,而使用關鍵字變元后,就不必記住虛元的次序了,填寫的實元次序可以是任意的。一般形式: 虛元名=實元表達式例如:subroutine sum(m,sum1,sum2)注意:不是每一個實元都必須有確定的值。使用關鍵字變元調用可寫成: call sum(m=n,sum2=sumy,sum1=sumy)注意:關鍵字變元不需考慮虛元的位置和次序,但必須知道虛元的名字。當部分變元使用關鍵字變元調用子程序時,第一個關鍵字變元前面的所有變元都必須與相應的虛元一一對應,一旦使用一個關鍵字變元,其后面的變元也必須使用

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 ! 實際計算的數字 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可選變元:調用時可根據實際需要,只對虛元表中部分虛元作虛實結合??蛇x擇變元必須在過程中被說明成是可選擇的。即要求它具有optio

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論