ncre-c培訓第七部分_第1頁
已閱讀1頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第7章 函 數,C語言是通過函數來實現(xiàn)模塊化程序設計的。所以較大的C語言應用程序,往往是由多個函數組成的,每個函數分別對應各自的功能模塊。7.1 函數的定義與調用7.2 函數的嵌套調用與遞歸調用7.3 數組作為函數參數7.4 內部變量與外部變量7.5 內部函數與外部函數7.6 變量的動態(tài)存儲與靜態(tài)存儲 [Return],7.1 函數的定義與調用,7.1.1 函數的定義7.1.2 函數的返

2、回值與函數類型7.1.3 對被調用函數的說明和函數原型7.1.4 函數的調用7.1.5 函數的形參與實參,[Return],7.1 .1 函數的定義,1.任何函數(包括主函數main())都是由函數說明和函數體兩部分組成。根據函數是否需要參數,可將函數分為無參函數和有參函數兩種。(1)無參函數的一般形式 函數類型 函數名( void ) { 說明語句部分;

3、 可執(zhí)行語句部分; }注意:在舊標準中,函數可以缺省參數表。但在新標準中,函數不可缺省參數表;如果不需要參數,則用“void”表示,主函數main()例外。,(2)有參函數的一般形式函數類型 函數名( 數據類型 參數[,數據類型 參數2……] ) { 說明語句部分; 可執(zhí)行語句部分; }有參函數比無參函數多了一個參

4、數表。調用有參函數時,調用函數將賦予這些參數實際的值。為了與調用函數提供的實際參數區(qū)別開,將函數定義中的參數表稱為形式參數表,簡稱形參表。,[案例7.1] 定義一個函數,用于求兩個數中的大數。/*案例代碼文件名:AL7_1.C*//*功能:定義一個求較大數的函數并在主函數中調用*/int max(int n1, int n2) /*定義一個函數max()*/ { return (n1>n2?n1:n2);

5、 }main() { int max(int n1, int n2);/*函數說明*/ int num1,num2; printf("input two numbers:\n"); scanf("%d%d", &num1, &num2);printf("max=%d\n", max(num1,num2)

6、);getch();/*使程序暫停,按任一鍵繼續(xù)*/ }[程序演示],2.說明(1)函數定義不允許嵌套。在C語言中,所有函數(包括主函數main())都是平行的。一個函數的定義,可以放在程序中的任意位置,主函數main()之前或之后。但在一個函數的函數體內,不能再定義另一個函數,即不能嵌套定義。(2)空函數──既無參數、函數體又為空的函數。其一般形式為:[函數類型] 函數名(void)

7、 { }(3)在老版本C語言中,參數類型說明允許放在函數說明部分的第2行單獨指定。,[Return],7.1.2 函數的返回值與函數類型,C語言的函數兼有其它語言中的函數和過程兩種功能,從這個角度看,又可把函數分為有返回值函數和無返回值函數兩種。1.函數返回值與return語句有參函數的返回值,是通過函數中的return語句來獲得的。(1)return語句的一般格式: return ( 返回值表達式 );(2)ret

8、urn語句的功能:返回調用函數,并將“返回值表達式”的值帶給調用函數。注意:調用函數中無return語句,并不是不返回一個值,而是一個不確定的值。為了明確表示不返回值,可以用“void”定義成“無(空)類型”。,2.函數類型在定義函數時,對函數類型的說明,應與return語句中、返回值表達式的類型一致。如果不一致,則以函數類型為準。如果缺省函數類型,則系統(tǒng)一律按整型處理。良好的程序設計習慣:為了使程序具有良好的可讀性并減少出錯,

9、凡不要求返回值的函數都應定義為空類型;即使函數類型為整型,也不使用系統(tǒng)的缺省處理。,[Return],7.1.3 對被調用函數的說明和函數原型,在ANSI C新標準中,采用函數原型方式,對被調用函數進行說明,其一般格式如下:函數類型 函數名(數據類型[ 參數名][, 數據類型[ 參數名2]…]); C語言同時又規(guī)定,在以下2種情況下,可以省去對被調用函數的說明: (1)當被調用函數的函數定義出現(xiàn)

