标题:[转载]写给初学者──如何学习C语言
只看楼主
lishizelibin
Rank: 2
等 级:论坛游民
帖 子:513
专家分:41
注 册:2007-5-10
结帖率:100%
 问题点数:0 回复次数:10 
[转载]写给初学者──如何学习C语言

学习C语言不是一朝一夕的事情,但也不需要花费十年时间才能精通。如何以最小的代价学习并精通C语言是本文的主题。请注意,即使是“最小的代价”,也绝不是什么捷径,而是以最短的时间取得最多的收获,同时也意味着你需要经历艰苦的过程。


一、要读就读好书,否则不如不读

  所有初学者面临的第一个问题便是:如何选择教材。好的开始是成功的一半,选择一本优秀的教材是事半功倍的关键因素。不幸的是,学校通常会帮你指定一本很差劲的C语言课本;而幸运的是,你还可以再次选择。

  大名鼎鼎的谭浩强教授出了一本《C语言程序设计》,据说发行量有超过400万,据我所知,很多学校都会推荐这本书作为C语言课本。虽然本人的名字(谭浩宇)跟教授仅仅一字之差,但我是无比坚定地黑他这本书的。这本书不是写给计算机专业的学生的,而是给那些需要考计算机等级考试的其它专业学生看的。这本书的主要缺点是:例子程序非常不专业,不能教给你程序设计应该掌握的思考方式;程序风格相当地不好,会让你养成乱写代码的恶习;错误太多,曾经有人指出过这本书的上百个错误,其中不乏关键的概念性错误。好了,这本书我也不想说太多了,有兴趣大家可以百度一下:)

  Kernighan和 Ritchie的《The C Programming Language》(中译名《C程序设计语言》)堪称经典中的经典,不过旧版的很多内容都已过时,和现在的标准C语言相去甚远,大家一定要看最新的版本,否则不如不看。另外,即使是最经典最权威的书,也没有办法面面俱到,所以手边常备一本《C语言参考手册》是十分必要的。《C语言参考手册》就是《C Reference Manual》,是C语言标准的详细描述,包括绝大多数C标准库函数的细节,算得上是最好的标准C语言的工具书。顺便提一句,最新的《C程序设计语言》是根据C89标准修订的,而《C语言参考手册》描述的是C99标准,二者可能会有些出入,建议按照C99标准学习。还有一本《C和指针》,写得也是相当地不错,英文名是《Pointers on C》,特别地强调指针的重要性,算是本书的一个特点吧。不过这本书并不十分适合初学者,如果你曾经学过C语言,有那么一些C语言的基础但又不是很扎实,那么你可以尝试一下这本书。我相信,只要你理解了指针,C语言便不再神秘。

  如果你已经啃完了一本C语言教材,想要更进一步,那么有两本书你一定要看。首先是《C Traps and Pitfalls》(中译名《C陷井与缺陷》),很薄的一本小册子,内容非常非常地有趣。要注意一点,这本书是二十多年前写成的,里面提到的很多C语言的缺陷都已被改进,不过能够了解一些历史也不是什么坏事。然后你可以挑战一下《Expert C Programming》(中译名《C专家编程》),书如其名,这本书颇具难度,一旦你仔细读完并能透彻理解,你便可以放心大胆地在简历上写“精通C语言”了。

  切记一个原则,不要读自己目前还看不懂的书,那是浪费生命。如果你看不懂,那你一定是缺失了某些必需基础知识。此时,你要仔细分析自己需要补充哪些内容,然后再去书店寻找讲述的这些内容的书籍。把基础知识补充完毕再回头来学习,才会真正的事半功倍。


