C程序设计语言读书笔记及课后答案.doc_第1页
C程序设计语言读书笔记及课后答案.doc_第2页
C程序设计语言读书笔记及课后答案.doc_第3页
C程序设计语言读书笔记及课后答案.doc_第4页
C程序设计语言读书笔记及课后答案.doc_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

通过一周多的学习,大体看完了C程序设计语言这本书,这是我的笔记。(一) 读这本书的目标是什么?(1)、读完后必须深入了解C的语法以及内涵,并且达到熟练应用。(2)、通过练习习惯一种编程风格,深入理解指针,数组,结构体以及内存分配。(3)、通过练习锻炼逻辑思维能力(4)、学完后编程要上一个层次,自己能够编写出有用的C代码。(二) 这本书哪个部分是我要重点看的?(1)、指针、数组、结构体(2)、内存分配(3)、输入输出及接口问题(三)读这本书我有什么收获? 3、1 对于本书的感受 这是一本经典的C语言书籍,与其他语法书不同的是所有语法都是用例题来讲的,通过例子理解并练习语法,另外这本书的习题比较难做,不是简单的考语法,而是一些有意义的习题。通过做练习发现还是有所收获的。本书中与Linux联系密切,用C重写了许多简化版的Shell命令如:grep,ls,cat,sort,tail,cp等等。3、2 收获: 因为本来就有C语言的基础知识,所以对于语法问题基本没有多学新的知识,但是仍然对以下几点有了新的了解: 1)、位字段,不管是通过直接设置位字段还是用以前的位计算,都有新的了解与认识。 2)、指针。建立了“指针为大”的思想,对于应用指针进行类型转换以及运算都有了新的认识。比如:int a=5,char* p, p=(char)&a,*p = c;建立这样的过程对于更加复杂的指针转换就理解了。 3)、结构体。通过第六章对于二叉树以及哈希表的应用深入了解结构体,并且通过调试程序观察递归过程,同时对递归有了一定的理解。 4)、内存分配malloc函数,通过第八章的学习对malloc函数的内部进行分析,理解了动态内存管理机制。3.3 学习的程度以及那些地方存在不足: 对于C的基本语法已经差不多了,但是否达到了当初的目标即在编程方面上一个层次,这我并不敢确定,因为到现在为止这本书上的习题有些我都没有搞定,又看了一下以前的有关C的东西是觉得已经好了许多了,最起码对于很麻烦的程序不再感到畏惧了。另外觉得自己对于某些问题还是没有理解透彻,比如说输入输出时的缓冲机制,比如说指针与结构体的灵活运用,比如说如何能够运用模块化的思想把一个大的问题逐步细分,通过一个一个的小模块(函数)逐步解决,这些有的是与逻辑思维有关,有些是与某方面的专业知识有关,有些是单纯与C有关,比如说有关缓冲与内存的知识要了解操作系统,另外编译原理也要知道,这些我以前都没有学过,以后会找机会补一补。当然随着进一步的学习与应用,会逐渐的熟练或理解某一些知识点。另外因为时间的原因,对于许多练习没有真正的从各个方面去思考,只是做出来就完了,也没有返回去再仔细考虑每一道习题的意义以及对于我的收获。所以还有待以后有时间在对某些知识点进行学习。习题是本书的重点,也用了不少时间,其中有些是通过对章节内容的学习后自己做出来的(S),有些是参考别人的,参考的原因主要有:(A)对题目不理解,不明白具体要做到什么程度。(B)自己写了但是不知道对不对参考后发现自己的程序有问题或是不如别人的好又修改的。(C)虽知道题意但自己没有思路或是思路不清晰。在每一道习题的前面都用(S)(A)(B)(C)来表明是属于那一种。另外因为时间问题程序大都没有注释,只是在开始的时候稍加说明并插入了日期。这里整理一下这几天做的练习,这些代码除了少数几个标注的外都是在Linux上调试成功的,当然虽然调试成功了但是有些程序并不完美,许多情况没有考虑,简化了代码但都能达到习题的要求。另外,有几个没有整理出来,原因如下:(1)代码段太小(2)到现在为止没有能够解决。属于后种情况的我在每一章最后都加以说明。第八章:Test 8-1.c(S)(cat 程序)用read,write,open,close 系统调用代替标准库中功能等价的函数,重写第七章的cat程序,并比较相对执行速度。1. /* the cat function2. Wed Aug 11 18:34:43 CST 2010*/3. #include stdio.h4. #include stdlib.h5. #include fcntl.h6. void main(int argc ,char * argv)7. 8. int fd;9. void filecopy(int , int);10. char *prog = argv0;11. if(argc = 1)12. filecopy(0,1);13. else14. while(-argc 0)15. 16. if(fd=open(*+argv,O_RDONLY,r) = -1)17. 18. fprintf(stderr,%s cant open %sn,prog,*argv);19. exit(1);20. 21. else22. 23. filecopy(fd,1);24. close(fd);25. 26. 27. exit(0);28. 29. void filecopy(int fd1,int fd2)30. 31. int n;32. static char bufBUFSIZ;33. while(n=read(fd1,buf,BUFSIZ) 0)34. if(write(1,buf,n) != n)35. fprintf(stderr,write error);36. Test8-3.c (?)/本程序未调试通过设计编写fflush、_flush、fclose 函数1. /* the fopen function2. Wed Aug 11 19:23:51 CST 2010*/3. /#include stdio.h4. #include fcntl.h5. #include mystdio2.h6. #include sys/file.h7. #include unistd.h8. #include stdlib.h9. #define PERMS 066610. FILE _iobOPEN_MAX=11. 0,(char*)0,(char*)0,_READ,0,12. 0,(char*)0,(char*)0,_WRITE,1,13. 0,(char*)0,(char*)0,_WRITE | _UNBUF,214. ;15. FILE *fopen(char *name,char *mode)16. 17. FILE *fp;18. int fd;19. if(*mode != r | *mode != w | *mode != a)20. return NULL;21. for(fp = _iob;fpflag &(_READ | _WRITE) = 0)24. break;25. 26. if(fp=_iob + OPEN_MAX)27. return NULL;28. if(*mode = w)29. fd = creat(name,PERMS);30. else if(*mode = a)31. 32. if(fd = open(name,O_WRONLY,0) = -1)33. fd = creat(name,PERMS);34. lseek(fd,0L,2);35. 36. else37. fd = open(name,O_RDONLY,0);38. if(fd = -1)39. return NULL;40. fp-fd = fd;41. fp-ptr = NULL;42. fp-base =NULL;43. fp-cnt = 0;44. fp-flag = (*mode = w)?_WRITE:_READ;45. return fp;46. 47. int _fillbuf(FILE * fp)48. 49. int bufsize;50. if(fp-flag &(_READ|_EOF|_ERR) != _READ)51. return EOF;52. bufsize = (fp-flag & _UNBUF)?1:BUFSIZ;53. if(fp-base = NULL)54. 55. if(fp-base = (char *) malloc(bufsize) = NULL)56. return EOF;57. 58. fp-ptr = fp-base;59. fp-cnt = read(fp-fd,fp-base,bufsize);60. if(-fp-cnt cnt = -1)63. fp-flag |= _EOF;64. else 65. fp-flag |= _ERR;66. fp-cnt = 0;67. return EOF;68. 69. return (unsigned char) *fp-ptr+;70. 71. int _flushbuf(int x,FILE *fp)72. 73. unsigned nc;74. int bufsize;75. if(fp _iob+OPEN_MAX)76. return EOF;77. if(fp-flag & (_WRITE | _EOF| _ERR) != _WRITE)78. return EOF;79. bufsize = (fp-flag & _UNBUF)?1:BUFSIZ;80. if(fp-base = NULL)81. 82. if(fp-base = (char *) malloc( BUFSIZ) = NULL)83. fp-flag |= _ERR;84. return EOF;85. 86. else87. 88. nc = fp-ptr - fp-base;89. if(write(fp-fd,fp-base,nc) != nc)90. fp-flag |= _ERR;91. return EOF;92. 93. fp-ptr = fp-base;94. *fp-ptr+ = (char)x;95. fp-cnt = bufsize -1;96. return x;97. 98. int fflush(FILE *fp)99. 100. int rc= 0;101. if(fp _iob+OPEN_MAX)102. return EOF;103. if(fp-flag & _WRITE )104. rc = _flushbuf(0,fp);105. / fp-ptr = fp-base;106. fp-cnt = (fp-flag & _UNBUF)? 1:BUFSIZ;107. return rc;108. 109. int fclose(FILE *fp)110. 111. int rc;112. if(rc = fflush(fp) != EOF)113. 114. free(void*)fp-base);115. fp-cnt = 0;116. fp-ptr =NULL;117. fp-base =NULL;118. fp-flag &= (_READ | _WRITE);119. 120. return rc;121. 122. main()123. 124. unsigned char c;125. FILE *fp;126. fp = fopen(mystdio2.h,r);127. getc(fp);128. putc(c,fp);129. 130. /mystdio2.h131. #define NULL 0132. #define EOF (-1)133. #define OPEN_MAX 20134. #define BUFSIZ 1024135. typedef struct _iobuf136. int cnt;137. char *ptr;138. char *base;139. int flag;140. int fd;141. FILE;142. extern FILE _iobaOPEN_MAX;143. #define stdin (&_iob0)144. #define stdout (&_iob1)145. #define stderr (&_iob2)146. enum _flags147. _READ =01,148. _WRITE = 02,149. _UNBUF = 04,150. _EOF = 010,151. _ERR = 020152. ;153. int _fillbuf(FILE *);154. int _flushbuf(int ,FILE *);155. /FILE * fopen(char*,char*);156. int fclose(FILE*);157. int fflush(FILE *);158. #define feof(p) (p)-flag & _EOF) != 0)159. #define getc(p) (-(p)-cnt = 0160. ?(unsigned char) *(p)-ptr+:_fillbuf(p)? 宏定义但这不是个函数,如何应用,用一个变量接受他的结果呢?161. #define putc(x,p) (-(p)-cnt=0 162. ?*(p)-ptr+ = (x):_flushbuf(x),p)163. #define getchar() getc(stdin)164. #define putchar(x) putc(x),stdout)这段代码是原书上的内容,我添加了练习中的_flush fflush以及fclose函数,程序的从思路上走没什么问题,但是因为重写了stdio.h所以编译老是出错,而且对于我标出的哪一点我还是有些疑问的。Test 8-4.c(?)/有疑问的程序(fseek程序)设计编写fseek(FILE *fp,long offset,int origin)函数1. #include stdio.h2. #include stdlib.h3. int fseek(FILE *fp,long offset,int origin)4. 5. unsigned nc;6. long rc = 0;7. if(fp-flag & _READ)8. 9. if(origin = 1)10. offset -=fp-cnt;? 为什么要这样做呢?11. rc = lseek(fp-fd,offset,origin);12. fp-cnt = 0;13. 14. else if(fp-flag &_WRITE)15. 16. if(nc = fp-ptr - fp-base) 0)17. if(write(fp-fd,fp-base,nc) != nc)18. rc =-1;19. if(rc !=-1)20. rc = lseek(fp-fd,offset,origin);21. 22. return (rc = -1)? -1:0;23. 这是本题的一个答案,但是我并不怎么明白,Fseek 的实现是调用了系统函数lseek但是lseek除了在第一个参数不同外难道offset这个参数也是不同的吗?书上并没有深入讲解lseek函数,所以对于这个问题我还是不太明白,我在网上了解了一些信息,并做了个跟踪fseek的程序,但是结果还是没有弄明白,假设fseek中所谓的移动的那个指针是系统管理的,但是那个FILE结构中的用于缓冲的指针让我对他的运算移动不了解,以下是跟踪程序:1. #include stdio.h2. #include stdlib.h3. #define BUF_LEN 34. Printbuf(char *buf,int len)5. 6. int i;7. for(i=0;i_IO_read_ptr,ftell(fp);24. for(i=0;i_IO_read_ptr,ftell(fp);29. 30. fseek(fp,5L,1);31. Printbuf(mybuf,BUF_LEN);32. printf(curp = %ptpos =%ldn,fp-_IO_read_ptr,ftell(fp);33. fgetc(fp);34. Printbuf(mybuf,BUF_LEN);35. printf(curp = %pt pos =%ldn,fp-_IO_read_ptr,ftell(fp);36. /* fgetc(fp);37. Printbuf(mybuf,BUF_LEN);38. printf(curp = %pt pos =%ldn,fp-_IO_read_ptr,ftell(fp);39. fgetc(fp);40. Printbuf(mybuf,BUF_LEN);41. printf(curp = %pt pos =%ldn,fp-_IO_read_ptr,ftell(fp); 42. fgetc(fp);43. Printbuf(mybuf,BUF_LEN);44. printf(curp = %pt pos =%ldn,fp-_IO_read_ptr,ftell(fp);*/45. fclose(fp);46. /getchar();47. 这是当fseek(fp,2L,1)的时候:mybuf = 0xbff05c15curp = 0xbff05c15pos = 0ABCcurp = 0xbff05c16pos = 1ABCcurp = 0xbff05c17pos = 2ABCcurp = 0xbff05c15pos =4EFGcurp = 0xbff05c16 pos =5curp就是FILE结构体中的缓冲区指针,当执行fseek的时候他是怎样移动的?这是当fseek(fp,1L,1)的时候mybuf = 0xbfcefe15curp = 0xbfcefe15pos = 0ABCcurp = 0xbfcefe16pos = 1ABCcurp = 0xbfcefe17pos = 2BCDcurp = 0xbfcefe17pos =3BCDcurp = 0xbfcefe18 pos =4这是当fseek(fp,5L,1)的时候mybuf = 0xbfee6ce5curp = 0xbfee6ce5pos = 0ABCcurp = 0xbfee6ce6pos = 1ABCcurp = 0xbfee6ce7pos = 2FGHcurp = 0xbfee6ce7pos =7FGHcurp = 0xbfee6ce8 pos =8这是fseek(fp,-3L,1)并且当for(i=0;i4;+i)的时候mybuf = 0xbfb199d5curp = 0xbfb199d5pos = 0ABCcurp = 0xbfb199d6pos = 1ABCcurp = 0xbfb199d7pos = 2ABCcurp = 0xbfb199d8pos = 3DEFcurp = 0xbfb199d6pos = 4DEFcurp = 0xbfb199d5pos =3DEFcurp = 0xbfb199d6 pos =4Test8-5.c(?)(ls程序)1. /*2. Wed Aug 11 06:24:34 CST 2010*/3. #include 4. #include 5. #include 6. /#include syscalls.h7. #include 8. #include 9. #include sys/dir.h10. #include stdlib.h11. /#define NAME_MAX 1412. #define MAX_PATH 102413. #define DIRSIZ 1414. typedef struct15. long ino;16. char nameNAME_MAX +1;17. Dirent;18. typedef struct19. int fd;20. Dirent d;21. MYDIR;?不用MYDIR结构不行吗?用到fd的时候直接设个变量代替不行吗?22. struct mydirect 23. ino_t d_ino;24. char d_nameDIRSIZ;25. ;26. MYDIR *myopendir(char *dirname);27. Dirent *myreaddir(MYDIR *dfd);28. void myclosedir(MYDIR *dfd);29. /int stat(char *,struct stat *);30. void dirwalk(char*,void (*fcn)(char*);31. void fsize(char *);32. void main(int argc, char *argv)33. 34. if(argc = 1)35. fsize(.);36. else37. while(-argc0)38. fsize(*+argv);39. 40. void fsize(char *name)41. 42. struct stat stbuf;43. if(stat(name,&stbuf) = -1)44. 45. fprintf(stderr,fsize:cant access %sn,name);46. return;47. 48. if(stbuf.st_mode & S_IFMT) = S_IFDIR)49. dirwalk(name,fsize);50. printf(%5u%6o%8ld %sn,(unsigned)stbuf.st_ino,stbuf.st_mode,stbuf.st_size,name);51. 52. void dirwalk(char *dir,void (*fcn)(char*)53. 54. char nameMAX_PATH;55. Dirent *dp;56. MYDIR *dfd;57. if(dfd =myopendir(dir) = NULL)58. 59. fprintf(stderr,dirwalk: cant open %sn,dir);60. return ;61. 62. while(dp = myreaddir(dfd) != NULL)63. 64. if(strcmp(dp-name,.) = 0 | strcmp(dp-name,.)=0 )65. continue;66. if(strlen(dir)+strlen(dp-name)+2 sizeof(name)67. fprintf(stderr,dirwalk:name %s %s too longn,dir,dp-name);68. else69. 70. sprintf(name,%s/%s,dir,dp-name);71. (*fcn)(name);72. 73. 74. myclosedir(dfd);75. 76. int fstat(int fd,struct stat *);77. MYDIR *myopendir(char *dirname)78. 79. int fd;80. struct stat stbuf;81. MYDIR *dp;82. if(fd = open(dirname,O_RDONLY,0) = -183. | fstat(fd,&stbuf) = -184. | (stbuf.st_mode & S_IFMT) != S_IFDIR85. | (dp = (MYDIR *)malloc(sizeof(MYDIR) = NULL)86. return NULL;87. dp-fd = fd;88. return dp;89. 90. void myclosedir(MYDIR *dp)91. 92. if(dp)93. 94. close(dp-fd);95. free(void*)dp);96. 97. 98. Dirent *myreaddir(MYDIR *dp)99. 100. struct mydirect dirbuf;?为什么要借用这个结构?101. static Dirent d;?直接用Dirent不行吗?102. while(read(dp-fd,(char*) &dirbuf,sizeof(dirbuf) = sizeof(dirbuf)?出错,直接返回了NULL,103. /读会有什么问题?104. if(dirbuf.d_ino =0)105. continue;106. d.ino = dirbuf.d_ino;107. strncpy(,dirbuf.d_name,DIRSIZ);108. DIRSIZ = 0;109. return &d;110. 111. return NULL;112. 本题的代码仍然是原书上的代码,是一个Linux中经典命令ls的简化版本,习题只是让修改一点,但是这段代码一直在机器上实现不了功能,我跟踪了一下过程发现总是在我标出的地方直接返回NULL了,但是程序在逻辑上我觉得没什么错误呀,还有为什么要设计MYDIR结构呢,我怎么觉得只要一个Dirent结构就够了呢?具体用到文件描述符时定义一个int型的不就行了吗?要让opendir,readdir等用MYDIR 结构操作我怎么感到多此一举呢?还有在readdir函数中借用了系统中的struct direct结构这又是为什么呢?直接用一个Dirent结构难道不行吗?这也就不用来回在转换再赋值了不是吗?Test8-6(S)Test8-7(C)Test8-8(S)(malloc、calloc、 free 程序)1. /* the malloc function:2. Wed Aug 11 03:29:19 CST 2010*/3. #include stdio.h4. #include string.h5. #define NALLOC 10246. #define MAXNBYTES 102407. typedef long Align;8. union header9. 10. struct11. 12. union header *next;13. unsigned size;14. s;15. Align x;16. ;17. typedef union header Header;18. static unsigned maxalloc; 19. static Header base;20. static Header *freeptr=NULL;21. void * malloc(unsigned nbytes)22. 23. Header *ptr;24. Header *prevptr;25. Header *morecore(unsigned ); 26. unsigned nunits;27. if(nbytesMAXNBYTES)28. 29. fprintf(stderr,cant alloc more than %u bytesn,MAXNBYTES);30. return NULL;31. 32. nunits = (nbytes + sizeof(Header)-1)/(sizeof(Header) +1;33. printf(the nunits is %dn,nunits);34. if(prevptr=freeptr) = NULL)35. 36. base.s.next=prevptr=freeptr=&base;37. base.s.size = 0;38. 39. for(ptr=prevptr-s.next;prevptr=ptr ,ptr=ptr-s.next)40. 41. if(ptr-s.size =nunits)42. 43. if(ptr-s.size=nunits)44. prevptr-s.next = ptr-s.next;45. else46. 47. ptr-s.size-=nunits;48. ptr=ptr+ptr-s.size;49. ptr-s.size = nunits;50. 51. freeptr=prevptr;52. return (void *) (ptr+1);53. 54. if(ptr=freeptr)55. 56. if(ptr = morecore(nunits)= NULL)57. return NULL;58. 59. 60. 61. Header *morecore(unsigned nu)62. 63. char *cp,*sbrk(int);64. Header *hp;65. void free(void *);66. if(nu s.size = nu;73. maxalloc = (hp-s.size maxalloc)?nu:maxalloc;74. free(void*)(hp+1);75. return freeptr;76. 77. void free(void*ap)78. 79. Header *bp;80. Header *p;81. bp = (Header*)ap - 1;82. if(bp-s.size = 0 | bp-s.size maxalloc)83. 84. fprintf(stderr,free,cant free %u unitsn,bp-s.size);85. return;86. 87. for(p=freeptr;bp p&bps.next;p =p-s.next)88. 89. if(pp-s.next & (bp p | bp s.next)90. break;91. 92. if(bp+bp-s.size = p-s.next)93. 94. bp-s.size += p-s.next-s.size;95. bp-s.next = p-s.next-s.next;96. 97. else98. bp-s.next=p-s.next;99. / p-s.next = bp;100. if(p+p-s.size =bp)101. 102. p-s.size+=bp-s.size;103. p-s.next = bp-s.next;104. 105. else106. p-s.next=bp;107. freeptr = p;108. 109. unsigned bfree(char *p,unsigned n)110. 111. Header *hp;112. hp = (Header*)p;113. if(n s.size = (n + sizeof(Header) - 1)/sizeof(Header);116. free(void*)(hp+1);117. return hp-s.size;118. 119. void* calloc(unsigned n,unsigned size)120. 121. unsigned nb;122. char *p,*q;123. int i;124. nb = n*size;125. if(p = q = (char *) malloc(nb) != NULL)126. for(i=0;inb;i+)127. *q+ = 0;128. return (void*) p;129. 130. void main()131. 132. int c,d;133. char *p,*q;134. char s100;135. /c = bfree(s,100);136. /printf(%dn,c);137. d = sizeof(Header);138. printf(the sizeof Header is %dn,d);139. p = (char *) malloc(60);140. q = (char *) calloc(6,sizeof(int);141. strcpy(q,this is a test);142. strcpy(p,hello,word!);143. printf(%sn%sn,p,q);144. c = bfree(s,100);145. printf(%dn,c);146. free(void*)p);147. free(void*)q);148. 第七章:Test7-1.c(S)1. /*2. Tue Aug 10 16:57:57 CST 2010*/3. #include stdio.h4. #include string.h5. #include ctype.h6. void main(int argc ,char *argv)7. 8. int c;9. if(strcmp(argv1,lower) = 0)10. while(c = getchar() != EOF)11. putchar(tolower(c);12. else if (strcmp(argv1,upper) = 0)13. while(c=getchar() != EOF)14. putchar(toupper(c);15. else 16. printf(usage: test7-1 lower|upper;n);Test7-2.c(B)1. /*2. Tue Aug 10 06:58:06 CST 2010*/3. #include stdio.h4. #include ctype.h5. #define MAXLINE 106. #define OCTLEN 67. void main()8. 9. int c,pos = 0;10. int inc(int pos,int n);11. while(c=getchar() != EOF)12. if(iscntrl(c) | c = )13. 14. pos = inc(pos,OCTLEN);15. printf( %03o ,c);16. if(c = n)17. 18. pos = 0;19. putchar(n);20. 21. 22. else23. 24. putchar(c);25. pos = inc(pos,1);26. 27. 28. int inc(int pos ,int n)29. 30. if(pos +n MAXLINE)31. return pos+n;32. else33. 34. putchar(n);35. return n;36. 37. Test7-3.c Test7-4.c(B)(printf与scanf的简化版)1. /*2. Tue Aug 10 05:38:01 CST 2010*/3. #include stdio.h4. #include stdarg.h5. #include ctype.h6. #define LOCALFMT 1007. void minprintf(char *fmt,.)8. 9. va_list ap;10. char *p,*sval;11. char localfmtLOCALFMT;12. int i,ival;13. unsigned uval;14. double dval;15. va_start(ap,fmt);16. for(p=fmt;*p;p+)17. 18. if(*p != %)19. 20. putchar(*p);21. continue;22. 23. i = 0;24. localfmti+ = %;25. while (!isalpha(*(p+1) & *(p+1) )26. localfmti+ = *+p;27. localfmti+ = *(p+1);28.

温馨提示

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

评论

0/150

提交评论