10、在調用函數之前時。因為在調用之前,編譯系統(tǒng)已經知道了被調用函數的函數類型、參數個數、類型和順序。 (2)如果在所有函數定義之前,在函數外部(例如文件開始處)預先對各個函數進行了說明,則在調用函數中可缺省對被調用函數的說明。,[Return],7.1.4 函數的調用,在程序中,是通過對函數的調用來執(zhí)行函數體的,其過程與其它語言的子程序調用相似。C語言中,函數調用的一般形式為: 函數名([實際參數表]) 切記:實

11、參的個數、類型和順序,應該與被調用函數所要求的參數個數、類型和順序一致,才能正確地進行數據傳遞。在C語言中,可以用以下幾種方式調用函數:(1)函數表達式。函數作為表達式的一項,出現(xiàn)在表達式中,以函數返回值參與表達式的運算。這種方式要求函數是有返回值的。(2)函數語句。C語言中的函數可以只進行某些操作而不返回函數值,這時的函數調用可作為一條獨立的語句。(3)函數實參。函數作為另一個函數調用的實際參數出現(xiàn)。這種情況是把該函數的返回值

12、作為實參進行傳送,因此要求該函數必須是有返回值的。,說明:(1)調用函數時,函數名稱必須與具有該功能的自定義函數名稱完全一致。(2)實參在類型上按順序與形參必須一一對應和匹配。如果類型不匹配,C編譯程序將按賦值兼容的規(guī)則進行轉換。如果實參和形參的類型不賦值兼容,通常并不給出出錯信息,且程序仍然繼續(xù)執(zhí)行,只是得不到正確的結果。(3)如果實參表中包括多個參數,對實參的求值順序隨系統(tǒng)而異。有的系統(tǒng)按自左向右順序求實參的值,有的系統(tǒng)則相反

13、。Turbo C和MS C是按自右向左的順序進行的 。,[Return],7.1.5 函數的形參與實參,函數的參數分為形參和實參兩種,作用是實現(xiàn)數據傳送。形參出現(xiàn)在函數定義中,只能在該函數體內使用。發(fā)生函數調用時,調用函數把實參的值復制1份,傳送給被調用函數的形參,從而實現(xiàn)調用函數向被調用函數的數據傳送。 [案例7.3] 實參對形參的數據傳遞。/*實參對形參的數據傳遞。*//*案例代碼文件名:AL7_3.C*/,vo

14、id main() { void s(int n); /*說明函數*/ int n=100; /*定義實參n,并初始化*/ s(n); /*調用函數*/ printf("n_s=%d\n",n);

15、 /*輸出調用后實參的值,便于進行比較*/ getch(); }/* */void s(int n) { int i; printf("n_x=%d\n",n); /*輸出改變前形參的值*/ for(i=n-1; i>=1; i--) n=n+i; /*改變形參的值*/ p

16、rintf("n_x=%d\n",n); /*輸出改變后形參的值*/ }[程序演示],說明:(1)實參可以是常量、變量、表達式、函數等。無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值,以便把這些值傳送給形參。因此,應預先用賦值、輸入等辦法,使實參獲得確定的值。(2)形參變量只有在被調用時,才分配內存單元;調用結束時,即刻釋放所分配的內存單元

17、。因此,形參只有在該函數內有效。調用結束,返回調用函數后,則不能再使用該形參變量。(3)實參對形參的數據傳送是單向的,即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。(4)實參和形參占用不同的內存單元,即使同名也互不影響。,[Return],7.2 函數的嵌套調用和遞歸調用,7.2.1 函數的嵌套調用 函數的嵌套調用是指,在執(zhí)行被調用函數時,被調用函數又調用了其它函數。這與其它語言的子程序嵌套調用的情形是類

18、似的,其關系可表示如圖7-1。,[案例7.4] 計算s=1k+2k+3k+……+N k /*案例代碼文件名:AL7_4.C*//*功能:函數的嵌套調用*/#define K 4#define N 5long f1(int n,int k)/*計算n的k次方*/ { long power=n; int i; for(i=1;i<k;i++) power *= n