二、Unix/Linux还是Windows,这是个很大的问题

  不同的编程环境会造就出不同思维的程序员。Windows的程序员大多依赖集成开发环境,比如Visual Studio,而Unix程序员更加钟爱Makefile与控制台。显而易见,集成开发环境更容易上手,在Windows上学习C语言,只需要会按几个基本的Visutal C++工具栏按钮就可以开始写Hello, World!了,而在Unix下,你需要一些控制台操作的基本知识。有人也许认为Unix的环境更简洁,但习惯的力量是很大的,大家都很熟悉 Windows的基本操作,而为了学习C语言去专门装一个Unix系统,似乎有点不划算。

  对于一个只懂得Windows基本操作、连 DOS是什么都不知道的新手而言,尽快做一些有趣而有意义的事情才是最重要的。用C语言写一个小程序远比学习ls、cat等命令有趣,况且我们要专注于C 语言本身,就不得不暂时忽略一些东西,比如编译链接的过程、Makefile的写法等等等等。

  所以我建议初学者应该以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作为主要的学习环境,而且千万不要在IDE的使用技巧上过多纠缠,因为今后你一定要转向Unix环境的。Visual C++ 6.0使用很方便,调试也很直观,但其默认的编译器对C标准的支持并不好,而Dev C++使用gcc编译器,对C99的标准都支持良好。使用顺带提一下,很多大学的C语言课程还在使用Turbo C 2.0作为实验环境,这是相当不可取的,原因其一是TC 2.0对C标准几乎没有支持,其二是TC 2.0编译得到的程序是16位的,这对今后理解32位的程序会造成极大的困扰(当然,用djgpp之类的东西可以使TC 2.0编译出32位程序,不过那过于复杂了)。

  等你学完一本C语言的教材,你一定要转向Unix平台继续学习,几乎所有的C语言高级教程都是基于Unix平台的(比如《C专家编程》)。转变的过程是痛苦的,你需要面对的是各种纷繁复杂的命令,完全不同于Windows平台的思考方式,但是这种痛苦是值得的。Unix与C是共生的,Unix的思考方式和习惯更加符合C语言的思考方式和习惯。在Unix下,你可以找到无数优秀的源代码供你尽情阅读,你可以方便地查看某个库函数的联机手册,还可以看到最优秀的代码风格(说到代码风格,我会专门写一篇文章详细叙述)。

  归结起来就是一句话:初学C语言,建议使用Windows系统和集成开发环境,在准备向“高手”方向努力时,请先转向Unix平台。


三、万事俱备,你就是东风

  书已选定,环境配置完成,正所谓万事俱备,只欠你自己的努力了。请从书的前言开始,仔细地阅读手头的教材,很多人看书喜欢直接从第一章开始看,这是错误的做法。前言是作者对整本书的大体介绍,作者一般会告诉你需要什么基础才能够顺利阅读本书,这可以帮助你检验自己的基础知识是否已经具备。看完前言,还要浏览一下目录,了解一下书的整体结构,顺便给自己安排一下学习计划。

  学习C语言,必需注意每一个细节,书上的例子代码一定要自己亲自敲一遍,编译执行输出都跟书上说的一致才能算是学完了一个例子,如果不一致,就要仔细找原因。出了书本上有的例子,自己还要“创造”一些例子,比如学习运算符优先级的时候,可以写几个相同的表达式,在不同的位置加上括号,看看有哪些不同的行为,比如*p++和(*p)++,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的书上的例子以及改造之后的例子,还有自己“创造”的例子,都应该仔细地归类保存,并且要在源代码中写上简短的注释,阐述这个例子的意图。

  例子之后就是习题了,我建议初学者把所有的习题都独立做一遍,然后对照答案的代码,看看自己的代码有那些不足,再试着修改自己的代码。很多人不重视习题,这是极大的错误,因为作者通常会在习题中说明一些重要的道理,而不是单纯地检验前面的知识。

  也许你认为这样学习太慢,其实不然。学得细致就不用走回头路,等你学到后面才发现自己前面没搞清楚,那才是真的得不偿失。一般说来,整本书读完,你应该完成数千行乃至上万行的代码,无论是原封不动照抄书上的,还是自己心血来潮写就的,都是今后继续学习的一笔财富。以我自己举例,阅读《Windows核心编程》时(我只阅读了3/4的内容),除了抄书上的代码,还自己写了很多例子,一共有5574行(用unix下的wc工具统计),时隔多日,我早已记不清 Windows的系统编程了,但只要花几分钟翻出以前的代码看看,便会重新了然于胸。所谓好记性不如烂笔头,就是这个道理。

  仔细读书、认真抄写源代码、独立完成习题外加更进一步的实验,最后将所有的代码留下,成为自己的经验和财富,绝对的辛苦,也绝对的事半功倍。当然,这种方式只适合学习需要精通的技术,如果不是学习C语言,你还要具体情况具体分析。

  写到最后,还有非常非常重要的一点没有提及──代码风格,从最开始学习就必须强迫自己模仿最优秀的代码风格。因为代码风格太重要内容也太多,我会用专门的一篇文章来详细讨论,请大家关注《程序员之路──关于代码风格》。
大家好我也转载一篇

