new%20chapter%206

上传人:biao****biao 文档编号:243077506 上传时间:2024-09-15 格式:PPT 页数:55 大小:507.50KB
返回 下载 相关 举报
new%20chapter%206_第1页
第1页 / 共55页
new%20chapter%206_第2页
第2页 / 共55页
new%20chapter%206_第3页
第3页 / 共55页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第六章 函 数,1.,掌握函数的定义与调用,2.,掌握函数间数据传递的方法,3.,理解函数的嵌套与递归调用,4.,熟练掌握指针函数的概念和调用,5.,了解函数指针的概念和调用,6.,了解,main,函数与命令行参数,7.,熟练掌握变量的存储类型、作用域和存在性,8.,了解内部函数和外部函数,9.,理解宏、文件包含等编译预处理,重点,难点,1.,理解函数的概念和使用,2.,熟练掌握函数间的数据传递,3.,熟练掌握变量的存储类型、作用域和存在性,6. 1,模块化程序设计,一、基本思想:将一个大的程序按功能分割成一些小模块,二、特点:,a.,各模块相对独立、功能单一、结构清晰、接口简单、容易理解,b.,控制了程序设计的复杂性:每个模块可以独立设计算法,单独编写和测试,c.,提高元件的可靠性:一个模块中的错误不易扩散和蔓延到其它模块,d.,缩短开发周期:可同时进行集体性开发,e.,避免程序开发的重复劳动,f.,易于维护和功能扩充,三、开发方法,:,自上向下,逐步分解,分而治之,一个,C,程序,总,由一个,main,函数和若干个子函数构成;,C程序执行总是从main函数开始,调用其他,子,函数后回到main函数,在main函数中结束整个程序的运行。,子,函数不能嵌套定义,可以,互相,调用,。但不能调用,main,函数。,一个,C,程序由一个或多个源文件组成;,一个源文件由一个或多个函数组成,它是一个独立编译单元。,函数分类,从用户角度,用户自定义函数,标准函数(库函数):由系统提供,从函数形式,无参函数,void,main(void,),有参函数,int,max(int,a,int,b),无参数传递,有参数传递,使用,库函数,应注意:,1,、函数功能、类别,2,、函数参数的数目和顺序,及各参数意义和类型,3,、函数返回值意义和类型,4,、需要使用的包含文件,形参列表,函数体,type,functionname,(,type,var,),说明部分,语句部分,一,.,定义:,(现代风格),有参函数(现代风格),int,max,(int,x,int,y,),int,z;,z=xy?x:y;,return(z);,无参函数,(现代风格),void,printstar(,void,),printf,(“*n”);,6.,2,函数的,定义、说明与调用,合法标识符,【,例,6-1】,用,IsPrime,函数判断一个数是否为素数。,/ Program: EG06-01.c,/ Description:,判断一个数是否为素数。,int,IsPrime,(,int,Num ),int,j, k=Num/2;,for(j,=2; jk; j+),if(!(Num%j,) return 0;,return 1;,函数类型,:,存储类型数据类型,存储类型:,extern(,缺省,),、,static,数据类型:函数返回值类型,缺省,int,型,无返回值,void,形参不得重名或重复说明,彼此之间用,分隔,形参类型应与实参类型一致,个数相同,二,.,函数说明:,type,functionname,(, type ,var,),;,告诉编译系统函数类型、参数个数及类型,以便检验,说明:,1.,库函数通过,#include ,形式说明;,2. UDF,用户自定义函数在调用前必须说明,除非,a.,函数返回值是,int,/char/void,型,(,系统自动按,int,型处理,),b.,被调用函数定义出现在调用函数之前,c.,已在程序开始,/,函数外部,/,调用之前加以说明。,#include ,void main(),float,add(float,float,);,/*function declaration*/,float a,b,c;,scanf(%f,%f,&a,&b,);,c=add(a,b);,printf(sum,is %f,c);,float add(float x, float y),float z;,z=x+y;,return(z);,三,.,函数定义和函数说明的比较,1.,函数定义是一个完整的、独立的函数单位,2.,函数说明仅包含函数类型、参数个数及类型,不包含函数体,四,.,选用函数的原则,1.,简化,main,函数,增加它的可读性;,2.,程序中存在若干相同或变量不同但算法、语句排列相同的语句组;,3.,程序中需要选择、跳转时;,4.,程序较长,不易分析、调试时。,五,.,函数调用,函数名,(,实参表列,);,说明:,1.,实参与形参个数相等,类型一致,按顺序一一对应,2.,实参必须有确定值,一般按自右向左顺序求值。,调用方式小结,:,1.,语句调用:,printf(“Hello,World!n,”);,2.,表达式调用:,m=,max(a,b,)*2;,3.,参数调用:,m=,max(a,max(b,c,);,形式参数:,定义函数时函数名后括弧中的变量名,简称,形参,实际参数:,调用函数时函数名后括弧中的表达式,简称,实参,void main( ),int,a,b,c;,scanf,(“%d,%d,c=max(a,b);,printf(“Max,is %d”,c);,int,max(,int,x,int,y),int,z;,z=xy? x:y;,return(z);,形参通知系统要预留内存,实参在运行时把值传给形参,把函数的结果返回给调用者,形参在函数被调用前不占内存,函数调用时为形参分配内存;调用结束,内存释放,;,形参是函数的内部变量,只在函数内部才有意义;,对每个形参必须指明其名字和数据类型;,实参可以是常量、变量或表达式,并且必须,有确定的值;,实参个数、类型必须与对应的形参一致;若形参与实参类型不一致,自动按形参类型转换,;,实参对形参的数据传递是值传递,即单向传递,,只由实参传递给形参,反之不可。调用结束后,,只有形参单元被释放,实参单元中的值不变。,关于形参、实参的说明,:,6. 3,函数间的数据传递,一,.,形实结合值传递(赋值调用),方式:函数调用时,为形参分配内存,将实参的值复制到形参中;调用结束,形参被释放,实参维持不变,特点:单向传递,形参与实参占用不同的内存,形参的变化不影响实参,#include ,void swap(,int,a,int,b),int,tmp,;,tmp,=a;,a=b;,b=,tmp,;,void main( void ),int,a=15, b=5;,if(a,b),swap(a,b,);,printf(%d, %,dn, a, b );,/* The answer is:15, 5*/,二,.,地址传递(引用调用),方式:函数调用时,将数据的存储地址作为实参复制给形参,特点: “双向”传递,实参和形参必须是地址常量或变量,均指向同一个的存储单元,,数据可同步更新,#include ,void swap(,int,*a,int,*b),int,tmp,;,tmp,=*a;,*a=*b;,*b=,tmp,;,void main( void ),int,a=15, b=5;,if(a,b),swap(&a,&b,);,printf(%d, %,dn, a, b );,/* The answer is:5, 15*/,数组元素作函数实参,值传递,数组名作函数参数,地址传递,形参与实参均为地址常量或地址变量,类型应一致,形参数组的,size1,可缺省,由实参指定(动态数组),void,sort(int,a,int,n) ,int,a10;,sort(a,10);,void,sort(int,*,a,int,n) ,void,sort(int,a,int,n),程序演示,eg06-05.c eg06-06.c,实参用数组名,形参用数组定义,【,例,6-5】,设计一个能求指定字符串长度的函数,strlen,。,/ Program: EG06-05.c,/ Description: return length of a string,#include ,int,strlen,( char,str, ),int,i=-1;,while(,str+i, );,return i;,void main( void ),char *,Str,=This is a test;,printf(The,length of %s is %,d.n,Str,strlen(Str,);,【,例,6-5】,设计一个能求指定字符串长度的函数,strlen,。,/ Program: EG06-05.c,/ Description: return length of a string,#include ,int,strlen,( char *,str,),int,i=0;,while( *(,str+i,) ) i+;,return i;,void main( void ),char,Str,=This is a test;,printf(The,length of %s is %,d.n,Str,strlen(Str,);,【,例,6-6】,通过函数输入,10,个整数,然后利用冒泡法从小到大排序,最后输出排序结果。,#include ,void Input(,int,a10,int,n),int,i;,printf(Input,%d,int,: , n);,for( i=0; in; i+ ),scanf(%d,a+i,);,void Sort(,int,a,int,n),int,i, j,tmp,;,for( i=0; in-1; i+ ),for( j=0; jaj+1 ),tmp,=,aj,aj,=aj+1, aj+1=,tmp,;,void Print(,int,*a,int,n),int,i;,printf(The,sorted number is : );,for( i=0; in; i+ ),printf,( %d ,ai, );,printf(n,);,void main( void ),int,a10, SIZE=10;,Input(a,SIZE,);,Sort(a,SIZE,);,Print(a,SIZE,);,三,.,函数的返回值,形式:,return(,表达式,),;,return,表达式,;,功能:从被调用函数返回调用函数,同时把返值带给调用函数,说明:,1.,函数中可有多个,return,语句,但只能返回一个值,2.,若函数与,return,表达式的类型不一致,按前者为准自动转换,3. void,型函数无,return,语句,遇,时自动返回调用函数,/ Program: EG06-07.c,/ Description:,试写一函数实现两个字符串的比较。,#include ,int,strcmp(char,*s1,char *s2),while(*s1&*s2&*s1=*s2),s1+,s2+;,return *s1-*s2;,void main( void ),char s180,s280;,gets(s1);,gets(s2);,printf(strcmp(s1,s2)=%,dn,strcmp(s1,s2);,/ Program: EG06-09.c,/ Description: bubble sort,#include ,#define SIZE 11,int,aSIZE,= 0, 2, 9, 6, 8, 7, 4, 5, 3, 1, 0 ;,void sort( void ),int,i, j,tmp,;,for( i=1; iSIZE; i+ ),for( j=1; jaj+1),tmp,=,aj,aj,=aj+1, aj+1=,tmp,;,void main( void ),四,.,外部变量,功能:一经说明,可在随后的所有函数中引用。,说明:一般不建议使用,int,i;,printf(Normal,numbers: );,for( i=1; iSIZE; i+ ),printf,( %d ,ai, );,printf(n,);,sort();,printf(Sorted,numbers: );,for( i=1; iSIZE; i+ ),printf,( %d ,ai, );,printf(n,);,嵌套调用,C,规定:函数定义不可嵌套,但可以嵌套调用函数,6.4,函数的嵌套与递归调用,/ Program: EG06-10.c,/ Description:,输入,2,个字符串,将二者连接后输出结果。,#include ,int,strlen,( char,str, ),int,i=-1;,while(,str+i, );,return i;,char *,StrCat,( char *ptr1, char *ptr2 ),int,len,=strlen(ptr1);,ptr1+=,len,;,len,+=strlen(ptr2);,while(*ptr1=*ptr2),ptr1+, ptr2+;,return ptr1-len;,void main( void ),char str120, str220;,printf,(,请输入,2,个字符串,:n);,gets(str1);,gets(str2);,printf,(,合并字符串为,%,sn, StrCat(str1,str2);,int,factorial(int,n),if(n,0),printf(n,0,input error);,return -1;,if(n,=0|n=1),return 1;,return factorial(n-1)*n;,二,.,递归调用,a.,定义:函数直接或间,接的调用了自身,b.,优点:程序清晰、简洁,可读性强,代码紧凑,c.,缺点:速度 慢、占用内存大,必须收敛,每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等,所以递归次数过多,可能引起堆栈溢出,Hanoi,塔,A,B,C,/ Program: EG06-13.c,/ Description:,递归法求解,Hanoi,塔问题,#include ,void,move(int,num, char,one,char,two,char,three),if(num,=1),printf(%c,-%,cn, one, three);,else,move( num-1, one, three, two);,printf(%c,-%,cn, one, three);,move( num-1, two, one, three);,void main( void ),int,Num=4;,printf(Step,to moving %d,diskes:n, Num);,move(Num,A,B,C,);,指针函数,语法:类型名 *函数名(形参列表),返回值:返回某一数据的存储地址,存储类型:,extern,、,static,数据类型:对应数据的数据类型,两者类型必须一致,注:调用函数不能使用地址常量接受指针函数返回值,指针函数不能返回局部寿命的数据地址,6.5,指针函数与函数指针,/ Program: EG06-15.c,/ Description:,用指针函数将指定的十进制数转换为十六进制,#include ,#include ,void reverser( char *s, char *t ),char c;,if(s,t),c=*s, *s=*t, *t=c,reverser(+s,-t,);,void reverse( char *s ),reverser( s, s+strlen(s)-1 );,char *,itoh(unsigned,n),int,h,i,=0;,char s10;,do,h=n%16;,si,+=(h=9)?h+0:h-10+a;,while(n,/=16);,reverse(s,);,return s;,void main( void ),printf(Hex(%d,)=%,sn,18, itoh(18);,函数指针:指向函数的指针,语法:,type (*,FuctionPointerName,)();,stdlib.h,:,void,qsort(void,*base,size_t,nmem,size_t,size,int,(*,comp)(const,void *, const void *);,/ Program: EG06-016.C,#include ,#include ,#define SIZE 8,int,comp( void *, void *);,void main( void ),int,i;,int,array = 5, 6, 8, 2, 9, 1, 3, 0;,qsort(array, SIZE,sizeof(int,), comp);,for (i = 0; i SIZE; i +),printf(%3d,arrayi,);,printf(b,n);,int,comp( void *p, void *q),return (*(,int,*)p - *(,int,*)q);,/ Program: EG06-17.C,/ Description:,显示命令行中输入的参数。,#include ,void main(,int,argc, char *,argv, ),short i=0;,while(i,%,sn, i,argvi,);,i+;,getchar,();,6.6 main,函数与命令行参数,6.7,局部变量和全局变量,一,.,局部变量,/,内部变量,定义:在函数内定义,只在本函数内有效,说明:,1.,局部变量的存储类型:,auto,(默认),register static,2.,不同函数中同名局部变量,占不同内存单元,互不干扰,3.,形参属于局部变量,4.,复合语句中也可定义局部变量,其作用域只在,复合语句范围内,复合语句,局部同名,二,.,全局变量,/,外部变量,定义:在函数外定义,有效范围从定义变量的位置开始到本文件结束,及有,extern,说明的其它源文件,说明:,1.,全局变量的存储类型:,extern,(默认),static,2.,若外部变量与局部变量同名,,则在局部变量的作用范围内,,外部变量被屏蔽,定义,说明,次数: 只能,1,次 可说明多次,位置: 所有函数之外 函数内或函数外,分配内存: 分配内存,可初始化 不分配内存,不可初始化,3.,外部变量定义与外部变量说明不同,应尽量少使用全局变量,因为:,全局变量在程序全部执行过程中占用存储单元,降低了函数的通用性、可靠性,可移植性,降低程序清晰性,容易出错,外部局部同名,6.8,变量的存储类型和作用域,一,.,若干概念:,1.,作用域:变量的使用范围(由存储区域和说明的位置决定),2.,可见性:变量可被作用域内语句调用的属性,3.,存在性:变量所分配存储空间的可使用属性,4.,存储类型:,auto-,自动型,register-,寄存器型,static-,静态型,extern -,外部型,5.,静态存储:程序运行期间分配固定存储空间,6.,动态存储:程序运行期间根据需要动态分配存储空间,7.,用户内存:,作用、可见,存在,二,. auto,自动型,/,堆栈型变量,(1)存储在堆栈区/动态存储区。,(2)auto型变量在函数体内说明或缺省说明;形参缺省说明。,(3)值的暂时性:进入函数时分配堆栈空间,退出函数后,空间自动释放,变量不再存在,不得继续访问。,(4)auto型变量未初始化时,其值无意义,必须先赋初值再引用。,(5)作用域局部性,仅限于定义它的模块。,(6)可见性与存在性基本一致,但具有一定的独立性(在重名变量的作用域上不可见)。,void main( void ),int,x;,float x=2.5;,char x=c;,printf(1st x=%,cn,x,);,printf(2nd x=%,fn,x,);,printf(3th x=%,dn,x,);,三,.,register,寄存器,型变量,1. register,型变量直接将数值存储在,CPU,的通用寄存器中,程序运行时无需读写内存即可使用,高效、便捷。,2. register,型变量只能在函数体内说明、使用;,3.,值的暂时性:,register,型变量进入函数时临时分配寄存器,退出函数后,寄存器自动释放,变量不再存在,不得继续访问。,4.,变量未初始化时,其值无意义。必须先赋值再使用,!,5.,一些系统的通用寄存器字长有限,,register,型变量不能为,double, float,型。,6.,由于,CPU,中的通用寄存器个数有限,,register,型变量数目太多会自动转为,auto,型。,7.,优化的编译系统自动将使用频繁的变量放在寄存器中,不再需要程序员指定谁是,register,型变量。,四,.,static,静态,型变量,1.,静态,型变量存储在,静态,存储区,2.,静态,型变量定义在函数内部时,局部静态变量,作用域仅限于函数内部;静态型变量定义在函数外部时,外部静态变量,作用域限于本源程序文件,(,寿命全局,),;,3.,值的永久性:一经说明分配存储空间就一直占用该空间直到程序运行结束;,4.,变量未初始化时自动赋,0,值,!,4.,可见性与存在性不一致;,5.,编译时赋初值(仅一次:每次调用时不再赋初值,保留上次调用结束时的值!),/ Program: EG06-20.C,/ Description:,打印,1,10,的阶乘数值。,#include ,int,fac(int,n),static,int,f=1;,return f*=n;,void main( void ),int,i;,for(i,=1;iy?x:y;,return(z);,/extern int a,b;,void main(void), extern int a,b;,printf(max=%d,max(a,b);,int a=13,b=-8; /extern,可省略,运行结果:,max=13,也可写成,extern,a,b,;,综合举例,EG07-6.c : Print a calander.,静态,动态,存储方式,程序整个运行期间,函数调用开始至结束,生存期,编译时赋初值,只赋一次,每次函数调用时,赋初值,自动赋初值,0,或空字符,不确定,未赋初值,静态存储区,动态区,存储区,寄存器,局部变量,外部变量,作用域,定义变量的函数或复合语句内,本文件,其它文件,局部变量默认为,auto,型,、,具有局部寿命、局部可见性,register,型变量个数受限,且不能为,long, double, float,型,局部,static,变量具有全局寿命、局部可见性、可继承性,extern,不是变量定义,可扩展外部,变量作用域,register,局部,static,auto,外部,static,外部,存储类别,变量的寿命与可见性小结,6,.,9,编译预处理语句:,C,编译系统在对程序进行编译之前要先对程序中一些特殊命令进行“预处理”,然后将预处理的结果和源程序一起再进行通常的编译处理生成目标代码。,一,.,预处理功能,1.,宏定义,:,#define,2.,文件包含,:,#include,3.,条件编译:,#if-#else-#,endif,二,.,书写格式:,以,“,#,”,打头,一般位于文件开始某行行首;,一条预处理语句单独占一行;,语句不以,“,;,”,结尾。,三,.,作用:,便于程序调试、移植,提高程序算法效率,6,.,9.1,文件包含,功能:一个源文件可将另外一个源文件的内容全部包含进来。,处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译,语法:,#include “,文件名”,#include ,或,#include “file2.c”,file1.c,file2.c,file1.c,file2.c,A,B,A,一,.,包含文件的查找方法:,#include “,文件名”,先在当前目录中查找,若找不到再到标准目录中查找。,#include ,直接到标准目录,(,Microsoft Visual Studio,VC98include),中查找,被包含文件内容,源文件,(*.c),头文件,(*.h),宏定义,数据结构定义,函数说明等,#include “file2.c”,file1.c,A,file3.c,C,#include “file3.c”,file2.c,B,file1.c,A,file3.c,file2.c,6,.,9.,2,宏定义,字符替换,一、不带参数的宏定义,作用:用指定标识符(宏名)代表程序中的字符串(宏内容),宏替换,(,宏展开,),:预编译时,用宏内容替换宏名,-,不作语法检查,注:,1.,引号中的宏名不予置换,2.,宏定义常引用括号()以保证替换的正确进行,3.,宏名习惯上大写,并,可引用已定义的宏名,宏名,宏内容,无;,#define,标识符 字符串,#define PI 3.1415926,#define R 3+2,void,main(void),printf(“PI,*R*R=%,fn”,PI,*R*R);,宏展开:,printf(“PI,*R*R=%,fn,”,3.1415926*3+2*,3+2,);,*(3+2)*(3+2),R (3+2),注意替换时不求值,只是字符串的原样替换,二、带参数的宏定义,#define,宏名,(,形参列表,),字符串,宏展开:形参用实参换,其它字符保留,说明:宏体及各形参外一般应加括号(),不能加空格,#,define SQUARE (x) x*x,#include stdio.h ,void,main(),int,a=2, b=3, c;,c=SQUARE(a+b)/SQUARE (,a+1);,printf(nc,=%d ,c);,c=,a+b,*a+b/a+1*a+1,;,c=(a+b)*(a+b)/(a+1)*(a+1);,(x)*(x),c=(a+b)*(a+b)/(a+1)*(a+1);,(x)*(x),带参宏,函数,处理过程,不分配内存,简单的字符置换,分配内存,值传递,返回值,先求实参值,再代入形参,处理时间,编译时,程序运行时,参数类型,无类型问题,定义实参,形参类型,程序长度,变长,不变,运行速度,不占运行时间,调用和返回占时间,三、带参数的宏替换与函数的主要区别,#define MAX(x,y) (x)(y)?(x):(y),.,main(),int,a,b,c,d,t;,.,t=MAX(a+b,c+d);,宏展开:,t=(a+b)(c+d)?(a+b):(c+d);,int,max(int,x,int,y), return(xy?x:y);,main(),int,a,b,c,d,t;,.,t=max(a+b,c+d);,例 用宏定义和函数实现同样的功能,6,.,9.3,条件编译,条件编译:根据条件选择被编译的源程序行。,一、使用宏定义的标识符作为编译条件,#,ifdef,标识符,程序段,1,# else,程序段,2,#,endif,形式一:,作用:当所指定的标识符已经被,#define,命令定义过,则在程序编译阶段只编译程序段,1,,,否则编译程序段,2,。,#,ifndef,标识符,程序段,1,# else,程序段,2,#,endif,形式二:,作用:当所指定的标识符未被,#define,命令定义过,则在程序编译阶段只编译程序段,1,,否则编译程序段,2,。,例,1,:,#ifndef,TURBO,#define,int,int,#else,#define,int,short,#,endif,可用于实现程序在不同环境下的兼容性。,例,2,:,#,ifdef,DEBUG,printf(“x,=%,d,y,=%,dn”,x,y,);,#,endif,可用于进行程序的调试。,调试过程中,在程序前面加,#define DEBUG,调试完成后,将前面的,#define DEBUG,删除掉,二、使用常量表达式的值作为编译条件,# if,表达式,程序段,1,# else,程序段,2,#,endif,形式:,作用:当所指定的表达式为真(非零)时就编译程序段,1,,否则编译程序段,2,。,可以事先给定一定条件,使程序在不同的条件下执行不同的功能。,习题,:,必做题,:3,、,4,、,5.3,、,5.4,、,5.7,、,5.9,、,5.10,选做题,:1,、,2,、,5.6,、,5.8,#include stdio.h,void main(void),int a;,a=6;,int a;,a=9;,printf(%dn,a);,printf(%dn,a);,返回,#include stdio.h,int f1(int x),int a=8;,a=x*3+a;,return a;,void main(void),int a=5,y=7;,a=f1(y);,printf(%dn,a);,#include stdio.h,int a =10,b=20;,void f1(int x),a=x*3+a;,b=b*x;,void main(void),int y=7;,f1(y);,printf(%d,%dn,a,b);,返回,#include stdio.h,int a =10;,int f1(int x),int a=8;,a=x*3+a;,return a;,void main(void),int a=5,y=7;,a=f1(y);,printf(%dn,a);,#include stdio.h,void main(void),int a;,a=6;,int a;,a=9;,printf(%dn,a);,printf(%dn,a);,返回,#include stdio.h,int f1(int x),int a=8;,a=x*3+a;,return a;,void main(void),int a=5,y=7;,a=f1(y);,printf(%dn,a);,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


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

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


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