19、; return power; },long f2(int n,int k)/*計算1到n的k次方之累加和*/ { long sum=0; int i; for(i=1;i<=n;i++) sum += f1(i, k); return sum; }main() { printf("Sum o

20、f %d powers of integers from 1 to %d = ",K,N); printf("%d\n",f2(N,K)); getch(); }[程序演示],7.2.2 函數的遞歸調用函數的遞歸調用是指,一個函數在它的函數體內,直接或間接地調用它自身。C語言允許函數的遞歸調用。在遞歸調用中,調用函數又是被調用函數,執(zhí)行

21、遞歸函數將反復調用其自身。每調用一次就進入新的一層。為了防止遞歸調用無終止地進行,必須在函數內有終止遞歸調用的手段。常用的辦法是加條件判斷,滿足某種條件后就不再作遞歸調用,然后逐層返回。,[案例7.5] 用遞歸法計算n!。/*案例代碼文件名:AL7_5.C*//*功能:通過函數的遞歸調用計算階乘*/long power(int n) { long f; if(n>1) f=powe

22、r(n-1)*n; else f=1; return(f); },main() { int n; long y; printf("input a inteager number:\n"); scanf("%d",&n); y=power(n); pri

23、ntf("%d!=%ld\n",n,y); getch(); }[程序演示] [Return],7.3 數組作為函數參數,數組用作函數參數有兩種形式:一種是把數組元素(又稱下標變量)作為實參使用;另一種是把數組名作為函數的形參和實參使用。 7.3.1 數組元素作為函數參數 7.3.2 數組名作為函數的形參和實參,[Return],7.3.1 數組元素作為

24、函數參數,數組元素就是下標變量,它與普通變量并無區(qū)別。數組元素只能用作函數實參,其用法與普通變量完全相同:在發(fā)生函數調用時,把數組元素的值傳送給形參,實現(xiàn)單向值傳送。[案例7.6] 寫一函數,統(tǒng)計字符串中字母的個數。/*案例代碼文件名:AL7_6.C*//*功能:數組元素作為函數實參*/int isalp(char c) { if (c>='a'&&

25、;c='A'&&c<='Z') return(1); else return(0); },main() { int i,num=0; char str[255]; printf("Input a string: "); gets(str); for

26、(i=0;str[i]!='\0';i++) if (isalp(str[i])) num++; puts(str); printf("num=%d\n",num); getch(); }[程序演示],說明:(1)用數組元素作實參時,只要數組類型和函數的形參類型一致即可,并不要求函數的形參也是下標變量。換句話說,對數組元素的處理是

27、按普通變量對待的。(2)在普通變量或下標變量作函數參數時,形參變量和實參變量是由編譯系統(tǒng)分配的兩個不同的內存單元。在函數調用時發(fā)生的值傳送,是把實參變量的值賦予形參變量。[Return],7.3.2 數組名作為函數的形參和實參,數組名作函數參數時,既可以作形參,也可以作實參。數組名作函數參數時,要求形參和相對應的實參都必須是類型相同的數組(或指向數組的指針變量),都必須有明確的數組說明[案例7.7] 已知某個學生5門課程

28、的成績,求平均成績。/*案例代碼文件名:AL7_7.C*/float aver(float a[ ]) /*求平均值函數*/{ int i; float av,s=a[0]; for(i=1;i<5;i++) s += a[i]; av=s/5; return av; },void main() { float

29、sco[5],av; int i; printf("\ninput 5 scores:\n"); for(i=0;i<5;i++) scanf("%f",&sco[i]); av=aver(sco); /*調用函數,實參為一數組名*/ printf("averag

30、e score is %5.2f\n",av); getch(); }[程序演示],說明:(1)用數組名作函數參數,應該在調用函數和被調用函數中分別定義數組,且數據類型必須一致,否則結果將出錯。例如,在本案例中,形參數組為a[],實參數組為sco[],它們的數據類型相同。(2)C編譯系統(tǒng)對形參數組大小不作檢查,所以形參數組可以不指定大小。例如,本案例中的形參數組a[]。 如果指定

31、形參數組的大小,則實參數組的大小必須大于等于形參數組,否則因形參數組的部分元素沒有確定值而導致計算結果錯誤。[Return],7.4 內部變量與外部變量,C語言中所有的變量都有自己的作用域。變量說明的位置不同,其作用域也不同,據此將C語言中的變量分為內部變量和外部變量。7.4.1 內部變量7.4.2 外部變量,[Return],7.4.1 內部變量,在一個函數內部說明的變量是內部變量,它只在該函數范圍內有效。也就是

32、說,只有在包含變量說明的函數內部,才能使用被說明的變量,在此函數之外就不能使用這些變量了。所以內部變量也稱“局部變量”。,例如:int f1(int a) /*函數f1*/ { int b,c; …… }/*a,b,c作用域:僅限于函數f1()中*/ int f2(int x) /*函數f2*/ { int y,z; …… }/*x,y

33、,z作用域:僅限于函數f2()中*/ main() { int m,n; …… }/*m,n作用域:僅限于函數main()中*/,關于局部變量的作用域還要說明以下幾點:1.主函數main()中定義的內部變量,也只能在主函數中使用,其它函數不能使用。同時,主函數中也不能使用其它函數中定義的內部變量。因為主函數也是一個函數,與其它函數是平行關系。這一點是與其它語言不同的,應予以注意。2.形

34、參變量也是內部變量,屬于被調用函數;實參變量,則是調用函數的內部變量。3.允許在不同的函數中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不干擾,也不會發(fā)生混淆。4.在復合語句中也可定義變量,其作用域只在復合語句范圍內。,[Return],7.4.2 外部變量,在函數外部定義的變量稱為外部變量。以此類推,在函數外部定義的數組就稱為外部數組。外部變量不屬于任何一個函數,其作用域是:從外部變量的定義位置開始,到本文件結束為

35、止。外部變量可被作用域內的所有函數直接引用,所以外部變量又稱全局變量。,[案例7.9] 輸入長方體的長(l)、寬(w)、高(h),求長方體體積及正、側、頂三個面的面積。/*案例代碼文件名:AL7_9.C*//*功能:利用全局變量計算長方體的體積及三個面的面積*/int s1,s2,s3;int vs(int a,int b,int c) { int v; v=a*b*c; s1=a*b; s2=b*c;

36、 s3=a*c;return v; } main() {int v,l,w,h; clrscr(); printf("\ninput length,width and height: "); scanf("%d%d%d",&l,&w,&h);

37、 v=vs(l,w,h); printf("v=%d s1=%d s2=%d s3=%d\n",v,s1,s2,s3); getch(); }[程序演示],對于全局變量還有以下幾點說明:(1)外部變量可加強函數模塊之間的數據聯(lián)系,但又使這些函數依賴這些外部變量,因而使得這些函數的獨立性降低。從模塊化程序

38、設計的觀點來看這是不利的,因此不是非用不可時,不要使用外部變量。(2)在同一源文件中,允許外部變量和內部變量同名。在內部變量的作用域內,外部變量將被屏蔽而不起作用。(3)外部變量的作用域是從定義點到本文件結束。如果定義點之前的函數需要引用這些外部變量時,需要在函數內對被引用的外部變量進行說明。外部變量說明的一般形式為:extern 數據類型 外部變量[,外部變量2……]; 注意:外部變量的定義和外部變量的說明是兩回事。外

39、部變量的定義,必須在所有的函數之外,且只能定義一次。而外部變量的說明,出現(xiàn)在要使用該外部變量的函數內,而且可以出現(xiàn)多次。,[案例7.10] 外部變量的定義與說明。/*案例代碼文件名:AL7_10.C*/int vs(int xl,int xw) { extern int xh; /*外部變量xh的說明*/ int v; v=xl*xw*xh;

40、 /*直接使用外部變量xh的值*/ return v; }main() { extern int xw,xh; /*外部變量的說明*/ int xl=5; /*內部變量的定義*/ printf("xl=%d,xw=%d,xh=%d\nv=%d",xl,xw,xh,vs(xl

41、,xw)); }int xl=3,xw=4,xh=5; /*外部變量xl、xw、xh的定義*/[程序演示],[Return],7.5 內部函數和外部函數,7.5.1 內部函數(又稱靜態(tài)函數) 7.5.2 外部函數 7.5.3 多個源程序文件的編譯和連接,當一個源程序由多個源文件組成時,C語言根據函數能否被其它源文件中的函數調用,將函數分為內部函數和外部函數。,[Return],

42、7.5.1 內部函數(又稱靜態(tài)函數),如果在一個源文件中定義的函數,只能被本文件中的函數調用,而不能被同一程序其它文件中的函數調用,這種函數稱為內部函數。定義一個內部函數,只需在函數類型前再加一個“static”關鍵字即可,如下所示:static 函數類型 函數名(函數參數表) {……}關鍵字“static”,譯成中文就是“靜態(tài)的”,所以內部函數又稱靜態(tài)函數。但此處“static”的含義不是指

43、存儲方式,而是指對函數的作用域僅局限于本文件。使用內部函數的好處是:不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其它文件中的函數同名,因為同名也沒有關系。,[Return],7.5.2 外部函數,外部函數的定義:在定義函數時,如果沒有加關鍵字“static”,或冠以關鍵字“extern”,表示此函數是外部函數:[extern] 函數類型 函數名(函數參數表) {……}

44、調用外部函數時,需要對其進行說明:[extern] 函數類型 函數名(參數類型表)[,函數名2(參數類型表2)……];[案例7.11] 外部函數應用。(1)文件mainf.cmain(){ extern void input(…),process(…),output(…); input(…); process(…); output(…);},(2)文件subf1.c……extern void

45、input(……)/*定義外部函數*/ {……}(3)文件subf2.c……extern void process(……)/*定義外部函數*/ {……}(4)文件subf3.c……extern void output(……)/*定義外部函數*/ {……} [Return],7.5.3 多個源程序文件的編譯和連接,(1)一般過程編輯各源文件 → 創(chuàng)建Project(項目)文件 → 設

46、置項目名稱 → 編譯、連接,運行,查看結果。(2)創(chuàng)建Project(項目)文件用編輯源文件相同的方法,創(chuàng)建一個擴展名為.PRJ的項目文件:該文件中僅包括將被編譯、連接的各源文件名,一行一個,其擴展名.C可以缺?。晃募捻樞?,僅影響編譯的順序,與運行無關。注意:如果有某個(些)源文件不在當前目錄下,則應在文件名前冠以路徑。,(3)設置項目名稱打開菜單,選取Project/Project name,輸入項目文件名即可。(4)編

47、譯、連接,運行,查看結果與單個源文件相同。編譯產生的目標文件,以及連接產生的可執(zhí)行文件,它們的主文件名,均與項目文件的主文件名相同。注意:當前項目文件調試完畢后,應選取Project/Clear project,將其項目名稱從“Project name”中清除(清除后為空)。否則,編譯、連接和運行的,始終是該項目文件!,(5)關于錯誤跟蹤缺省時,僅跟蹤當前一個源程序文件。如果希望自動跟蹤項目中的所有源文件,則應將Options/E

48、nvironment/Message Tracking開關置為“All files ”:連續(xù)按回車鍵,直至“All files”出現(xiàn)為止。此時,滾動消息窗口中的錯誤信息時,系統(tǒng)會自動加載相應的源文件到編輯窗口中。也可關閉跟蹤(將“Message Tracking”置為“Off”)。此時,只要定位于感興趣的錯誤信息上,然后回車,系統(tǒng)也會自動將相應源文件加載到編輯窗口中。,[Return],7.6 變量的動態(tài)存儲與靜態(tài)存儲簡介,在C語

49、言中,對變量的存儲類型說明有以下四種:自動變量(auto)、寄存器變量(register)、外部變量(extern)、靜態(tài)變量(static)。自動變量和寄存器變量屬于動態(tài)存儲方式,外部變量和靜態(tài)內部變量屬于靜態(tài)存儲方式。7.6.1 內部變量的存儲方式 7.6.2 外部變量的存儲方式,[Return],7.6.1 內部變量的存儲方式,1.靜態(tài)存儲──靜態(tài)內部變量(1)定義格式: static 數據類型 內部變量表;(

50、2)存儲特點1)靜態(tài)內部變量屬于靜態(tài)存儲。在程序執(zhí)行過程中,即使所在函數調用結束也不釋放。換句話說,在程序執(zhí)行期間,靜態(tài)內部變量始終存在,但其它函數是不能引用它們的。2)定義但不初始化,則自動賦以"0"(整型和實型)或'\0'(字符型);且每次調用它們所在的函數時,不再重新賦初值,只是保留上次調用結束時的值?。?)何時使用靜態(tài)內部變量1)需要保留函數上一次調用結束時的值。2)變量只被引用而不