搜索更多相关主题的帖子: C语言 学习 
2007-07-03 18:48
huangfengchu
Rank: 1
等 级:新手上路
威 望:2
帖 子:274
专家分:0
注 册:2007-5-22
得分:0 
《The C Programming Language》(中译名《C程序设计语言》)据说我就用的这本书,这本书可说是,不介绍任何一个库函数,作业题目就基本上是叫我去自己库那些库函数,学的时间长了,我才知道我做的习题都是自己在写库函数,所以到现在我一直都只用stdio.h这个头文件。

[此贴子已经被作者于2007-7-3 20:54:25编辑过]


深山苦学C语言,终年不见外面世界。
2007-07-03 20:52
lishizelibin
Rank: 2
等 级:论坛游民
帖 子:513
专家分:41
注 册:2007-5-10
得分:0 
你的能力锻炼了不是?

惟有学习不断的学习!
2007-07-04 12:50
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 

写个漂亮的函数是件很困难的事情,可看出一个人水平

[此贴子已经被作者于2007-7-4 13:31:27编辑过]

2007-07-04 13:30
lishizelibin
Rank: 2
等 级:论坛游民
帖 子:513
专家分:41
注 册:2007-5-10
得分:0 

love Kylix??
什么意思?
Kylix是什么?我才疏学浅
请指教


惟有学习不断的学习!
2007-07-09 11:13
lishizelibin
Rank: 2
等 级:论坛游民
帖 子:513
专家分:41
注 册:2007-5-10
得分:0 

Kylix介绍

你听说过Inprise的Kylix项目吗,每个程序员都应该关心它。在我看来,它是Inprise/Borland公司15年以来最重要的项目。

你也许知道,Kylix是古希腊的一种浅酒杯,它与其它酒杯的不同之处在于它有一对提耳和一个伸到杯底的长把。就是那种当你旅行到Delphi城时喝酒用的杯子。

在1999年9月28日Inprise/Borland声明要开发一个“支持C、C 和Delphi的高性能Linux应用程序开发环境”时,Kylix正式启动,它是第一个基于Linux的高性能RAD工具。

当时的声明里提到:目前Kylix项目计划开发为一个基于Linux的双向可视化组件开发环境,可以开发GUI、Internet、数据库和服务器应用程序。Kylix项目包括一个新的高速的用原生代码编写的基于Linux的C/C /Delphi编译器,还包括一个Linux版的Borland VCL类库。这个Linux版的VCL既能简化Linux应用程序的开发,又便于移植Windows和Linux平台下的Delphi/C Builder程序。

这就清楚了,Kylix就是Linux下的Delphi和C Bulider,包括整个IDE,辅助工具和已经成功开发过很多应用的VCL。

初步评价

Borland公司一向以高性能、高效率的应用程序开发工具而著称,大家不会忘记DOS平台上的Turbo C、Borland C ,Windows平台上的Delphi、C Build和Java开发工具。以上这些产品都称得上是经典之作,尤其是以面向对象的Pascal为基础的Delphi,更是经典中的经典。

  Linux的兴起进一步推进了Internet的发展,使得低成本的Internet应用平台成为可能,但是开发工具的缺乏和开发工具较低的效率还是限制了Linux进一步地应用和推广。

  于是,Borland根据在网上的投票结果决定启动Kylix项目,开发基于Linux平台、以面向对象Pascal架构为基础的快速应用程序开发工具,也就是Linux版本的Delphi(Kylix)。事实证明,该开发工具部分功能已经超过了Delphi。

  开发效率提高
  Kylix整个开发环境和Delphi极其相似,使Delphi的用户几乎不用重新熟悉开发环境就能上手开发。Kylix使用的是一个经过优化的32位的编译器,直接编译生成本地编码。编译器方面的优势,使得使用Kylix的应用程序的执行效率非常高(比使用解释器的程序的执行速度要快5-50倍),尤其是在执行计算分析应用和大型的数据操作应用时,其高效性更加明显。

  Kylix 提供了一个解决方案来解决程序的开发效率、分发和维护方面的问题,这就是动态加载经过编译的程序包。动态加载包技术是独一无二的编译技术,它可以将应用程序进行分割,从而实现程序代码的重用;它还可以将应用程序的开发模块化,使应用程序在开发管理和维护上非常方便,当程序变更时,只需要将变更的模块重新编译,分发给用户,避免对整个应用程序进行重新编译和分发,从而降低了维护成本。动态加载包的应用使得应用程序的尺寸变得非常小,执行性能得到了进一步提高。

  Kylix的标准控件便于实现应用程序的快速开发。Kylix提供了165个可视和不可视的控件,并且都有源程序,可以被重用和扩展。

  用户通过Kylix提供的网络控件和向导,可以快速地开发出基于Apache的Web应用程序。Kylix提供了通过套接字实现Internet通信的控件,使程序设计更加灵活。

  易学易用
  Kylix是Linux环境下的第一个RAD(Rapid Application Development)环境。Windows下的开发者将会发现,学习使用Kylix将不是什么难事。


