C语言程序设计:chapter07 用函数实现模块化程序设计_第1页
C语言程序设计:chapter07 用函数实现模块化程序设计_第2页
C语言程序设计:chapter07 用函数实现模块化程序设计_第3页
C语言程序设计:chapter07 用函数实现模块化程序设计_第4页
C语言程序设计:chapter07 用函数实现模块化程序设计_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第七章 用函数实现模块化程序设计C 语言程序设计本章要点函数的定义、说明与调用函数之间参数传递规则函数递归调用和嵌套调用变量的存储类型与特性第七章 用函数实现模块化程序设计一、模块化程序结构模块1主模块模块11模块2模块21模块227.1 概述一个较大的应用程序应分为若干个程序模块,每一个模块用来实现一个特定的功能。所有的高级语言都有子程序概念,用子程序实现模块的功能。 学生成绩 管理系统 成绩 录入 成绩 查询 成绩 统计 成绩单打印在 C 语言中是利用函数来实现子程序的作用。 采用模块化程序设计的优越性:控制程序设计的复杂性提高软件的可靠性提高软件开发的效率提高软件的可维护性提高程序的重

2、用性C程序是函数的集合体,每个函数是一个独立的程序模块;有一个主函数,若干个子函数;所有子函数地位平等,可相互调用、自我调用;函数可集中或分散存放在一个或多个源程序文件中。函数F1 ( )main ( )F11 ( )F2 ( )F21 ( )F22 ( )二、C程序的结构黑盒子三、C函数的分类数学函数 (math.h)字符和字符串函数 ( ctype.h,string.h)I/O函数 ( stdio.h)动态存储分配函数(stdlib.h或malloc.h)形式无参函数有参函数空函数库函数用户定义函数详见P384附录F四、C程序的执行顺序一个源程序文件,由一个或多个函数以及其他有关内容组成,

3、是一个编译单位,函数不是一个编译单位。C程序的执行总是从main函数开始,调用其它函数后回到main函数,在main函数中结束整个程序的运行;所有的子函数都是平行的,任何子函数都不属于其他函数;void main()printstar();printmessage();例7- 1#include void printstar() printf(“*n”);void printmessage()printf(“ Hello,world.n”); printstar();这两个函数能单独执行吗?不能例7- 2#include int max(int x,int y) int z; z = x y

4、? x : y; return( z );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);void printstar() printf(“*”);void function(int a, float y) 7.2 函数的定义一、函数定义的一般形式类型说明 函数名(形式参数说明) 函数体 形式参数说明方法:类型说明 变量名1,类型说明 变量名2 1.无参函数的定义形式类型说明 函数名() 函数体 2.空函数的定义形式类型说明 函数名(形式参数说明) 一般情况下,函数体由两部

5、分组成: 局部变量说明 语句 局部变量: 函数体内定义的变量,其有效范围仅在函数内部,离开函数体无意义。7.2 函数的定义二、函数体组成c=max (a,b);7.3 函数参数和函数的值一个C程序由若干个函数组成,各函数调用时经常要传递一些数据,调用函数把数据传递给被调用函数,经被调用函数使用后,一般会返回一个确定结果,在返回调用函数时,把这些结果带回调用函数。例7- 2#include int max(int x,int y) int z; z = x y ? x : y; return( z );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c

6、=max(a,b); printf(“The max is %d”, );主调函数int max(int x,int y) return( z );被调用函数a, bz各函数的信息往来主要是由参数传递和返回语句实现的一、形式参数和实际参数7.3 函数参数和函数的值例7- 2#include int max(int x,int y) int z; z = x y ? x : y; return( z );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);函数参数用于函数间数据的

