C语言指针练习题解析

上传人:痛*** 文档编号:120589956 上传时间:2022-07-17 格式:DOC 页数:30 大小:94.51KB
收藏 版权申诉 举报 下载
C语言指针练习题解析_第1页
第1页 / 共30页
C语言指针练习题解析_第2页
第2页 / 共30页
C语言指针练习题解析_第3页
第3页 / 共30页
资源描述:

《C语言指针练习题解析》由会员分享,可在线阅读,更多相关《C语言指针练习题解析(30页珍藏版)》请在装配图网上搜索。

1、C语言指针练习题解析一、知识点1 掌握指针、地址、指针类型、空指针(NULL)等概念;2 掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算、指针变量比较运算和指针表达式;3 掌握指针与数组、函数、字符串等的联系;4 掌握动态空间操作(new,delete);5 掌握引用参数的使用。二、例题分析与解答例题1:若有以下定义,则说法错误的是( )。 int a=100,*p=&a ;A声明变量p,其中*表示p是一个指针变量B变量p经初始化,获得变量a的地址C变量p只可以指向一个整形变量D变量p的值为100答案:D分析:有指针变量定义可知A、C说法是正确的,故不能选。在语句中&p=a,表示指

2、针变量取得变量a地址,B说法也正确,也不能选择。D中不能说变量p的值为100,应该*p的值为100,所以选择D。例题2:若有以下定义,则赋值正确的是( )。int a ,b , *p;float c, *q;Ap=&c Bq=p Cp=NULL Dq=new int答案:C分析:指针变量使用规定,不同类型的指针变量不能赋值,也不能取得普通变量地址,故A、B不正确,不能选择。因为q是float类型指针变量,不能申请int 类型地址,D不正确,也不能选择。因为任何类型的指针变量都能取得NULL指针,所以C正确。例题3:如果x是整型变量,则合法的形式是( )。A(x+5)B*xC&*xD*&x答案:

3、D分析:因为C+语言表达式没有地址,A不正确。C+语言普通变量不能用*运算,因此B和C也不正确。&x表示变量x的地址,*&x是x 地址的值,所以D正确。例题4:若要建立如下关系,错误的语句组是( )。span style=mso-ignore:vglayout; ;z-index:1;left:0px;margin-left:144px;margin-top:1px; width:256px;height:38px A B C D int *p=&x, x; int x, p=&x; int *p, x=10; int *p, x; *p=10; *p=10; *p=&x; p=&x ; x=