51、改變其值。,2.動態(tài)存儲──自動局部變量(又稱自動變量)(1)定義格式:[auto] 數據類型 變量表;(2)存儲特點1)自動變量屬于動態(tài)存儲方式。在函數中定義的自動變量,只在該函數內有效;函數被調用時分配存儲空間,調用結束就釋放。在復合語句中定義的自動變量,只在該復合語句中有效;退出復合語句后,也不能再使用,否則將引起錯誤。2)定義而不初始化,則其值是不確定的。如果初始化,則賦初值操作是在調用時進行的,且每次調用都要重

52、新賦一次初值。3)由于自動變量的作用域和生存期,都局限于定義它的個體內(函數或復合語句),因此不同的個體中允許使用同名的變量而不會混淆。即使在函數內定義的自動變量,也可與該函數內部的復合語句中定義的自動變量同名。建議:系統(tǒng)不會混淆,并不意味著人也不會混淆,所以盡量少用同名自動變量!,[案例7.13]自動變量與靜態(tài)局部變量的存儲特性。/*案例代碼文件名:AL7_13.C*/void auto_static(void) {

53、 int var_auto=0;/*自動變量:每次調用都重新初始化*/ static int var_static=0;/*靜態(tài)局部變量:只初始化1次*/ printf(“var_auto=%d, var_static=%d\n”, var_auto, var_static); ++var_auto; ++var_static; }main() {

54、 int i; for(i=0; i<5; i++) auto_static(); }[程序演示],3.寄存器存儲──寄存器變量一般情況下,變量的值都是存儲在內存中的。為提高執(zhí)行效率,C語言允許將局部變量的值存放到寄存器中,這種變量就稱為寄存器變量。定義格式如下: register 數據類型 變量表;(1)只有局部變量才能定義成寄存器變量,即全局變量不行。(2

55、)對寄存器變量的實際處理,隨系統(tǒng)而異。例如,微機上的MSC和TC 將寄存器變量實際當作自動變量處理。(3)允許使用的寄存器數目是有限的,不能定義任意多個寄存器變量。[Return],7.6.2 外部變量的存儲方式,外部變量屬于靜態(tài)存儲方式: (1)靜態(tài)外部變量──只允許被本源文件中的函數引用其定義格式為: static 數據類型 外部變量表;(2)非靜態(tài)外部變量──允許被其它源文件中的函數引用定義時缺省stati

