《C程序设计语言》读书笔记及课后答案

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通过一周多的学习,大体看完了《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)到现在为止没有能够解决。属于后种情况的我在每一章最后都加以说明。

用read,write,open,close 系统调用代替标准库中功能等价的函数,重写第七章的cat 程序,并比较相对执行速度。

1./* the cat function

2.Wed Aug 11 18:34:43 CST 2010*/

3.#include"stdio.h"

4.#include"stdlib.h"

5.#include"fcntl.h"

6.void main(int argc ,char * argv[])

7.{

8.int fd;

9.void filecopy(int , int);

10.char *prog = argv[0];

11.if(argc == 1)

12.filecopy(0,1);

13.else

14.while(--argc >0)

15.{

16.if((fd=open(*++argv,O_RDONLY,"r")) ==

-1)

17.{

18.fprintf(stderr,"%s can't

open %s\n",prog,*argv); 19.exit(1);

20.}

21.else

22.{

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 buf[BUFSIZ];

33.while((n=read(fd1,buf,BUFSIZ)) >0)

34.if(write(1,buf,n) != n)

35.fprintf(stderr,"write error");

36.

}

设计编写fflush、_flush、fclose 函数

1./* the fopen function

2.Wed Aug 11 19:23:51 CST 2010*/

相关文档
最新文档