4、10;答案:A分析:在变量类型说明语句中 *表示变量是指针变量,在其他语句中,*称为指针运算,用于访问指针所指向的对象的值,&称为取地址运算,用来得到一个对象的地址。故B、C、D都是正确的,不能选择。A中指针变量p取不到x地址,因为x还没有定义,所以选择A。例题5:若有语句int a10=0,1,2,3,4,5,6,7,8,9,*p=a;则( )不是对a数组元素的正确引用(其中0i10)。ApiB*(*(a+i)Cap-aD*(&ai)答案:B分析:指针就变量p取得数组a的首地址,由指针与数组关系知,pi表示数组元素第i+1元素值,pi=ai正确,故A不能选。*(a+i)表示一维数组a第i+1

5、元素值,*(*(a+i)表示对第i+1元素值再取值是错误操作,所以选B。ap-a=a0正确,故不能选择C。*(&ai)也正确(见上题),也不能选D。例题6:写出下列程序运行结果是( )。 #include void main() char ch34=“AAA”,”BB”,”CCC”,(*q)4=ch, *p; / ch是二维数组, q是指向一维数组指针,并且一维数组每行只有4个字符/q并取得二维数组ch首地址int i; p=new char; /申请地址*p=b; /装入字符b*(*q+3)=*p; for(i=0;i3;i+) coutQIENDL;A B C D AAAbBB AAAb

6、AAA AAA BB BB bBB BB CCC CCC CCC CCC答案:A分析:二维字符数组初始化后值如下表: 执行语句*(*q+3)=*p后二维字符数组值:在输出语句中q0输出是AAAbBB,q1输出是BB,q2输出CCC,只能选择A。例题7:写出下列程序运行结果:#includevoid main()int *pn, n=10,m=20; float *pf, px=3.14159,py=2.71828; pn=&n; *pn+=m; cout”n 现在的值是: ”*pnENDL; pf=&px; py+=5*(*pf); cout”py现在的值是:”PYENDL;运行结果是: n

7、现在的值是: 30pf 现在的值是:18.4262分析:指针是通过在变量前加一个“*”来定义,使用用“*”加变量名存取指针所指的值,用运算“&”取变量的地址,但是不能存取无指向的指针所指向内容,这样会导致系统故障。例题8:写出下列程序运行结果:#includevoid main()int I,*p,a=10,20,30,40,50,60; p=a; for(I=0;I5;I+) cout”a“IAIT”*(A+”I*(A+I)t”*(p+”I*(P+I)T”P“IPIENDL;运行结果:a0=10 *(a+0)=10 *(p+0)=10 p0=10 a1=20 *(a+1)=20 *(p+1)

8、=20 p1=20 a2=30 *(a+2)=30 *(p+2)=30 p2=30 a3=40 *(a+3)=40 *(p+3)=40 p3=40 a4=50 *(a+4)=50 *(p+4)=50 p4=50 a5=60 *(a+5)=60 *(p+5)=60 p5=60 分析:分析程序根据指针与数组关系,引用数据可以有四种不同的表示方法:使用数组下标变量;使用数据固有的指针数组名间接引用;使用指向数组的指针的间接引用;使用指向数组的指针下标引用。例题9:指出下列程序运行结果:#includeint b44=10,11,12,13,14,15,16,17,18,19,20,21,22,23,

9、24,25;void main()int (*a)4,*p; a=b; /指针变量a,取得二维数组第一行地址p=a1; /指针变量p,取得二维数组第二行第一列地址 for( int I=1;I=4;p=p+1,I+) /A行 cout*pt;coutENDL;for( I=0;I=3;I+) /B行 cout*(*a+1)t; a+; /C行coutENDL;运行结果是:14 15 16 1711 15 19 23分析:根据题意,指针变量p取得二维数组第二行第一列地址,进行循环语句后,每循环一次,指针变量下移一个元素,A行循环输出是14,15,16,17。指向一维数组指针a,取得二维数组第一行

10、地址,由指向一维数组指针定义,*a+1表示该行第一列元素地址,*(*a+1)表示该地址的值,所以B行输出是11,15,19,23。例题10:写出下列程序运行结果:#includevoid fun(int *& a, int &m) a=new intm; /A int * p=a; for(int i=0;iM;I+) *p+=i*i+1; void main() int *b,n=5; fun(b,n); for(int i=0;iN;I+) coutBI SPAN ?; coutENDL; deleteb; /B运行结果是:1 2 5 10 17分析:指针变量在函数main中没有取得地址,

11、所以在A行中,对被调用函数fun给对应的形参指针变量申请地址,即指针变量b和形参指针变量p指向同一组地址。B行对申请地址释放。例题11:下列函数change的功能是,将字符串中的小写字母转成大写字母,请填空。#include#includevoid change( ) /1int i=0; for(i=0; ;i+) /2 if(ai=a&ai=z) ; /3void main()char p80; cout n; cin.getline(p,80) ; /读一行字符,中间可以有空格 change(p); coutPENDL;如程序运行时得到以下结果:请输入一行字符:This is a boo

12、k.THIS IS A BOOK.答案:(1)char *a 或 char a80(2) ai 或 ai!=0(3) ai= ai 32或ai-= ai 分析: (1) 由指针和字符串关系知:当实参是数组,形参可以是字符串变量,也可以是字符指针变量。(2) 循环语句结束条件是字符标记0。(3) 大写字母的ASCII码比小室字母的ASCII码小32。 例题12:下列函数swap实现数据交换功能功能,请填空。#includevoid s *p,int *q)int temp; temp=*p; ; /1 ; /2void main()int a,b;int *p1,*p2;coutab;p1=&a

13、;p2=&b;s);cout结果a和b的值:A,BENDL;如程序运行时得到以下结果:请输入两个正数:10 20结果a和b的值:20,10答案:(1) (1) *p=*q(2) (2) *q=temp;分析:实参和形参都是指针变量,所以指针变量p1和p指向同一个地址,同样p2和q也指向同一个地址。函数swap()是交换两个数,故应填写语句*p=*q、*q=temp。例题13:下列函数sort实现对字符串按字典顺序由小到大排序,请填空。#include#includevoid sort( ) /1char ; /2 int i,j; for(i=0;iN-1;I+) for(j=0;jN-1-I

14、;J+) if(strcmp( ) /3 temp=pj; ; /4 pj+1=temp; void main() char *a5=student,worker,cadre,soldier,apen; sort(a,5); for(int i=0;i5;i+) coutAIENDL;程序运行结果如下:apencadresoldierstudentworker答案:(1)char *p,int n (2)*temp(3)pj,pj+1)0(4)pj=pj+1分析:(1)由实参得知函数sort()有两个形参,根据上题得char *p,int n。(2)有下面语句temp=pj可以得到temp是字

