开学办理的移动宽带,赠送的部落冲突账号赠送要怎么用

你正在使用的浏览器版本过低,将不能正常浏览和使用知乎。学习c语言需要什么基础?学习c语言看什么书?学习c语言的心得体会
查看: 1639|
摘要:   计算机行业发展非常快,大学里的教育基本都跟不上实际的社会需求。如果你所在的学校还在指定大家使用谭浩强的教材,或使用VC6.0来教大家上机实验,那你不妨看看本文,这里有一些建议可以帮助你不会脱离社会太远。   考虑到这是 ...
  计算机行业发展非常快,大学里的教育基本都跟不上实际的社会需求。如果你所在的学校还在指定大家使用谭浩强的教材,或使用VC6.0来教大家上机实验,那你不妨看看本文,这里有一些建议可以帮助你不会脱离社会太远。
  考虑到这是一个过来人感觉很基础,但是对于初学者又觉得困难重重的问题,我想如果这篇文章要想写得不让你觉得专业名词扎堆,内容高深莫测,读完还是不知所云,那最好的办法也许是,我们通过沟通的方式把整个「C语言应该怎么学」的问题由小及大的展开,慢慢来谈。
  在开始之前,我们先来做一个小测试。
  一、小测试,你准备好学习C语言了吗?
  1.你是否听说过二进制数,他们是如何进行运算的?(基本的数的进制知识)
  2.你能说出一个最小的计算机系统由哪些部分构成吗?(基本的计算机结构知识)
  3.计算机是如何存储图像的?(数字化原理)
  上面这三个问题,能回答的同学举手。如果你举手了,那么我们进入下阶段的讨论,否则,我将告诉你,你现在最重要的事情,是赶紧找一本《计算机科学导论》把预备知识补充好。
  因为——
  C语言说到底是一门以内存为中心的编程语言,你能不能学懂它,其实很大程度上不是取决于你智商高低,而是你是否拥有扎实的计算机结构、存储、运算原理方面的知识!!
  在这里,我想强调,任何新知识的学习都是有一定的前提条件的。C语言学习的前提条件就是,对计算机系统要有一个整体的,科学的基础认识。脱离了这个基础认识,一切都很困难。
  所以,有些同学学不会C语言,不是因为他们智商不行,而是因为他们没有准备好。
  我花时间写这篇文章来给大家讲C语言的学习,当然是希望大家真正的学会、学懂C语言,并能够真正感觉到它的用处,所以很抱歉我不会像培训机构那样,告诉你“零基础”就能够开始学。但如果你真的按照我说的去做,那么至少从现在起,你确实是开始有点“学院派”的认真了。
  在这篇文章的最后,我推荐了一本我曾经读过的《计算机科学导论》。这本书可以说是我的启蒙书,我读过,真心觉得好,所以推荐给需要的同学。
  好了,接下来我们进入C语言的学习过程。
  二、学C语言到底学些什么——「语法」和「函数库」
  C语言学习的关键,是要先搞明白,学C语言到底是在学些什么?
  我这么一问,有的同学就要翻开课本,指着目录说,我知道我知道,有变量,数据类型,循环语句,函数,哦哦哦,还有指针等等!
  很遗憾,如果你以为学习C语言就是学习这些东西,那你得赶紧纠正一下看法,否则接下来的学习会困难重重。因为我曾经就是这么掉到坑里的,这种狭隘的观点让我浪费了大量的时间去学习琐碎的细节,又让我迟迟不能接触到更重要的知识,结果是眼高手低——知道许多别人不知道的无用知识,但是又写不出什么真正像样的程序来。
  所谓「语法」,就是入门教材里最着重讲解的内容。也就是那些所谓的变量、数据类型、分支判断、循环、函数、指针等等。
  这些内容比较枯燥,但是好消息是这些内容并不难,都是一些格式化的东西。只要你多练习,就会自动的刻在你的脑子里,成为一种下意识的习惯。
  但是「语法」本身其实没什么用。因为它只是一种格式规范,你学得再好,也不能引导你写出厉害的程序。因为在软件设计中,实际上最核心的部分还是在于其「函数库」部分。
  什么是「函数库」?
  简单来说,函数库就是别人编写好的C函数,直接提供给你用,你只要调用里面的函数,就能实现一定的功能。例如printf()函数,你肯定知道,只要调用这个函数,你就能够在那个黑糊糊的窗口里显示一段文字。你并不明白printf()的内部工作原理,但是你知道你只要按照说明去调用,就能够实现对应的功能。
  这就是函数库——别人写好的,打包送到你面前,你可以自由调用来做各种各样的事情的函数集合。
  我来说几个来自函数库的函数,例如Create Window Ex()函数可以用来创建一个窗体(这个函数由微软提供),例如GaussianBlur()函数可以用来对一个图像进行高斯模糊处理(这个函数由OpenCV提供),再比如evhttp_new()函数可以创建一个HTTP服务程序(这个函数由libevent提供)……
  其他还有什么库函数?太多了。从控制网络通信,到截取视频画面并分析其中的人脸位置,到加解密本地文件,甚至包括微信收发消息,抓取淘宝商品信息……库函数的数量和有用程度远远超乎大家的想象。
  诶?你从来没听说过还有这些东西?课本里也没提到?
  那是因为你看的是入门教材,着重讲解语法,顺带提到了少量的C语言自带的库函数而已。事实上C语言包含的库函数本身就有不少,但是更多更强大的还是许多第三方库函数,例如我上面提到的这些。
  重点是在于,我想告诉你,库函数才是你学习C语言并将其应用于实际的关键!!
  学会调用别人的库函数,甚至写出自己的库函数,都是极其重要的。因为一个函数,本质上就是一个功能单位。你拥有的基础设施越多,你的发挥空间越大。道理就是这么简单。这就是我需要向大家强调的第二个观点,要想写出实用的C程序,一大关键就是研究并学会使用各种库函数。
  你看见隔壁王二写了个三维程序能让一个彩色的立方体在空中旋转?快找OpenGL库函数来用。什么?刘大宝写了个网络软件能在局域网里聊天?快找Socket库来用。
  看见了吗?库函数有多重要?
  但是,函数库的学习并不是孤立的。许多库函数背后需要一定的领域知识支撑。同样如我第一个观点所述,需要预备知识。学懂一个函数库,代表的不仅仅是明白如何调用那么简单,而更反映了我们对一个特定领域——网络、数字图像、密码学、操作系统等的认识。
  三、基本的学习过程与一般规律
  如我前面所述,C语言学习主要是以语法入门,然后到函数库。再具体一些来说,包括以下阶段:
  1.学习基础语法
  2.学习简单的少数几个C语言自带的函数
  3.学习一些程序设计的基础知识(数据结构,算法)
  4.学习更多更强大的C语言自带的函数
  5.学习一些特定应用领域的基本理论知识(操作系统,数据库,网络,图像……)
  6.应用上一阶段学习的到知识进一步学习其他人提供的函数库(网络处理、操作系统管理、图像、密码学等等)
  对于本科阶段的同学来说,着重学好1-4,有选择的学习一下5-6,做一些小作品出来,就已经非常非常不错了。这就是一般的学习规律。说得很简短,但是要做到真的很不容易。
  四、参考书籍
  首先第一本,也是我认为最重要的书,是这本《计算机科学导论》。
  可以说,这本书是对我人生影响最大的两本书之一。这本书通俗易懂,知识面广,但又具有一定的深度。真是因为读了这本书,才让我建立了对计算机科学合理的基本认识。在不涉及太多的数学原理的情况下,这本书清晰的揭示了包括计算机的基本构成,CPU运算的原理,内存、硬盘、光盘是如何存储数据的,编程的基本原理(机器语言、,结构化编程语言,面向对象编程语言),以及网络、数据压缩等。
  说白了,就是一本科普书。但是是一本伟大的科普书。入门者的福音书。
  然后,第二本,就是关于C语言语法的书籍了,说实话这部份我已经没有印象看的什么书了。因为我这个人有个毛病,就是喜欢东翻翻,西翻翻,哪里不懂就到处找书。可见这个部分其实没有大家想象的那么固定,你只要找到一本自己看得懂的书,就是好书!不必太过于拘泥于书与书之间的优劣比较。
  最经典的C语言入门书籍许多人肯定要说是K&R的那本。但是其实这本书对大多数初学者来说还是略难,如果有兴趣也可以读一读。但我更建议你了解一些C语言之后再转过来看看会更好。
  柴田望洋的《明解C语言》最近是一本广受欢迎的亲切的C语言入门书。
  昨天我专门到书店翻了一下,这本书确实很不错,亲切,谦虚,易懂。但我想也未必适合所有人。如果你是希望学习曲线平缓一些的,可以考虑看看。
  啊,差点忘了,还有一本咱们国内的赵岩先生写的《C语言点滴》也有不错的反响,也许大家也可以找来看看。
  基本上,上面这些书就能帮助你比较轻松的入门了。其他书籍推荐,我会陆续也写出来。今天实在写不了这么多了。
  但是,再补充一本,如果对于那些已经学得差不多的同学,必须得看看下面这本,这是我的至爱之一啊!^_^那就是吊炸天的《C Standard Library》。
  好好看看这本书,它是真正的顶级教材,因为——里面包含了标准库实现的完整源码,以及作者在实现时的思路讲解。是一本值得收藏的超级力作。让我们一睹顶级程序员的思维杰作。(吐嘈:这本书的翻译还是有一些值得修正的地方,所以能收英文版的同学就直接搜英文版。)
  五、晋级——通向更高境界之路
  学无止境。更专业的学习至此其实才刚刚开始。
