C++笔试经典知识点.doc_第1页
C++笔试经典知识点.doc_第2页
C++笔试经典知识点.doc_第3页
C++笔试经典知识点.doc_第4页
C++笔试经典知识点.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、sprintf 函数操作的对象不限于字符串:虽然目的对象是字符串,但是源对象可以是字符串、也可以是任意基本类型的数据。这个函数主要用来实现(字符串或基本数据类型)向字符串的转换功能。如果源对象是字符串,并且指定 %s 格式符,也可实现字符串拷贝功能。2、请编写一个 C 函数,该函数给出一个字节中被置 1 的位的个数,并请给出该题的至少一个不同解法。unsigned int TestAsOne0(char log) int i; unsigned int num=0, val; for(i=0; i i; /移位 val &= 0x01; /与1相与 if(val) num+; return num; 3、请编写一个 C 函数,该函数将给定的一个字符串转换成整数。int Invert(char *str) int num=0; while(*str!=0) int digital=*str-48; num=num*10+digital; str=str+1; return num; 4、请编写一个 C 函数,该函数将给定的一个整数转换成字符串。void IntToCharChange(int num, char* pval) char strval100; int i, j; int val0 = 0; int val1 = 0; val0 = num; for(i=0; i100; i+) val1 = val0 % 10; /取余 val0 = val0 / 10; /取整 strvali = val1 + 48; /数字字符 if(val0 10) i+; strvali = val0 + 48; break; for(j=0; j 99) return; sourcej = 0; for(i=0; ij; i+) childi = sourcej-i-1; /反序 childi = 0; 6、请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。int search(char *cpSource, int n, char ch) /起始地址,搜索长度,目标字符int i;for(i=0; in & *(cpSource+i) != ch; +i);return i;7、请编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,该字符串是由同一字符组成的。int ChildString(char*p) /自己写 Char *q=p;int stringlen=0, i=0,j=1,len=0,maxlen=1; while(*q!=0) /不能用strlen,求得长度stringlen Stringlen+;q+; while( i Stringlen ) if(*(p+i)=*(p+j)&jmaxlen) /统计最大子串长度 maxlen=len+1; len=0; else len=0; i+; j+; return maxlen; 8、用,|,&实现一个WORD(2个字节)的高低位交换!int main() unsigned short a = 0xABCD; unsigned short b ; unsigned short c ,d; b = (a 8)&0x00ff; d = b | c; printf(n%x,b); printf(n%x,c); printf(n%x,d); return 0; 结果是 CDAB 2俩个字节是16位 前八位为高位 后八位为低位 然后结合9、编写一个函数,函数接收一个字符串,是由十六进制数组成的一组字符串,函数的功能是把接到的这组字符串转换成十进制数字.并将十进制数字返回.答案:BOOL HexToDec( LPCTSTR shex,int& idec ) int i,mid; int len = lstrlen( shex ); if( len8 ) return FALSE; mid = 0; idec = 0; for( i=0;i=0&shexi=a&shexi=A&shexi=F ) mid = shexi -A +10; else return FALSE; mid = (len-i-1)2); / 移位表示变为2的n次方倍 idec =idc+mid; return TRUE; 10、 #include “filename.h”和#include 的区别?对于include 编译器从标准库开始搜索filename.h;对于include “filename.h”编译器从用户工作路径开始搜索filename.h11、 头文件的作用是什么?用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。 12、C+函数中值的传递方式有哪几种?C+函数的三种传递方式为:值传递、指针传递和引用传递。13、内存的分配方式的分配方式有几种?答:一、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。二、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。三、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。14、实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数;/删除操作Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e) if(!(p=GetElemP_DuL(L,i) /此处得到i位置的节点指针,如果有需要也得写出具体函数实现 return ERROR; e=p-data; p-prior-next=p-next; p-next-prior=p-pror; free(p); return OK;/插入操作Status ListInsert_DuL(DuLinkList &L,int i,ElemType &e) if(!(p=GetElemP_DuL(L,i) return ERROR; if(!(s=(DuLinkList)malloc(sizeof(DuLNode) /生成新节点 return ERROR; s-data=e; s-prior=p; p- next - prior =s; p-next=s; s-next=p-next-next; return OK;15、请讲一讲析构函数和虚函数的用法和作用? 析构函数是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命期结束的时候,由系统自动调用。 有适放内存空间的做用。虚函数是C+多态的一种表现, 使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。16、全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的? 生命周期不同:全局变量随主程序创建和创建,随主程序销毁而销毁局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在; 内存中分配在全局数据区使用方式不同:通过声明后全局变量程序的各个部分都可以用到局部变量只能在局部使用;分配在栈区操作系统和编译器通过内存分配的位置来知道的,全局变量分配在全局数据段并且在程序开始运行的时候被加载。局部变量则分配在堆栈里面 。17、多态。overload 和 override的区别。overload是重载,重载是一种参数多态机制,即代码通过参数的类型或个数不同而实现的多态机制。 是一种静态的绑定机制(在编译时已经知道具体执行的是哪个代码段)。 override是覆盖。覆盖是一种动态绑定的多态机制。即在父类和子类中同名元素(如成员函数)有不同的实现代码。执行的是哪个代码是根据运行时实际情况而定的。重载Overload特点public bool withdraw(double amt, string name)public double withdraw(double amt)1、方法名必须相同2、参数列表必须不相同3、返回值类型可以不相同注意:override存在于继继承的关系类中。覆写Override特点(三相同):public override bool withdraw(.)1、方法名相同2、参数列表相同3、返回值类型相同注意:存在于同一类中,但是只有虚方法和抽象方法才能被覆写.18、解释堆和栈的区别。 在传统的C中堆和栈实际是一块物理内存,堆主要用来动态分配内存,从堆栈内存的低端向上分配;而栈主要用来传递函数参数、返回值和局部参数内存分配,是从堆栈内存的高端向下分配,俗称压栈和出栈;堆是动态分配,比如用new,malloc分配,需要手工释放,不然会导致memory leak, 栈是静态分配,比如函数调用是需要分配堆栈,但堆栈能自动释放.19、论述含参数的宏与函数的优缺点。 宏是编译期的,函数是运行期的;宏不是实体,而函数是一个可寻址的实体;宏只是编译期替换,在程序里每遇到S(a,b),就用a*b代替,a和b两个实体并没有由宏实际产生,而函数S会在栈中定义两个对象a和b。宏没有生存期、作用域之类的概念,而函数就有。20、怎样用最快的方法判断链表是否有环? 用两个指针来遍历这个单向链表,第一个指针p1,每次走一步;第二个指针p2,每次走两步; 当p2 指针追上 p1的时候,就表明链表当中有环路了。怎么判断链表中是否有环?bool CircleInList(Link* pHead)if(pHead = = NULL | pHead-next = = NULL)/无节点或只有一个节点并且无自环return (false);if(pHead-next = = pHead)/自环return (true);Link *pTemp1 = pHead; /step 1Link *pTemp = pHead-next; /step 2while(pTemp != pTemp1 & pTemp != NULL & pTemp-next != NULL)pTemp1 = pTemp1-next; /增量1pTemp = pTemp-next-next; /增量2if(pTemp = = pTemp1)return (true);return (false);21、请问交换机和路由器各自的实现原理是什么?分别在哪个层次上面实现的?交换机(二层交换)的工作原理和网桥一样,它的各个端口都具有桥接功能,每个端口可以连接一个LAN或一台高性能网站或服务器,交换机按每一个包中的MAC地址相对简单地决策信息转发。/路由器转发IP分组时,只根据IP分组目的IP地址的网络号部分,选择合适的端口,把IP分组送出去。同主机一样,路由器也要判定端口所接的是否是目的子网,如果是,就直接把分组通过端口送到网络上,否则,也要选择下一个路由器来传送分组。交换机一般用于的连接,交换机归于网桥,是数据链路层的设备,有些交换机也可实现第三层的交换。路由器用于之间的连接,可以解决异性网络之间转发分组,作用于网络层。22、全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?答:一些变量在整个程序中都是可见的,它们称为全局变量。一些变量只能在一个函数中可知,称为局部变量。这就是他们的区别。在任何函数外面定义的变量就是全局变量,在函数内部定义的变量是局部变量,这是它们在程序中的实现过程。操作系统和编译器是根据程序运行的内存区域知道他们的,程序的全局数据放在所分配内存的全局数据区,程序的局部数据放在栈区。23、把一个字符串倒序,如“abcd”倒序后变为“dcba”方法1:int main()char* src = hello,world;int len = strlen(src);char* dest = (char*)malloc(len+1);/要为0分配一个空间char* d = dest;char* s = &srclen-1;/指向最后一个字符while( len- != 0 )*d+=*s-;*d = 0;/尾部要加0printf(%sn,dest);free(dest);/ 使用完,应当释放空间,以免造成内存汇泄露return 0;方法2:#include #include main()char str=hello,world;int len=strlen(str);char t;for(int i=0; ilen/2; i+)t=stri; stri=strlen-i-1; strlen-i-1=t;printf(%s,str);return 0;24、.在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么?函数名: atol 功 能: 把字符串转换成长整型数 用 法: long atol(const char *nptr); 程序例: #include #include int main(void) long l; char *str = 98765432; l = atol(lstr); printf(string = %s integer = %ldn, str, l); return(0); 25、软件测试都有那些种类?黑盒:针对系统功能的测试 白盒:测试函数功能,各函数接口26、OSI中的层功能 TCP/IP协议族 应用层文件传输,电子邮件,文件服务,虚拟终端TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet表示层数据格式化,代码转换,数据加密没有协议会话层解除或建立与别的接点的联系没有协议传输层提供端对端的接口 TCP,UDP网络层为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP数据链路层传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU物理层以二进制数据形式在物理媒体上传输数据ISO2110,IEEE802。IEEE802.227、TCP/IP通信建立的过程怎样,端口有什么作用?三次握手A-B SYN:我的初始序号是X,ACK是0,设置SYN位,未设置ACK位。B-A ACK:你的序号是X+1,我的初始序号是Y,设置SYN位和ACK位。A-B ACK:你的序号是Y+1,我的序号是X+1,设置ACK位,未设置SYN位;端口确定是哪个应用程序使用该协议28、已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此结点,然后删除。slnodetype *Delete(slnodetype *Head,int key)中if(Head-number=key)Head=Pointer-next;free(Pointer);break;Back = Pointer;Pointer=Pointer-next;if(Pointer-number=key)Back-next=Pointer-next;free(Pointer);break;void delete(Node* p)if(Head = Node)while(p)29、1号信令和7号信令有什么区别,我国某前广泛使用的是那一种?1号信令利用TS16传送时,每个TS16负责传送两个话路的线路信令,TS16和话路有着固定的一一对应关系。而7号信令利用TS16来传送时,只是将组成信令单元的若干个8位位组,依次插入TS16,TS16并不知道传送的内容,即信令和话路没有固定关系,只不过利用TS16作为传送信令的载体,时传送信令消息的数据链路,因此,选用哪个时隙做数据链路均可。 - 这也是随路信令和公共信道信令的一个本质区别。我国目前广泛使用的是7号信令。30、已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此结点,然后删除。slnodetype *Delete(slnodetype *Head,int key)中if(Head-number=key)Head=Pointer-next;free(Pointer);break;Back = Pointer;Pointer=Pointer-next;if(Pointer-number=key)Back-next=Pointer-next;free(Pointer);break;void delete(Node* p)if(Head = Node)while(p)31、写出程序把一个链表中的接点顺序倒排typedef struct linknodeint data;struct linknode *next;node;/将一个链表逆置node *reverse(node *head)node *p,*q,*r;p=head;q=p-next;while(q!=NULL) r=q-next; q-next=p; p=q; q=r;head-next=NULL;head=p;return head;32、写出程序删除链表中的所有接点void del_all(node *head) node *p; while(head!=NULL) p=head-next; free(head); head=p; cout释放空间成功!next=NULL; l-prior=NULL; l-data=0; /利用头接点的数据域存放表的长度 return OK; 常规插入操作: status listinsert_dul(dulinklist &l,int i elemtype e) if (! (p=getelemp_dul (l,i) return error; if (!(s=(dulinklist) malloc (sizeof (dul node) return error; s-data=e; s-next=p-prior; s-next=p; p-prior-next=s; p-priot=s; return ok; 删除操作 status listdelete_dul (dulinklist &l,int i,elemtype &e) if (!(p=getelemp_dul(l,i) return error; e=p-data; p-prior-next=p-next; p-next-prior=p-prior; free(p); return ok; 36、一个单链表,不知道长度,写一个函数快速找到中间节点的位置.普通的方法就是先遍历得到链表的长度,然后再通过长度遍历得到链表的中间节点。更好的办法是:1) 使用两个指针进行遍历,快指针每次步进2,慢指针每次步进1;2) 当快指针到达链表尾部的时候,慢指针指向的就是链表的中点。(这个算法的思想和经典问题“判定链表中是否存在环”的思想是一致的)函数代码如下:node* find_mid_element(node* head) if (NULL = head) return NULL; if (head-_next = NULL) return head; if (head-_next-_next = NULL) return head; node* mid= head; node* p = mid-_next; while (NULL != p) & (NULL != p-_next) mid = mid-_next; p = p-_next-_next; return mid;37、进程和线程的差别。线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。38、Heap与stack的差别Heap是堆,stack是栈。Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。Stack空间有限,Heap是很大的自由存储区C中的malloc函数分配的内存空间即在堆上,C+中对应的是new操作符。程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行39、存储过程是什么?有什么用?有什么优点? 存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程用于实现频繁使用的查询、业务规则、被其他过程使用的公共例行程序存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快40、In C+, what does explicit mean? what does protected mean? c+中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,在某些情况下,我们要求类的使用者必须显示调用类的构造函数时就需要使用explicit,反之默认类型转换可能会造成无法预期的问题。protected控制的是一个函数对一个类的成员(包括成员变量及成员方法)的访问权限。protected成员只有该类的成员函数及其派生类的成员函数可以访问41、在c+的一个类中声明一个static成员变量有没有用?在C+类的成员变量被声明为static(称为静态成员变量),意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,也就是说不管创建多少对象,static修饰的变量只占有一块内存。其修改值为该类的其它所有实例所见;而类的静态成员函数也只能访问静态成员(变量或函数)。static是加了访问控制的全局变量,不被继承。42、解释一下多播(组播)和广播的含义? 组播:主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。广播:主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要).43、1)What is virtual function ?what is vtable used for?虚函数主要用于实现多态用,基类的某个函数前加个Virtual 用来告诉编译系统,遇到这个处理过程时,要等到执行时再确定到底调用哪个类的处理过程;每一个虚函数都会有一个入口地址,虚函数表保存所有虚函数的入口地址2).Whats the difference between struct and class in c+? struct成员默认类型为public,class成员默认类型为private。即为数据的封装。如果没有多态和虚拟继承,在C+中,struct和class的存取效率完全相同!简单的说就是,存取class的data member和非virtual function效率和struct完全相同!不管该data member是定义在基类还是派生类的。如果不是为了和C兼容,C+中就不会有struct关键字。3).What do we need to make destructor vitual?why?CObject的析构函数设为virtual型,则所有CObject类的派生类的析构函数都将自动变为virtual型,这保证了在任何情况下,不会出现由于析构函数未被调用而导致的内存泄露4).What to declare member function as const?void fun1(int a) const;const的作用是指在该函数内部不会改变此类的成员变量(除非该成员变量定义时加上violate关键字),否则修改了该成员变量就会报错.44、C+中为什么用模板类。答:(1)可用来创建动态增长和减小的数据结构(2)它是类型无关的,因此具有很高的可复用性。(3)它在编译时而不是运行时检查数据类型,保证了类型安全(4)它是平台无关的,可移植性(5)可用于基本数据类型45、Linux有内核级线程么。答:线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分,线程有两种类型:“用户级线程”和“内核级线程”。 用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。这种线程甚至在象 DOS 这样的操作系统中也可实现,但线程的调度需要用户程序完成,这有些类似 Windows 3.x 的协作式多任务。另外一种则需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部需求进行创建和撤销,这两种模型各有其好处和缺点。用户线程不需要额外的内核开支,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会;而内核线程则没有各个限制,有利于发挥多处理器的并发优势,但却占用了更多的系统开支。 Windows NT和OS/2支持内核线程。Linux 支持内核级的多线程46、触发器怎么工作的?答:触发器主要是通过事件进行触发而被执行的,当对某一表进行诸如UPDATE、 INSERT、 DELETE 这些操作时,数据库就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。47、winsock建立连接的主要实现步骤?答:服务器端:socket()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。客户端:socket()建立套接字,连接(connect)服务器,连接上后使用send()和recv(),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。服务器端:accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连接。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,closesocket()关闭套接字。48、动态连接库的两种方式?答:调用一个DLL中的函数有两种方法:1载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。 2运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了50、用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 51、关键字static的作用是什么?这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。52、关键字const是什么含意?const int a; /a是一个常整型数int const a; /a是一个常整型数const int *a; /一个指向常整型数的指针,整型数是不可修改的,但指针可以int * const a; /一个指向整型数的常指针,指针指向的整型数是可以修改的,指针不可修改int const * a const;/ 一个指向常整型数的常指针,整型数不可修改,指针也是不可修改的53、给定一个数组,这个数组中既有正数又有负数,找出这个数组中的子数组,此子数组的和最大!#includevoid main()int a15=2,3,-4,5,6,-5,-1,14,9,-10,1,-71,75,4,-9;int b15; /计算和int num=a14;int c15; /最大尾数标志数组int n=14;int i,j=0;for(i=14;i=0;i-) /从后计算和放入b中 ci=n;bi=num;if(num0)n=i-1;num=0;num=num+ai-1;printf(n);for(i=0;i15;i+)printf(%d, ,bi);printf(n);/找到最大字符子串num=b0;n=c0;for(i=0;inum)num=bi;j=i;n=ci;for(i=j;inext = NULL )return head;Node *p1 = head ;Node *p2 = p1-next ;Node *p3 = p2-next ;p1-next = NULL ;while ( p3 != NULL )p2-next = p1 ;p1 = p2 ;p2 = p3 ;p3 = p3-next ;p2-next = p1 ;head = p2 ;return head ;(2)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。Node * Merge(Node *head1 , Node *head2)if ( head1 = NULL)return head2 ;if ( head2 = NULL)return head1 ;Node *head =

温馨提示

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

评论

0/150

提交评论