56、c關鍵字的外部變量,即為非靜態(tài)外部變量。其它源文件中的函數,引用非靜態(tài)外部變量時,需要在引用函數所在的源文件中進行說明:extern 數據類型 外部變量表;注意:在函數內的extern變量說明,表示引用本源文件中的外部變量!而函數外(通常在文件開頭)的extern變量說明,表示引用其它文件中的外部變量。,靜態(tài)局部變量和靜態(tài)外部變量同屬靜態(tài)存儲方式,但兩者區(qū)別較大:(1)定義的位置不同。靜態(tài)局部變量在函數內定義,靜態(tài)外部變量在函

57、數外定義。(2)作用域不同。靜態(tài)局部變量屬于內部變量,其作用域僅限于定義它的函數內;雖然生存期為整個源程序,但其它函數是不能使用它的。靜態(tài)外部變量在函數外定義,其作用域為定義它的源文件內;生存期為整個源程序,但其它源文件中的函數也是不能使用它的。 (3)初始化處理不同。靜態(tài)局部變量,僅在第1次調用它所在的函數時被初始化,當再次調用定義它的函數時,不再初始化,而是保留上1次調用結束時的值。而靜態(tài)外部變量是在函數外定義的,不存在

溫馨提示

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

評論

0/150

提交評論