上一篇:下一篇:
Powered by &
这里是—这里可以学习 —这里是。
栏目导航:> c教材我刚学完谭浩强的c语言入门教材,我想深入学习c,我该看些什么书
c教材我刚学完谭浩强的c语言入门教材,我想深入学习c,我该看些什么书
weiwenwu & &
发布时间: & &
浏览:1 & &
回复:7 & &
悬赏:0.0希赛币
c教材我刚学完谭浩强的c语言入门教材,我想深入学习c,我该看些什么书
c primer plus
smpan01 & &
16:00:30 & &
& & (0)(0)哦那就c primer plus找些例子来做下...没有实践就没有...
16:00:30 & &
& & (0)(0)那本书入门挺好,可是对于语法介绍的不够细,深入学C,可以找些用C编的实例看看,在实践中提高。想深入下去就要看LZ想干什么了,C对底层的操作比较多,所以操作系统,计算机原理都可以看
smoothie & &
16:00:30 & &
& & (0)(0)c和指针
smorgea & &
16:00:30 & &
& & (0)(0)主要还是要多多联系,多多读代码!!!要看的话可以看看The C Programming Language!
16:00:30 & &
& & (0)(0)C陷阱与缺陷
16:00:30 & &
& & (0)(0)具体看什么书,要看你达到了什么层次。什么适合你才是最重要的,我认为,你学习谭浩强的书,你应该算是一个初学者,不适合看太深的书籍,学习要循序渐进,建议你先进行一下上级实践smpan01 & &
16:00:30 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&学习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语言,你还要具体情况具体分析。
写到最后,还有非常非常重要的一点没有提及──代码风格,从最开始学习就必须强迫自己模仿最优秀的代码风格。因为代码风格太重要内容也太多,我会用专门的一篇文章来详细讨论,请大家关注《程序员之路──关于代码风格》。}

我要回帖

更多关于 中国移动宽带活动 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信