7、传递形式参数:定义函数时使用的参数实际参数:调用函数时使用的参数函数max有两个形式参数x和y形参x和y只在max函数中使用a和b是主函数中定义的变量main函数调用max函数a和b是max函数的实参23,56The max is 56说明:1.定义函数时,必须说明形参类型,形参只能是变量和数组;2.函数被调用前,形参不占内存,函数调用结束后,内存也被释放;3.实参可以是常量、变量和表达式;4.实参和形参的类型必须一致,字符型和整型可以相互匹配;5.C语言中实参对形参的数据传递是“值传递”,即单向传递,仅由参数的对应位置决定,与名字无关。一、形式参数和实际参数7.3 函数参数和函数的值例8-

8、2#include int max(int x,int y) int z; z = x y ? x : y; return( z );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);23,56The max is 56例8- 2#include int max(int x,int y) x = x y ? x : y; return( x );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“

9、The max is %d”, c);例7- 2#include int max(int b,int a) int c; c = b a ? b: a; return( c );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);一、形式参数和实际参数7.3 函数参数和函数的值例7-3 读程序,写程序结果#include int sum(int a,int b) int c; a=a+b; b=a+b; c=a+b; printf(“sum:%d+%d = %dn”, a,b,

10、c); return a; void main() int a=1,b=3,c ; c=sum(a,b); printf(“main:%d+%d = %dn”, a,b,c);7.3 函数参数和函数的值二、函数的返回值1.返回函数值的方法(1)函数的返回值也就是函数的值,如果一个函数有返回值,就必须用return语句;(2)一个函数中可以有多个return语句,无论执行到哪个return语句,都将结束函数调用,返回主调函数。例8- 2#include int max(int x,int y) int z; z = x y ? x : y; return( z );void main() int

11、 a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);例8- 2#include int max(int x,int y) if(xy) return (x) ; return ( z );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);例7- 2#include int max(int x,int y) return(x y ? x : y );void main() int a,b,c

12、 ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);(3) return语句中的括号可以省略,return后面可以是一个表达式,返回的是表达式的值。2. 函数值的类型(1)函数的类型也就是函数值的类型,函数max是int型的,函数max的值也是int型的;(2)省略了类型说明的函数是int型;(3)return语句中的表达式一般应与函数类型一致。如果不一致,需要进行类型转换,只有数值型数据可以进行自动类型转换,以函数类型为准。例7- 2#include int max(int x,int y) int z; z = x

13、 y ? x : y; return( z );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);7.3 函数参数和函数的值3.不需要返回值的函数(1)如果函数中没有使用return语句,函数返回的是一个不确定的值;(2)如果一个函数不需要返回值,可以用void做类型说明;(3)如果一个函数被声明为void型的,就不允许再引用他的返回值,只能用函数语句形式调用;7.3 函数参数和函数的值例7- 1#include void printstar() printf(“*”);vo

14、id printmessage()printf(“ Hello,world.n”); printstar();void main()printstar();printmessage();7.4 函数的调用一. 函数调用的一般形式 函数名(实参表列)说明:1.如果调用无参函数,实参表列部分没有,但括号不能省略;2.实参的个数和形参个数一般相等;3.实参和形参的类型一一对应,必要时使用类型转换;4.实参变量定义在调用函数之前完成。例7- 2#include int max(int x,int y) int z; z = x y ? x : y; return( z );void main() in