下面看看谁适合使用Kylix


对于Delphi程序员

Delphi开发人员在Linux下使用Kylix开发具有得天独厚的优势。首先,Kylix的界面和开发者已经熟悉的Delphi界面非常相似,比较容易上手。此外,Kylix保留了和Delphi相同的工具集(包括表单设计、目标检测、调试器和编译器),甚至新的库组件CLX模块,也是从Delphi VCL发展而来的,所以用Delphi开发的程序移植到Linux比较容易。也就是说,开发人员把Kylix和Delphi结合起来,只需掌握一套基本的技巧和使用相同的基本代码,即可在Linux和Windows上开发跨平台的应用程序。


对于数据库开发人员

开发人员使用Kylix可以在Linux里实现基于Oracle和IBM DB2环境的高性能电子商务应用程序。通过高速dbExpress数据库驱动器,开发者可以将现存的Oracle、DB2、InterBase和 MySQL数据库轻松地整合到应用程序里,并通过Kylix提供的一套功能强大的数据仓库GUI组件,可以快速开发出数据中心应用程序。Kylix使用SQL Monitor、SQL测试和调试组件对数据库应用程序的性能和反应能力进行测试,通过Cached Updates提升服务器的响应能力。


对于Linux开发人员

由于其稳定性、灵活性和很低的价格,Linux已经被广泛地用于Web应用服务器,并且正在迅速成为代替Windows的桌面选择方案。但是Linux上传统的开发工具却不尽如人意,首先是它学起来比较困难,此外,相对于Windows下高效的开发工具,它显然亟待改进。而现在,Kylix改变了这种局面。Kylix把RAD(Rapid Application Development)这一综合的开发环境引入了Linux,极大地加快了Linux下应用程序的开发。
Kylix里一些与Web开发有关的内容


对于Web开发人员

Kylix可以加速Apache Web服务器的开发。Kylix的NetCLX把浏览器、服务器和数据库开发技术结合起来,可快速开发出支持高吞吐量的Web应用程序。开发人员使用已有的65个Internet组件可把HTTP、FTP、SMTP和NNTP等Internet功能整合到应用程序中。


对于VB开发人员

Kylix的编程模块和VB中的事件驱动的可视化编程模块是相同的,所以,使用Kylix,VB程序员很快就可以在Linux里得心应手地编写程序,一如他在Windows里所做的那样。

Kylix里一些与VB有关的内容

事实上,在Linux里,除了Kylix外,还没有一个编程工具能跟VB在可视设计、交互调试器、内码编译器、数据库、桌面应用等方面如此接近。和VB不同的是,Kylix应用程序使用Kylix内置的内码编译器,速度非常快,一分钟可编译4百万行语句。

综上所述,我们可以看出,Borland为了尽量吸引有经验的程序员投身其中,可谓用心良苦。同时我们也看到,Kylix的表现的确非常出色,相信在未来的一段时间里,它一定会成为人们关注的焦点,并赢得它应得的成功。


惟有学习不断的学习!
2007-07-09 11:17
【色狼〗
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2007-7-3
得分:0 

潭老师的那本书,哎。。我也是看网上太多人推举所以就买了它当我的入门手册(已经有第3版的了,不过我的是第二版的)。可是潭老师的书并不象人们所传说的那样什么入门经典,新手必看之类的,我个人感觉他的书读起来不太利于新手理解。还好我买了另外一本才过了C的门槛。

2007-07-09 11:20
xinxinjob
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-7-9
得分:0 
谢谢了~~
2007-07-09 16:35
lid
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-7-7
得分:0 
lishizelibin谢谢你了!~! 太及时了!~!谢谢了
以后还有什么好的建议麻烦上传了!~~!呵呵

[此贴子已经被作者于2007-7-9 22:04:08编辑过]

2007-07-09 22:02
windflush
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:886
专家分:0
注 册:2007-7-1
得分:0 
Kylix
如果真的这么优秀的话,没道理没听过啊.
真的有那么好吗?找个机会试试。

2007-07-09 22:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-152416-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.597306 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved