C语言一日一学第8课-函数

上传人:y****n 文档编号:102806795 上传时间:2022-06-07 格式:DOC 页数:17 大小:74.51KB
返回 下载 相关 举报
C语言一日一学第8课-函数_第1页
第1页 / 共17页
C语言一日一学第8课-函数_第2页
第2页 / 共17页
C语言一日一学第8课-函数_第3页
第3页 / 共17页
点击查看更多>>
资源描述
1.7.2 数组名作函数参数+ q+ p* k E/ Sz5 / _可以用数组名作函数参数,此时形参应当用数组名或用指针变量 。 & 7 G4 x: s; z d2 q, i& h例1.11 有一个一维数组score,内放10个学生成绩,求平均成绩。 1. #include 2. void main() 3. 4. floataverage(float array10);/* 函数声明 */ 5. float score10 , aver; 6. int i; 7. printf(input 10 scores:n);8. for(i = 0 ; i 10 ; i +)9. scanf(%f,&scorei); 10. printf(n); 11. averaverage( score ); 12. printf ( average score is %5.2fn, aver); 13. 14. floataverage (float array10) 15. 16. int i; 17. floataver, sum = array0;18. for(i = 1 ; 1 10; i +)19. sum = sum + arrayi;20. aver = sum/10;21. return(aver); 22. 复制代码运行情况如下: 1. input 10 scores: 2. 100 56 78 98.5 76 87 99 67.5 75 97 3. average score is 83.40复制代码例 1.12形参数组不定义长度 1. #include 2. voidmain() 3. 4. float average(float array,int n)5. floatscore_15 98.5 , 97 , 91.5 , 60 , 55;6. float score_210=67.5 , 89.5 , 99 , 69.5 , 77 , 89.5 , 76.5 , 54 , 60 , 99.5; 7. printf(the average of class A is %6.2fn,average(score_1,5); 8. printf(the average of class B is %6.2fn,average(score_2,10); 9. 10. float average(float array , int n)11. 12. int i; 13. floataver , sum = array0; 14. for(i = 1 ; i n ; i +)15. sumsum + arrayi; 16. aversum/n; 17. return(aver); 18. 复制代码运行结果如下: 1. the average of class A is 80.40 2. The average of class B is78.20复制代码例 8.13 用选择法对数组中10个整数按由小到大排序。所谓选择法就是先将10个数中最小的数与a0对换;再将a1到a9中最小的数与a1对换每比较一轮,找出一个未经排序的数中最小的一个。共比较9轮。 1 $ F/ s* x9 G$ wa0 a1a2 a3 a4 r+ v+ w f6 z% b8 _# d3 H* t9 C3 6 1 9 4 未排序时的情况 / r( S t n- A?3 V% A1 6 3 9 4 ! h 9 r. V7 CR: 0 h R! o 将5个数中最小的数1与a0对换 7 h y+ B3 b& z1 ?: F: 7 P1 3 6 9 4 + s0 D. h: a6 U/ X9 E6 F 将余下的4个数中最小的数3与a1对换 $ D/ G; P4 & C: I3 K9 $ |4 Y1 3 4 9 6 j8 A$ y. uZ 将余下的3个数中最小的数4与a2对换 : & - b3 9 / P# . 1 3 4 6 9 n2 s. L6 J# l# C- C4 E5 S 将余下的2个数中最小的数6与a3对换,至此完成排序 - a: m6 h o% E- r+ A/ d9 程序实例 1. #include 2. voidmain() 3. 4. void sort(int array , int n);5. int a10 , i ; 6. printf(enterthearrayn); 7. for(i = 0 ; i 10 ; i +)8. scanf(%d , &ai);9. sort9 a , 10 );10. printf(thesorted array:n); 11. for(i = 0 ; i 10 ; i +)12. printf(%d, ai);13. printf(n);14. 15. voidsort9int array , int n)16. 17. int i , j , k , t ; 18. for(i = 0 ; i n - 1 ; i +) 19. 20. k = i ; 21. for(j = i + 1 ; j n ; j +) 22. if(arrayjarrayk = k = j) 23. t=arrayk;24. arrayk=arrayi; 25. arrayi=t; 26. 27. 复制代码程序如下: 1. #include 2. voidmain() 3. 4. max_value ( intarray4); 5. int 34=1,3,5,7,2,4,6,8,15,17,34,12; 6. printf(max value is %dn,max_value(a) ); 7. 8. max_value (int array4) 9. 10. int i , j , k , max ; 11. max = array00;12. for(i = 0 ; i 3 ; i +)13. for(j = 0 ; j max)15. max = arrayij;16. return(max); 17. 复制代码运行结果如下: 1. Max value is 34复制代码1.8局部变量和全局变量 6 q, W) p; Y4 N% 1.8.1局部变量 7 a; Z! w8 fj! ZL# h在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。这称为“局部变量”。 1. float f1( int a) /*函数f1 */ 2. int b,c; 3. a、b、c有效 4. 5. char f2(int x,int y) /*函数f2 */ 6. int i,j; x、y、i、j有效 7. 8. void main( ) /*主函数*/ 9. int m,n; 10. m、n有效 11. 复制代码说明 : Q k9 L, I) c$ $ (1) 主函数中定义的变量(m,n)也只在主函数中有效,而不因为在主函数中定义而在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。 4 ys2 c% 6 m7 k9 b(2) 不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。例如, 上面在f1函数中定义了变量b和c,倘若在f2函数中也定义变量b和c,它们在内存中占不同的单元,互不混淆。 + B. L$ m# w7 (3) 形式参数也是局部变量。例如上面f1函数中的形参a,也只在f1函数中有效。其他函数可以调用f1函数,但不能引用f1函数的形参a。 9 |+ u n) + l. l(4) 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。 1. void main ( ) 2. 3. int a,b; 4. 5. 6. int c; 7. c=a+b;c在此范围内有效 a,b在此范围内有效 8. 9. 10. 11. 复制代码1.8.2 全局变量 5 M X# O% 0 o$ b4 u& P在函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,外部变量是全局变量(也称全程变量)。全局变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束。 1. int p=1,q=5; /* 外部变量 */ 2. float f1(int a) /* 定义函数f1 */ 3. 4. int b,c; 5. 6. 7. char c1,c2; /* 外部变量*/ 8. char f2 (int x, int y) /* 定义函数f2 */ 9. 10. int i,j; 全局变量p,q的作用范围 11. 全局变量c1,c2的作用范围 12. 13. void main ( ) /*主函数*/ 14. 15. int m,n; 16. 17. 复制代码例1.15 有一个一维数组,内放10个学生成绩,写一个函数,求出平均分、最高分和最低分。 1. #include 2. float Max0 ,Min0 ; /*全局变量*/ 3. voidmain() 4. 5. float average(float array , int n ); 6. float ave , score10; 7. int i; 8. for(i = 0 ; i 10 ; i +)9. scanf(%f, &scorei); 10. ave =average(score , 10); 11. printf(max=%6.2fnmin=%6.2fnaverage=%6.2fn,Max , Min , ave); 12. 13. float average(float array, int n) /*定义函数,形参为数组 */ 14. 15. int i; 16. float aver, sum=array0; 17. Max=Min=array0; 18. for(i = 1 ; i Max)21. Maxarrayi; 22. else23. if(arrayi Min)24. Min arrayi; 25. sum=sum+arrayi;26. 27. aversum/n; 28. return(aver); 29. 复制代码运行情况如下: 1. 99 45 78 97 100 67.5 89 92 66 43 2. max = 100.003. min = 43.004. average = 77.65复制代码2 l. o d8 L3 O0 C建议不在必要时不要使用全局变量,原因如下: 8 m: j& aK4 q0 I4 V 全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。 9 n) t- p1 ?7 ?9 D0 H 使用全局变量过多,会降低程序的清晰性,人们往往难以清楚地判断出每个瞬时各个外部变量的值。在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使用全局变量。 S- Z& S+ X- g! _& _, k它使函数的通用性降低了,因为函数在执行时要依赖于其所在的外部变量。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。但若该外部变量与其他文件的变量同名时,就会出现问题,降低了程序的可靠性和通用性。一般要求把程序中的函数做成一个封闭体,除了可以通过“实参形参”的渠道与外界发生联系外,没有其他渠道。 + N9 l( ?3 q+ _3 7 S$ s例1.16 外部变量与局部变量同名 1. #include 2. int a=3,b=5; /* a,b为外部变量*/ a,b作用范围 3. void main ( ) 4. 5. int a=8; /*a为局部变量 */ 局部变量a作用范围 6. printf (%d, max (a,b); 全局变量b的作用范围 7. 8. max (int a, int b) /*a,b为局部变量 */ 9. int c; 10. c=ab?ab; 形参a、b作用范围 11. return (c); 12. 复制代码运行结果为 1. 8复制代码1.9 变量的存储类别 ; _% Q7 O3 Y( o6 s6 T+ s1.9.1 动态存储方式与静态存储方式 5 q8 j0 c( x/ k) w% z( K9 M1 N3 L前面已介绍了从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。那么从变量值存在的时间(即生存期)角度来分,又可以分为静态存储方式和动态存储方式。 / + w* O/ c7 B* c7 o, 所谓静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式。而动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。这个存储空间可以分为三部分: # |/ I2 z7 X# mK3 yc 程序区 2 R( Z6 xq2 w! U* F 静态存储区 $ B4 4 I. ; F% R 动态存储区 - g$ 0 S+ S5 x % u* D7 ?在C语言中每一个变量和函数有两个属性:数据类型和数据的存储类别。对数据类型,读者已熟悉(如整型、字符型等)。存储类别指的是数据在内存中存储的方式。存储方式分为两大类:静态存储类和动态存储类。具体包含四种:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。根据变量的存储类别,可以知道变量的作用域和生存期。 6 K9 B8 A) O( d1.9.2 auto变量 / G- G E) i( G函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。因此这类局部变量称为自动变量。自动变量用关键字auto作存储类别的声明。% I. C9 . M+ f7 r, F7 n$ R例如: 1. int f(int a)/*定义f函数,a为形参 */ 2. 3. autoint b , c 3;/*定义b 、c为自动变量 */ 4. 5. 复制代码1.9.3用static声明局部变量 + G5 X3 JI: c/ w/ X. c d! g4 T有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。通过下面简单的例子可以了解它的特点。 # p) s- h2 ( o9 K$ z* x3 J例1.17 考察静态局部变量的值。 1. #include 2. voidmain()3. 4. int f(int); 5. int a = 2 , i ;6. for(i = 0 ; i 3 ; i +)7. printf(%d,f(a);8. 9. int f(int a)10. 11. auto int b = 0; 12. static c = 3;13. b = b + 1;14. c = c + 1; 15. return(a + b + c); 16. 复制代码对静态局部变量的说明: 3 L% |. ?X3 x9 M(1) 静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储区空间而不占静态存储区空间,函数调用结束后即释放。 1 ?6 / d0 w, t+ x(2) 对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。而对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。 # X! iA& v3 t1 O: s) J5 8 x( ?(3)如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。 # c S* O# M7 l5 D& H$ |7 f. N(4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。 8 F6 y( & v, V8 2 f2 B例118 输出1到5的阶乘值。 1. #include 2. voidmain()3. 4. intfac(int n); 5. int i ;6. for(i = 1 ; 1 = 5 ; i +)7. printf(%d!=%dn, i , fac(i)8. 9. Int fac(int n) 10. 11. staticint f = 1 ;12. f = f * n ;13. return(f);14. 复制代码1.9.4 register变量 # O8 R6 d1 P 0 w* u4 C! _+ K一般情况下,变量(包括静态存储方式和动态存储方式)的值是存放在内存中的。当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到运算器中。 经过运算器进行运算,如果需要存数,再从运算器将数据送到内存存放。 K/ O5 F7 2 n, U# 5 ?+ V! n) K如果有一些变量使用频繁(例如在一个函数中执行10000次循环,每次循环中都要引用某局部变量),则为存取变量的值要花费不少时间。为提高执行效率,C语言允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。由于对寄存器的存取速度远高于对内存的存取速度,因此这样做可以提高执行效率。这种变量叫做寄存器变量,用关键字register作声明。例如,例119中的程序是输出1到n的阶乘的值。 : b4 ( o/ l+ D% m例119使用寄存器变量 1. #include 2. void main ( ) 3. 4. long fac(long); 5. long i,n; 6. scanf(%ld,&n); 7. for(i=1;i=n;i+) 8. printf(%ld!=%ldn,i,fac(i); 9. 10. long fac(long n) 11. 12. register long i,f=1; /*定义寄存器变量*/ 13. for (i=1;i=n;i+) 14. f=f*i; 15. return (f); 16. 复制代码1.9.5用extern声明外部变量 + t- L; ) n* + ?* V6 Z9 5 : 外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。编译时将外部变量分配在静态存储区。 ?+ j/ # _; r: ( |! ?; n9 I有时需要用extern来声明外部变量,以扩展外部变量的作用城。 6 eX8 9 o# U) 0 s+ C/ Q1. 在一个文件内声明外部变量 5 o& E N b% g8 l$ L例120 用extern声明外部变量,扩展它在程序文件中的作用域。 1. #include 2. void main() 3. 4. int max(int,int); /*外部变量声明*/5. externA,B; 6. printf(%dn,max(A,B); 7. 8. int A=13,B=-8; /*定义外部变量*/ 9. int max(int x,int y) /*定义max函数 */ 10. 11. int z; 12. z=xy?x:y; 13. return(z); 14. 复制代码2. 在多文件的程序中声明外部变量 1 f2 0 P0 M) a例1.21 用extern将外部变量的作用域扩展到其他文件。 本程序的作用是给定b的值,输入a和m, 求ab和am的值。文件file1.c中的内容为: 1. #include 2. int A; /*定义外部变量*/ 3. void main() 4. 5. int power(int); /*函数声明*/ 6. int b = 3 , c , d , m ;; 7. printf(enter the number a and its power m:n); 8. scanf(%d , %d, %A, %m);9. c A*b; 10. printf(%d * %d = %dn, A , b , c);11. d = power(m);12. printf(%d * %d + %dn,A , m , d);13. 复制代码文件file2.c中的内容为: y1 O( z, ?& N! NexternA; /*声明A为一个已定义的外部变量*/ 1. int power(int n);2. 3. int i , y = 1 ; 4. for(i = 1 ; i = n ; i +)5. y * A; 6. return(y);7. 复制代码1.9.6用static声明外部变量 $ ?; k# ; w: 8 # n有时在程序设计中希望某些外部变量只限于被本文件引用,而不能被其他文件引用。这时可以在定义外部变量时加一个static声明。/ ( Y+ 9 i0 B! U5 k/ N- Y) y; u5 s. _& + & 例如: 1. file1.c file2.c 2. static int A; extern int A; 3. void main ( ) void fun (int n) 4. 5. A=A*n; 6. 复制代码1.9.7关于变量的声明和定义 / t6 l% ; B- F0 T* _5 对变量而言,声明与定义的关系稍微复杂一些。在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如:int a; ),另一种是不需要建立存储空间的(如:extern a;)。前者称为“定义性声明”(defining declaration) ,或简称定义(definition)。 后者称为“引用性声明”(referencing declaration)。广义地说,声明包括定义,但并非所有的声明都是定义。对“int a;” 而言,它既是声明,又是定义。而对“extern a;” 而言,它是声明而不是定义。 6 y0 x! z. Q1 C/ I W- j一般为了叙述方便,把建立存储空间的声明称定义,而把不需要建立存储空间的声明称为声明。显然这里指的声明是狭义的,即非定义性声明。3 d( A( y I4 J: q例如: 1. void main() 2. 3. extern A; /*是声明不是定义。声明A是一 4. 个已定义的外部变量*/ 5. 6. 7. int A;复制代码1.9.8存储类别小结 r% ; t# a: d1 Z( (1) 从作用域角度分,有局部变量和全局变量。它们采用的存储类别如下: Y, % X( Vb 局部变量|自动变量,即动态局部变量(离开函数,值就消失) ( R0 e! C! Y, M$ H( Z |静态局部变量(离开函数,值仍保留) 4 ?# & y! G H: H$ G! g |寄存器变量(离开函数,值就消失) 4 & N2 d. q0 z0 U! u |(形式参数可以定义为自动变量或寄存器变量) 8 c+ k6 O* e6 a3 7 l全局变量|静态外部变量(只限本文件引用) # 8 E! m, g+ S9 w5 t 7 e |外部变量(即非静态的外部变量,允许其他文件引用) - f; T- W- q3 ; % (2) 从变量存在的时间(生存期)来区分,有动态存储和静态存储两种类型。静态存储是程序整个运行时间都存在,而动态存储则是在调用函数时临时分配单元。 5 # T& D; T2 X0 8 ! e- w- f动态存储|自动变量(本函数内有效) - u1 jO( s& r( z+ a |寄存器变量(本函数内有效) # y$ O) L* j, f% X# n |形式参数(本函数内有效) % t5 _7 ; n: C# . N静态存储|静态局部变量(函数内有效) 1 4 g: z, * |9 q C- |静态外部变量(本文件内有效) . Z, w4 n% T9 C. l* w% O% V/ |! v |外部变量(其他文件可引用) ( S7 r2 J6 # l1 g$ U W4 Y(3) 从变量值存放的位置来区分,可分为: 3 . v/ A5 f7 U2 f! |内存中静态存储区|静态局部变量 8 Z% n# K: I, e: |静态外部变量(函数外部静态变量) 1 |7 N/ l1 0 K9 Q7 Q2 m2 H |外部变量(可为其他文件引用) 5 I- r5 Y0 H. C内存中动态存储区:自动变量和形式参数CPU中的寄存器:寄存器变量 ) t0 y& x& bX/ S/ _6 N4 o(4) 关于作用域和生存期的概念。从前面叙述可以知道,对一个变量的性质可以从两个方面分析,一是变量的作用域,一是变量值存在时间的长短,即生存期。前者是从空间的角度,后者是从时间的角度。二者有联系但不是同一回事。 # w& : E% s K+ i(5) static对局部变量和全局变量的作用不同。对局部变量来说,它使变量由动态存储方式改变为静态存储方式。而对全局变量来说,它使变量局部化(局部于本文件),但仍为静态存储方式。从作用域角度看,凡有static声明的,其作用域都是局限的,或者是局限于本函数内(静态局部变量),或者局限于本文件内(静态外部变量)。 7 y1 $ 3 # f& c1.10 内部函数和外部函数 ; f: R* _# R) S1 P( B/ b0 Y5 H函数本质上是全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数不能被其他文件调用。根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数。 : z: H( f: |3 e1.10.1内部函数 # a+ Q5 1 Z( n/ m如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加static。4 K- ?9 . O7 7 A4 A# m: s- s即 static 类型标识符 函数名(形参表) W+ z$ M8 I+ D: E8 t, n如 1. static int fun ( int a , int b )复制代码1.10.2外部函数0 n& D/ e3 Z) x; i8 5 L(1) 在定义函数时,如果在函数首部的最左端加关键字extern,则表示此函数是外部函数,可供其他文件调用。如函数首部可以写为extern int fun (int a, int b) 3 X( Q- * e& p- p& H) a# r这样,函数fun就可以为其他文件调用。C语言规定,如果在定义函数时省略extern,则隐含为外部函数。本书前面所用的函数都是外部函数。 # F0 Q/ T0 U, O$ v- Y2 |(2) 在需要调用此函数的文件中,用extern对函数作声明,表示该函数是在其他文件中定义的外部函数 # a! / ?5 q; u/ c& G( f. 9 A3 L例 1.22 有一个字符串,内有若干个字符,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现 * T* H8 o7 C: R8 u0 cFile.c(文件1) 1. #include 2. void main() 3. 4. extern void enter_string(char str); 5. extern void detele_string(char str,char ch); 6. extern void print_string(char str);/*以上3行声明在本函数中将要调用的在其他文件中定义的3个函数*/ 7. char c; 8. char str80; 9. scanf(%c,&c); 10. detele_string(str,c); 11. print_string(str); 12. 复制代码file2.c(文件2) 1. #include 2. void enter_string(char str80)/* 定义外部函数enter-string*/ 3. 4. gets(str); /*向字符数组输入字符串*/5. 复制代码file3.c(文件3) 1. void delete_string(char str,char ch)/*定义外部函数delete_string */ 2. 3. int i,j; 4. for(i=j=0;stri!=0;i+) 5. if(stri!=ch) 6. strj+=stri; 7. stri=0; 8. 复制代码file4.c(文件4) 1. #include 2. void print_string(char str) 3. 4. printf(%sn,str); 5. 复制代码运行情况如下: t- I g x5 s$ |8 u1 A# g6 N; Babcdefgc (输入str) ( r8 K0 k2 o W5 F7 A% j2 Q2 lc (输入要删去的字符) 0 S B: # L2 K) : s/ o+ Pabdefg(输出已删去指定字符的字符串)/ n1 E! m4 5 c/ V# w* m: w& H7 Y + q) N; n, M- f1 a作业: ?1 q7 y0 R4 1.写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。 2 s/ u, T4 $ m2 p2.写几个函数:输个职工的姓名和职工号;按职工号由小到大顺序排序,姓名顺序也随之调整;要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 临时分类 > 人文社科


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!