15、t a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);二. 函数调用的方式1.函数语句形式为:函数名(实参表列);例如: printmessage(); printf(“%d”,a);说明:这种方式不要求函数带返回值,函数仅完成一定的操作。2.函数表达式函数的值参与运算例如:m=max(a,b);m=3*max(a,b);printf(“The max is %d”, max(a,b);说明:这种方式不能用于void类型。7.4 函数的调用7.4 函数的调用三. 函数调用的执行过程1.按从右到左的顺序,计算

16、实参各表达式的值;2.按照位置,将实参的值一一传给形参;3.执行被调用函数;4.当遇到return(表达式)语句时,计算表达式的值,并返回主调函数。#include int sum ( int x ) int i,t=0; for (i=1; i=x; i+) t+=i; return (t);void main( ) int s; s=sum (100); printf(%dn, s); 在程序中调用函数要满足以下条件:1.被调函数必须存在,且遵循先定义,后使用的原则;2.如果函数在主调函数之后定义,则应在主调函数中或主调函数之前对被调函数进行声明。7.4 函数的调用四. 函数的声明#inc

17、lude void main( )int sum ( int x );int s; s=sum (100); printf(%dn, s); int sum ( int x ) int i,t=0; for (i=1; i=x; i+) t+=i; return (t);函数声明的一般形式函数声明与函数定义的格式区别:函数声明语句的( )后必须有分号,而函数定义( )后没有分号。函数声明只有一条语句,没有函数体,而函数定义有多条语句,有函数体。int max(int x,int y);int max(int ,int);例7-5 已知汽车以速度ua等速行驶的阻力功率为P,燃油消耗率为b,求汽车

18、以速度ua等速行驶百公里燃油消耗量。 百公里燃油消耗量计算公式为:例7- 5#include #define g 9.8void main() float qsf(float,float, float,float); float qresult,p, b, ua, rou; printf(p, b, ua, rou =n); scanf(%f,%f, %f,%f,%f,&p,&b, &ua, &rou); qresult =qsf(p, b, ua, rou); printf(“qresult=%dn,qresult);float qsf(float p,float b, float ua,f

19、loat rou ) float qs; qs=p*b/(1.02*ua*rou*g); return qs;/百公里燃油消耗量函数声明/实参变量定义 /实参变量赋值/百公里燃油消耗量函数调用/*百公里燃油消耗量函数定义*/函数返回值 例7-6 设计一个程序完成下面表达式的计算,其中m,n为正整数且mn.例8- 6#include int factor(int k ) int i, kfactor=1; for(i=k;i1;i-) kfactor*=i; return kfactor;void main() int m,n,result; printf(m,n= n); scanf(%d,%

20、d,&m,&n); result =factor(m)*factor(n)/factor(m-n) ; printf(result=%dn,result);/求阶乘函数定义/阶乘函数返回值/三次调用阶乘函数7.5 函数的嵌套调用和递归调用一、函数的嵌套调用main函数 调用函数 A; 函数 A 调用函数 B; 函数 B 调用调用返回返回函数定义不可嵌套void main( ) int n=3; printf (“%dn”, sub1(n);sub1(int n) int i,a=0; for (i=n; i0; i-) a+=sub2(i); return a;sub2(int n) retu

21、rn n+1;程序输出结果:9 函数调用可以嵌套7.5.2 函数的递归调用1递归的基本概念递归调用:一个函数直接或间接地调用了它本身,就称为函数的递归调用。递归函数:在函数体内调用该函数本身。int sub(int x) int y,z; if( ) z=sub(y); else return ;例如:直接调用sub函数本身2递归函数的执行过程【例7.16】编一递归函数求n!。思路:以求4的阶乘为例:4!=4*3!,3!=3*2!,2!=2*1!,1!=1,0!=1。递归结束条件:当n=1或n=0时,n!=1。递归公式:n! =1 (n=0, 1)n(n-1)! (n1)#include vo

22、id main ( ) int n, p;printf (n=?);scanf (%d, &n);p = fact (n);printf (%d!=%dn, n, p);int fact ( int n ) int r; if ( n = 1 ) r = 1; else r=n*fact(n-1); /* 递归调用 */ return (r);用递归函数求n! n! = 1 当 n = 1 时n! = n * (n-1)! 当 n 1 时void main( ) p=fact(4); fact( 4 ) r=4*fact(3); return 24 fact( 3 ) r=3*fact(2);

23、 return 6 fact(2 ) r=2*fact(1); return 2fact(1 ) r=1; return 1递归调用执行过程递 推回 推3编制递归函数的方法 数值型问题递归函数的编程方法对于数值型问题,首先要找出解题的数学公式,这个公式必须是递归定义的,且所处理的对象要有规律地递增或递减,然后确定递归结束条件。【例8.17】编一递归函数求xn 。思路:首先把xn转化成递归定义的公式xn =1 (n=0)x xn - 1 (n0)再找出递归结束条件:当n=0时,xn=1。程序如下:#include long xn(int x,int n) long f=0; if (n0) pr

24、intf(n0,data error!n); else if (n=0) f=1; else f=x*xn(x,n-1); return (f);void main( ) int n,x; long y; scanf(%d,%d,&x,&n); y=xn(x,n); printf(%ldn,y);程序运行情况如下:2,101024Hanoi(汉诺塔问题)ABC(2) 非数值型问题递归函数的编程方法#include void move(char getone, char putone) printf(移动%c针最上面一个盘到%c针n,getone,putone); void hanoi(int

25、n,char one,char two,char three) /借助two针,把one针上n个盘子移到three针上if(n=1) move(one,three); else hanoi(n-1,one,three,two); /借助three针把one上n1个盘子移到twomove(one,three); /把A上1个盘子移到Chanoi(n-1,two,one,three); /借助one针把two上n1个盘子移到three #includevoid main() int m; printf(Input the number of disks:); scanf(%d,&m); print