15、符中指针。(3)根据冒泡排序方法和字符串比较函数得到pj,pj+1)0。(4)字符串指针可以通过赋值语句传递值,字符串变量不能够使用赋值语句传递值。例题14:函数find功能是:在指针p所指数组中,查找值为x的元素,找到后,返回该元素的下标,否则返回-1,改正程序中语句错误,能够正确运行。#include #include const int N=10; int find(int *p,int n,int x) /1 int i ; / 2 *(p+n)=x; /3 while(*p+i!=x) /4 i+; /5 if(i!=n) /6 return 1; /7 else return -1

16、; /8 void main() int i,pos,x; int *p=new int N; for(i=0;iN;I+) *(p+i)=rand()%50; for(i=0;iN;I+) cout*(p+i)t; coutx; pos=find(p,N,x); if(pos!=-1)coutindex= POS char? LAYOUT-GRID-MODE: 18pt; MARGIN-LEFT: ,value=*(p+pos)endl; else coutNo find!ENDL; 答案:(1) 2行语句改为 int i=0;(2) 4行语句改为 while(*(p+i)!=x);(3)

17、7行语句改为 return i 。分析:在函数find中,变量i没有赋初值,按照规则任意取值,所以程序不正确。在while循环条件中*p+i表示指针p指向地址元素值加i,不能起着指针移动作用,改为*(p+i)表示数组第i个元素值起着顺序查找作用。在函数中如果找到查找元素返回其下标,7行应该是return i ,而不是return 1。例题15:写一个函数,将一个n阶方阵转置。具体要求如下:(1)初始化一个矩阵A(55),元素值取自随机函数,并输出。(2)将其传递给函数,实现矩阵转置。(3)在主函数中输出转置后的矩阵。(提示:程序中可以使用C+库函数rand( ),其功能是产生一个随机数0655

18、35,其头文件为stdlib.h)分析:根据题目要求,本题的关键是实现矩阵的转置,指针变量p指向矩阵c,由数组存放规则和指针变量的规则,得到下列程序:#include#include#includeint a55,c55; /矩阵a、c定义为全局变量void zc(int b5,int n); /函数声明语句void main()int i,j; srand(time(NULL); /产生一个时间 for(i=0;i5;i+)for(j=0;j5;j+)*(*(a+i)+j)=rand()%100 ; /产生一个随机数cout自动生成矩阵为:n; for(i=0;i5;i+) /输出自动生成的

19、二维数组 for(j=0;j5;j+)coutt*(*(a+i)+j); coutENDL; zc(a,5); /调用转置矩阵函数cout转置矩阵为:n ;for(i=0;i5;i+) for(j=0;j5;j+)coutt*(*(c+i)+j); coutENDL; void zc(int b5,int n)int i,j; int (*p)5; p=c; for(i=0;i5;i+)for(j=0;j5;j+)*(*(p+i)+j)=*(*(b+j)+i); / 转置三、习题及参考答案1选择题:(1)如果x是整型变量,则合法的形式是( )。A(x+5)B*xC&*xD*&x答案:D (2)