26、f(The steps to moving %3d disks:n,m); hanoi(m,A,B,C);7.6 数组作函数参数7.6.1 一维数组元素作函数参数(值传递)例 两个数组大小比较a和b为有6个元素的整型数组;比较两数组对应元素;变量n,m,k记录aibi, ai=bi,aik,认为数组ab; 若nk,认为数组abi元素个数 m:ai=bi元素个数 k:aibi元素个数 #include void main() int a10,b10,i,n=0,m=0,k=0; printf(Enter array a:n); for(i=0;i10;i+)scanf(%d,&ai); prin

27、tf(Enter array b:n); for(i=0;i10;i+)scanf(%d,&bi); for(i=0;iy) flag=1; else if(xy) flag=-1; else flag=0; return(flag);7.6 数组作函数参数数组名表示数组在内存中的起始地址。 例如:数组a在内存中从2000地址开始存放,则a的值为2000。2000是地址值。如实参是数组名,形参应定义为数组形式,形参数组的长度可以省略,但 不能省,否则就不是数组形式了。 【例8.12】用冒泡法将10个存放在一维数组中的整数排序。7.6.2 一维数组名作函数参数void sort(int b ,i

28、nt n); void printarr(int b ); void main( ) int a10 = 11,22,63,97,58,80,45, 32,73,36; printf(Before sort:n); printarr(a); sort(a,10); printf(After sort:n); printarr(a);void printarr(int b10) int i; for (i=0; i10; i+) printf(%5d,bi); printf(n);void sort(int b , int n) int i,j,t; for (i=1; in; i+) for

29、(j=0; jbj+1) t=bj;bj=bj+1;bj+1=t; a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 b0 b1 b2 b3 b4 b5 b6 b7 b8 b911 22 63 97 58 80 45 32 73 36(a) 排序前a0 a1 a2 a3 a4 a5 a6 a7 a8 a9b0 b1 b2 b3 b4 b5 b6 b7 b8 b911 22 32 36 45 58 63 73 80 97(b) 排序后图8.3 调用sort函数2000b形参 b 实际是一个可以存放地址的变量a:2000实参赋给形参首地址: 2000首地址: 2000#include s

30、tdio.hvoid main( ) void scat(char str1 ,char str2 ); char s150,s250; int i,k;printf(Input s1:);gets(s1);printf(Input s2:);gets(s2);scat(s1,s2);printf(Output s1:%sn,s1);printf(Output s2:%sn,s2);void scat(char str1 , char str2 ) int i=0,k=0; while (str1i!=0) i+; while (str2k!=0) str1i=str2k; i+; k+; s

31、tr1i=0;以二维数组为例。二维数组名作实参时,对应的形参也应该定义为一个二维数组形式。对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明。a=1 2 3 4 5 6 7 89 10 11 121 5 92 6 103 7 114 8 12b=思路:将a00b00,a01 b10,a02b20,a10b01,aijbji,。8.6.2 多维数组作函数参数【例8.14】编程序,将矩阵转置。设转置前为a矩阵,转置后为b矩阵,如下所示: #include void turn(int arra 4,int arrb 3) ;void main( ) int a34=1,2,3,4,5,

32、6,7,8,9,10,11,12; int i,j,b43; turn(a,b); printf(array b:n); for (i=0; i4;i+) for (j=0; j3;j+) printf(%5d,bij); printf(n); /* 矩阵转置函数*/void turn(int arra 4,int arrb 3) int r, c; for (r=0; r3;r+) for (c=0; c4;c+) arrbcr=arrarc;7.7 局部变量和全局变量1. 变量的作用域2. 局部变量及其作用域变量的作用域:变量在程序中可以被使用的范围。根据变量的作用域可以将变量分为局部变量

33、和全局变量。局部变量(内部变量):在函数内或复合语句内定义的变量以及函数的形参。作用域:函数内或复合语句内【例7.19】分析下面程序的运行结果及变量的作用域。#includevoid sub(int a,int b) int c; a=a+b; b=b+a; c=b-a; printf(sub:ta=%d b= %d c= %dn,a,b,c);void main( ) int a=1,b=1,c=1; printf(main:ta=%d b= %d c= %dn,a,b,c); sub(a,b); printf(main:ta=%d b= %d c= %dn,a,b,c); int a=2,

34、b=2; printf(comp:ta=%d b= %d c= %dn,a,b,c); printf(main:ta=%d b= %d c= %dn,a,b,c); main函数局部变量复合语句局部变量sub函数局部变量程序输出结果:main: a=1 b= 1 c= 1 sub: a=2 b= 3 c= 1main: a=1 b= 1 c= 1comp: a=2 b= 2 c= 1main: a=1 b= 1 c= 1全局变量(外部变量):在函数外部定义的变量。作用域:从定义变量的位置开始到本源文件结束。如在其作用域内的函数或分程序中定义了同名局部变量,则在局部变量的作用域内,同名全局变量暂

35、时不起作用。【例7.20】全局变量和局部变量的作用域。3 全局变量及其作用域#includeint a= 5;void f(int x, int y) int b,c; b=a+x; c=a-y; printf(%d %d %dn,a,b,c);全局变量f函数局部变量void main( ) int b=6,c=7; f(b,c); printf(%d %d %dn,a,b,c); int a=9,b=8; printf(%d %d %dn,a,b,c); c=10; printf(%d %d %dn, a,b,c); printf(%d %d %dn,a,b,c); printf(%d %d

36、 %dn,a,b,c); main函数局部变量复合语句局部变量程序输出结果: 5 11 -2 5 6 7 9 8 7 9 8 10 9 8 10 5 6 107.8 变量的存储类别局部变量和全局变量是从变量的作用域(空间)来划分的。从变量存在的时间(即生存期)来分,又可以分为静态存储方式和动态存储方式。静态存储方式:程序运行期间分配固定存储空间;动态存储方式:程序运行期间根据需要动态分配存储空间。变量的属性数据类型:决定为变量分配内存单元的长度,数据的存放形式,数的范围。存储类别:决定了变量的生存期,给它分配在哪个存储区。变量定义语句的完整形式:存储类别 数据类型 变量名1, , 变量名n ;

37、auto(自动的) register(寄存器的)static(静态的) extern(外部的) 内存用户区程序区静态存储区动态存储区全局变量、局部静态变量形参变量局部动态变量(auto register)函数调用返回地址等1自动变量(auto类别) 局部变量可以定义为自动变量。main()int x,y; main()auto int x,y; 自动变量等价可省 内存分配调用函数或执行分程序时在动态存储区为其分配存储单元,函数或分程序执行结束,所占内存空间即刻释放。 变量的初值定义变量时若没赋初值,变量的初值不确定;如果赋初值则每次函数被调用时执行一次赋值操作。 生存期 在函数或分程序执行期间