20、若有语句int a10=0,1,2,3,4,5,6,7,8,9,*p=a;则( )不是对a数组元素的正确引用(其中0i10)。ApiB*(*(a+i)Cap-aD*(&ai)答案:B(3)以下程序的输出结果是( )。#include void main() int a3=10,15,20; / a0=10,a1=15,a2=20int *p1=a,*p2=&a1; / p1取a0地址,p2取a1地址 *p1=*(p2-1)+5; / a0=15,a1=15,a2=20*(p1+1)=*p1-5; / a0=15,a1=10,a2=20coutA1ENDL;A5B10C15D20答案:B分析:见

21、程序注释(4)执行以下程序段后,m的值为 ( )。int a23=1,2,3,4,5,6;int m,*p=&a00;m=(*p)*(*(p+2)*(*(p+4);A15B14C13D12答案:A分析:C+语言,二维数组的存储方式在计算机中仍然是按一维数组存储,并按行优先,即是先存储第 一行元素,接着存储第二行元素。语句p=&a00表示指针变量p取得二维数组第一个元素p00地址,注意不用语句p=a取二维数组首地址(同学考虑为什么?),*p、*(p+2)、*(p+4)的值分别为1、3、5,所以m=15。(5)以下程序的输出结果是( )。#include void fun(int x,int y,

22、int *cp,int *dp) cp=x+y; /*cp=30+50=80dp=x-y; /*dp=30-50=-20void main()int a,b,c,d;a=30,b=50;fun(a,b,&c,&d);coutC,DENDL;A50,30B30,50C80,20D80,20答案:C分析:函数fun(a,b,&c,&d)中参数 a,b是传值,参数&c,&d是传地址,因此形参cp和实参c共用一个存储空间,形参dp和实参d共用一个存储空间,所以改变指针变量cp所指向地址的值也就改变变量c的值,同样改变指针变量dp所指向地址的值也就改变变量d的值,因此选C。(6)要求函数的功能是交换x和

23、y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是( )。Afuna(int *x,int *y)Bfunb(int x,int y) int *p=new int ; int t;p=*x; t=x;*x=*y; x=y;*y=*p; y=t; Cfunc(int *x,int *y)Dfund(int x,int y)*x=*y;*x=*x+*y; *y=*x; *y=*x-*y; *x=*x-*y; 答案:A分析:按照C+语言规则,通过参数带回运算值,只能是传地址,不能是传值 ,B和D的参数是传值,故B和D不能选。C中传回值都是指针变量y所指向地址的值,C也不能选。(7)以下

24、程序的输出结果是( )。#include void main()char *s=12134211;int v1=0,v2=0,v3=0,v4=0;for (int k=0;sk;k+)switch(sk)default:v4+;case 1:v1+;case 3:v3+;case 2:v2+;coutV1,V2,V3,V4ENDL;A4,2,1,1 B4,9,3,1C5,8,6,1D8,8,8,8答案:C分析:C+语言中的switch语句中,如果没有break语句,一旦满足某一条件进入,就一直运行到switch的结束,如在本题s1=1,除v1加1之外,v2和v3都要加1。故运行结果是“5,,8

25、,6,1”,选择C。如果程序做下面修改: switch(sk)default:v4+; break;case 1:v1+; break;case 3:v3+;break;case 2:v2+;break;运行结果是“4,2,1,1”,选择A。(8)设有如下定义,下面关于ptr正确叙述是( )。 int (*ptr)();Aptr是指向一维数组的指针变量Bptr是指向int 型数据的指针变量Cptr是指向函数的指针,该函数返回一个int型数据Dptr是一个函数名,该函数的返回值是指向int型数据的指针答案:C分析:参照函数指针定义。(9)若有如下语句:int *pp,*p,a=10,b=20;p

26、p=&p; /二级指针pp取一级指针p地址p=&a; /一级指针p取变量a地址p=&b; /一级指针p取变量b地址cout*p”,”*ppENDL; 则输出结果是( )。A10,20B10,10C20,10D20,20答案:D分析:见程序注释。(10)设char *s;以下正确的表达式是( )。As=”computer”;B*s=”computer”;C*s=”computer”;D*s=c;答案:C分析:由char*s语句可知,*s表示是一个二级字符指针变量,*s是一个指向字符串的指针变量,故A、C、D都 不正确,只有B是正确的。2编写程序,在堆内存中申请一个float型数组,把10个flo

27、at型数据0.1、0.2、0.3、1.0赋予该数组,然后使用float型指针输出该数组的各元素值并求出其累加和。#includevoid main() float *p= new float10; /在堆内申请一个float型数组 int i; float sum=0.0; for(i=0;i10;i+) *(p+i)=(i+1)*.1; /给数组赋值0.1,0.2,1.0 cout*(p+i)t; /输出数组值sum+=*(p+i); /求和 coutn sum= SUMENDL; 3编写一个函数f,将传入此函数的直角坐标值转换为极坐标值,并返回主调函数中。求极坐标的公式是: c=q=arc

28、tan(y/x)若要将两值返回主调函数,有多种方式可以完成,请试之:(1) (1) 两值均以指针形参带回。void fun(double x,double y,double *c,double *q) coutX,YENDL;*c=sqrt(x*x+y*y);cout*cENDL; *q=atan(y/x);(2)由指针形参带回一个值,函数值返回另一个值。double fun(double x,double y,double *p)double c; c=sqrt(x*x+y*y); *p=atan(y/x);return c;(3)两值均以引用形参返回。(提示:程序中可以使用C+库函数spr

29、t、pow及atan,它们的头文件为math.h)void fun(double x,double y,double &a,double &b)a=sqrt(x*x+y*y); b=atan(y/x);4使用指针编写函数strcat(),实现两个字符串的首尾连接(将字符串str2接到str1的后面,str1最后面的0被取消)。void strcat(char *str1,char *str2)int i,m=0; while(str1m!=0) m+; /求数组str1长度 i=0; while(str2i!=0) str1m+i=str2i;i+; /将字符串str2中有字符依次装入字符串s

30、tr1中 str1m+i=0;5编写从多个字符串中寻找最长串的函数char *maxstr(char *str ,int n)其中,str是字符串数组,n是字符串个数。函数返回值为最长串地址。char *maxstr(char *str,int n)int i,len,j=0; len=strlen(strj); /求数组str0长度并赋给变量len for(i=1;iN;I+) if(strlen(stri)len) j=i;len= strlen(stri) ; /从第2个字符串开始,只要字符串长度大于len,就赋给len并保留其下标 return strj;6写一个函数,将一个n阶方阵转

31、置。具体要求如下:(1)初始化一个矩阵A(55),元素值取自随机函数,并输出。(2)将其传递给函数,实现矩阵转置。(3)在主函数中输出转置后的矩阵。(提示:程序中可以使用C+库函数rand( ),其功能是产生一个随机数065535,其头文件为stdlib.h)见本章例157编写一个程序,实现在命令行中以参数的形式接收两个整数,输出这两个整数的和。(提示:程序中可以使用C+库函数atoi(),其功能是将字符串转换成整型值,其头文件为stdlib.h)#include#includevoid main(int argc,char *argv) int a,b; a=atoi(argv1); b=a

32、toi(argv2); coutA+B=A+BENDL;8使用引用参数编制程序,实现两个字符串变量的交换。例如开始时:char *ap=”hello”;char *bp=”how are you”;交换后使ap和bp指向的内容别是:ap:”how are you”bp:”hello”#include#includevoid s *p,char *q)char temp20; strcpy(temp,p); strcpy(p,q); strcpy(q,temp);void main()char a20=hello,*ap=a; char b20=how are you,*bp=b;cout交换前

33、字符串值:n;coutap= APENDL;coutbp= BPENDL;s);cout交换后字符串值:n;coutap= APENDL;coutbp= BPENDL;9下列程序能够生成由10个整数组成的安全数组。其中put()函数的作用是将值放入数组中,get()函数的作用是取出数组中某元素的值,如果在put()函数和get()函数中遇到下标越界则给出提示信息 “range error!”并退出程序。请完成put()函数和get()函数的定义。#include #include int &put(int n);int get(int n);int array10;int error=-1;v

34、oid main() put(0)=10; put(1)=20;put(9)=40; coutGET(0)ENDL;coutGET(1)ENDL;coutGET(9)ENDL;put(12)=1;运行结果是:102030range error!请完成put()函数和get()函数的定义。答:int &put (int m) if(m=0 & m10) return arraym; else coutrange error! int get(int m) if(m=0 & m10) return arraym;else coutrange error! 四、练习题1. 选择题(1)若有以下定义,

35、则变量p所占内存空间的字节数是()。float *p;A.1 B.2 C.4 D.8 (2) 若有以下定义,则赋值错误的是()。int a,*p,*q;A. *p=&a ; B.p=new int ; C.q=NULL; D.p=q(3) 下列程序运行结果是()。#includevoid main()int a=10,*q; if(q=NULL) cout#ENDL; else q=&a; cout*qENDL;A. # B.10 C. 有语法错误 D.*q(4)若程序段static char line=”Visual C+”; char *point=line;则point的值为( )。A.

36、 ”Visual C+” B. line的首地址C. Visual D. 0(5) 相同数据类型的数组名和指针变量均表示地址,以下不正确的说法是()。A. 数组名代表的地址不变,指针变量存放的地址可变。B. 数组名代表的存储空间不变,指针变量指向的存储空间长度可变。C. A和B的说法均正确。D. 没有差别。(6) 若有以下定义,则下列操作错误的是()。int a5=1,3,5,7,9,*p=new int 5;A.p=a; B.*p=a; C.*(p+1)=a1; D.*p=*a(7) 若有以下定义,则释放指针所指内存空间的操作是()。 int *p=new int 10;A.delete r

37、; B.delete *r C.delete r; delete r(8) 若有以下定义,下列值为6的表示式是()。int a35=1,2,2,4,6,8,10,20,30,40,50; A.*(a+2)+3 B.a23 C.*(*(a+1)+2) D.*(*(a+2)+3)(9)若int (*p)5;,则下列正确的叙述是()。A 是指针数组B (*p)5与*p5等价C p的指针,它可指向一维数组中任一元素D p是指针,它只能指向一个包含5个int类型元素的一维数组(10)执行下列程序段后,字符串str1的值是()。 char str18 ,*str2=”AA0BB”;strcpy(str1,

38、str2); A. AA0BB B. AA BB C. AA D.AA0BB02写出下列程序运行结果:(1)#includevoid main() int x=100,y=200; int *p=&x; (*p)+; p=&y; *p=x; coutX,*PENDL; (2) #includevoid main() int a=10,20,30,40,50,60,70,80,90,100; int i,*p,sum=0; p=a; for(i=1;i10;i=i+2) sum+=pi; coutsum= SUMENDL; (3) #includevoid main() float b4=1.0

39、,2.0,1.2,3.0,4.0,3.1,1.6,1.7,1.8,1.9,2.0,2.1; float *p,sum=1.0; int i; p=&b01; for(i=0;i3;i+) sum=sum*(*(p+i); coutsum= SUMENDL; (4) #includevoid main()char *b=sunday, monday, tuesday, wednesday; char *p; p=b2; cout*pt*bENDL; (5) #includevoid main()int i,a=10,20,30,40,*p4,*q; for(i=0;i4;i+) pi=a+i;

40、q=p; cout*+qENDL; cout*+*qENDL; cout+*qENDL; cout*q-aENDL; (6) #include#include#define N 5void main()char* course=Mathematics, English, Data structure,C+ Programming , Internet ; int i,j,k; char *temp; for(i=0;iN-1;I+) k=i; for(j=i+1;jN;J+) if(strcmp(coursek,coursej)0) k=j; if(k!=i) temp=coursei; coursei=coursek; coursek=temp; for(i=0;iN;I+)coutCOURSEIENDL; 30 / 30

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

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

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


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