38、。 作用域自动变量所在的函数内或分程序内。自动变量例8- 2#include int max(int x,int y) int z; z = x y ? x : y; return( z );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);int a=5;void main( ) int b=6,c=7;printf(%d %d %dn,a,b,c); int a=9,b=8; printf(%d %d %dn,a,b,c); c=10; printf(%d %d %dn,

39、 a,b,c); printf(%d %d %dn,a,b,c); printf(%d %d %dn,a,b,c); 2静态变量(static类别)除形参外,局部变量和全局变量都可以定义为静态变量。静态局部变量(或称静态内部变量)静态全局变量(或称静态外部变量)静态变量静态变量static int a; void main( ) float x,y; f( ) static int b=1; 静态全局变量静态局部变量自动变量不能省 内存分配编译时,将其分配在内存的静态存储区中,程序运行结束释放该单元。 静态变量的初值若定义时未赋初值,在编译时,系统自动赋初值为0;若定义时赋初值,则仅在编译时赋

40、初值一次,程序运行后不再给变量赋初值。 生存期整个程序的执行期间。 作用域静态局部变量的作用域是它所在的函数或分程序。静态全局变量的作用域是从定义处开始到本源文件结束。静态变量static int a; int f( ) static int b=1; void main( ) float x,y; static int b=1; static c=10; int c;static int a; void main( ) float x,y; char s;f( ) static int b=1; 3.外部变量(extern类别)在函数外定义的变量若没有用 static说明,则是外部变量。外部

41、变量只能隐式定义。静态外部变量自动变量局部静态变量外部变量 内存分配编译时,将其分配在静态存储区,程序运行结束释放该单元。 变量的初值若定义变量时未赋初值,在编译时,系统自动赋初值为0。 生存期整个程序的执行期间。 作用域从定义处开始到本源文件结束。外部变量int c;static int a; void main( ) float x,y; char s;f( ) static int b=1; #includestdio.hint p=1,q=5;int f1(int a)extern char c1,c2; c1=a; c2=2*a; return a*a;char c1,c2;void

42、 main()int a;a=f1(10);printf(a,c1,c2=%d,%d,%dn,a,c1,c2);定义外部变量声明外部变量定义外部变量外部变量的声明思考:在f1函数中声明c1,c2的作用是什么?如何修改使所有函数可以使用外部变量而不需要声明。用extern进行声明,以使其作用域扩大外部变量声明的一般格式extern 数据类型 变量名1,变量名n;或 extern 变量名1,变量名n;注意:外部变量声明用关键字extern,而外部变量的定义不能用extern,只能隐式定义。定义外部变量时,系统要给变量分配存储空间,而外部变量声明时,系统不分配存储空间,只是让编译系统知道该变量是一个

43、有定义的外部变量,与函数声明的作用类似。#includestdio.hint p=1,q=5;int f1(int a)extern char c1,c2; c1=a; c2=2*a; return a*a;char c1,c2;void main()int a;a=f1(10);/ file1.cpp文件程序如下:#includeint i;void main() void f1(),f2(),f3(); i=1; f1(); printf(tmain:i=%d,i); f2(); printf(tmain:i=%d,i); f3(); printf(tmain:i=%dn,i);void

44、f1() i+; printf(nf1:i=%d,i);定义外部变量/file2.cpp 文件程序如下:#includeextern int i;void f2()int i=3;printf(nf2:i=%d,i);void f3()i=3;printf(nf3:i=%d,i);声明外部变量4.寄存器变量(register类别)只有函数内定义的变量或形参可以定义为寄存器变量。寄存器变量的值保存在CPU的寄存器中。受寄存器长度的限制,寄存器变量只能是char、int和指针类型的变量。【例8.26】寄存器变量的使用。void main( ) long int sum=0; register int i; for (i=1; i=1000; i+) sum+=i; printf(sum=%ldn,sum);程序输出结果:sum=500500变量存储类型静态

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论