如何学习 C 语言?

 新闻资讯     |      2020-01-25 20:24

  如果你不知道如何学习C语言,那么,跟着下面的学习路线图来学吧,附带学习视频哦!

  这是哈佛大学的公开课《计算机科学导论》的主页,网页内容每年都会更新,现在是2014年秋季的课程内容。上面有授课老师提供的lecture notes, problem sheet, quiz,以及最重要的是附带字幕的最新课堂录像。

  这个课程是用c语言来讲解的,来上课的学生也是大概一半人没接触过编程。看完这一系列视频,相信题主会对编程的方法论、计算机的一些基础知识,以及c语言都有很好的理解。

  另外,真的要赞叹这个课的老师相当用心,课堂氛围也非常活跃,相信你会感兴趣的。

  全屏也是可以的,而且老师讲课的场景会缩小到右上方。与上两张截图不同的是,这次有字幕(只需要点击右下角的“cc”)。

  如今决定学习任何一门其他语言之前,都要先考察这个语言有什么成功项目吗?唯独C语言没有必要问,因为世界上所有最最重要的的系统中,都必然有C语言的身影。比如操作系统内核、高级语言底层等等。

  为什么C最适合担任系统核心?主要原因可能是C语言具有和汇编语言的对应性,一条C语言代码,对有经验的人来说,可以转换为一条或多条汇编代码,也就是说编译结果具有可预测性。C代码不会在被编译时被加上奇奇怪怪的修饰,也不会在二进制兼容性方面带来大问题。这种稳稳当当的语言,一切都在掌握之中,一切荣耀归属于coder,一切错误也归罪于coder。

  学习C语言的同时,就自然而然的理解了硬件与操作系统的浅表一层。比如int有几个字节的问题,已经是QQ加群验证是否是程序员的一个标准了(笑),这从侧面说明了学习C语言时确实会关心底层软硬件的实现。C语言简单的基于值类型的数据类型体系(引用靠指针,指针本身也是值类型),保持了和硬件底层的一致性(即内存、缓存、寄存器只能保存值),不会出现其他语言比如C#那样既有值又有引用反而对理解底层实现制造了障碍。

  从某些角度上讲,C语言从设计上来说并不是为了让我们更好的写逻辑代码而设计的,它真的是“只能是这样”,没有对错好坏之分。因为计算机体系结构就是这样的、汇编就是这样的,所以C语言大致也只能是这样的,谁也不能随意捏造它。它足够简单,评论它的设计优劣意义不大。

  废了这么多口舌,是为了坚定思想,端正态度,只有抱着“最好”的态度,才能排除杂念,勇往直前。时代在进步,某些东西易逝,而另一些东西持久。很多编程大师都用亲身经历告诉你,C语言永远值得用最纯粹的态度去学习。

  我们说学习任何东西,都有先把书读厚,再把书读薄的过程。也就是说,先学习大量知识和细节,然后总结归纳、提纲挈领,就彻底掌握了这门知识。

  这书中英文版均可,前面谈到过,C语言本身特性并不多,所以这些年来从C89到C99到C11,只是增加了一些细枝末节的改动,现在你用C89的书仍然没有什么大问题(当然还是用第二版C99吧)。不用买一堆入门到精通、高级C、本质论、Primer互相参照。C语言的教材、参考书都是这薄薄一本。

  C语言的语言本身很容易“精通”,一旦你理解了指针、函数指针等问题,基本知识方面就横行无阻了,很少会遇到完全没见过的语法。

  C语言基本学习过程真的没有太多好讲的,假设每天学习两小时,每周学习5天,只要动手多写例子,把例子保存好随时翻看,那么C语言的语法基础很快就能全部过完一遍,估计半个学期的时间就能看完。难点可能是在指针的使用,这需要多看资料、多画图、多写代码尝试,给自己点时间强行突破即可。

  但是问题也在这里,由于宏和指针的存在,万事皆有可能。很多经典的C代码,真的是没见过之前根本不知道还能这么用,举个入门级的例子,Linux内核中的一个通用链表:

  C语言写的经典代码经常会用这种“过度简洁”的语法,初学之后会看得云里雾里的。如果你能看懂,又会有一个更大的问题——这个list_head结构体里面,没有数据。自定义数据应该放在哪呢?这又需要深一步研究了。

  稍微高深点的比如任意动态语言的源码,比如Lua的源码,对于刚学懂了C语言的同学来说,真是每个字都懂,连在一起就不认识的感觉。还有一些经典算法,比如Subversion的源码,都很值得深入分析,只要理解一个模块,就会收获巨大。具体的例子这本书里提到好几个:

  可能是知识结构不足,本书后面的例子我读起来有点不清晰。对C语言学习者来说,前几个例子非常值得一读,可以迅速意识到自己的不足并迅速成长。本书建议先找电子版试读。

  2、安装Linux虚拟机,桌面版本的,比如Ubuntu,现在貌似“深度Linux”挺火,没试过。

  1、明白基础以后,缺少大量练习。而大量练习本身会非常费时间,因为在顾及语法的同时要顾及逻辑问题,捉襟见肘。这时候的初学者,逻辑抽象能力和语法使用都是半吊子,非常难受。

  2、阅读代码方面,C语言的成熟工程代码一般会比较冗长,函数中间夹杂着很多宏和指针操作,我阅读的感觉是读后面忘前面,非常难入手。如果不明白某个函数的功能,强行将其读懂非常费时费力,容易放弃。

  我个人大胆给出C语言进阶的一个相对缓和的路线、实现链表、可变长数组、哈希表等基本数据结构,实现方便的string结构体。然后大胆的用在自己写的程序中。不要怕写的有BUG,也不要怕效率不高。现代编程中容器是非常关键的武器,没有容器寸步难行。而编写容器时会练到封装、指针、内存分配,都是C语言进阶时极其重要的方面。

  2、如果工作学习中用到C语言就再好不过,比如现在很多本科、硕士毕业论文都要用C语言实现,那么这时候抓住机会多练练,是最好的。

  类似有很多,北大、北邮这种大学都有类似的网站,上面不仅有题目,还有算法、有答案、有提示,还能直接在网页上做题。刷题可以获得及时反馈,一旦你AC了3道题,那种成就感可以让你继续下去,哈哈。不过除非你兴趣就是算法本身,那么刷30道题基本就可以了,毕竟这种刷题会猛烈地提高算法能力,但是对架构能力的提升几乎没有任何作用,对大多数人来说不建议刷太多。

  学习好的动态语言有两方面好处:第一:表层来说,能迅速提高逻辑代码的编写能力。用C语言构思半天才能写一点的功能,用动态语言会快速的多,动态语言将我们从内存分配、容器等基本问题中解脱出来,直接实现我们想要的效果。用动态语言实现之后,可以用C语言仿写这些逻辑代码,相当于按图索骥,直达目的。

  第二:深层来说,较高级的语言对底层的语言编写有强烈的指导意义。我个人在工作中使用C++用了很长时间,但是总感觉遇到瓶颈无法突破。直到我学习了Python,写了一两个比较复杂的工具,从另一个角度突破了逻辑设计的屏障,才感觉到编程水平有了明显提高。

  第三:在掌握了Lua或Python后,再找资料一边学习一边看Lua和Python的C源码,对提高C语言水平有实质性的帮助。

  这里举一个简单的例题:一个文件中有很多对ID和字段,这些ID和字段对分别代表另一个文件。而另一个文件内容可能会链接到更深一级的文件。怎样读取这些文件组成一棵树呢?

  这个问题对能力达到一定水平的人是基础问题,而对于初学者来说可能是一个门槛。这种问题我的建议是用Python或Lua的表、字典来解决,然后理清思路之后,改写为C代码。

  总之C语言的学习是知识点少、难点多。上面针对初学提供了一些建议,进阶方面写了很多个人的心得体会,希望能给学习C语言的初学者和进阶者提供一些帮助。

  如何学习C语言这是个挺重要的大问题,读者若有意见和建议,可以讨论交流,有问题我可以修正。

  在实际教学过程中,有不少同学觉得C语言学习比较困难,就我的理解,主要有两点原因。第一,C语言的语法知识太多、太琐碎;第二,反复地做算法类的编程练习,不感兴趣,不愿写程序,进而觉得入门困难。

  首先,入门时仅讲最少需要的语法知识,一些额外的语法知识先不要学。比如++、--、复合赋值运算符、逗号运算符、switch-case语句、do-while语句等。实际上不学这些语法,也可以写出完整的程序。

  其次,足够的编程量是必须的,可以充分利用在线OJ系统,会给你一个正反馈,并在初始学习编程时养成严谨的习惯。

  再次,为了培养同学们对编程的兴趣,我们采用了通过游戏开发来教编程的方式,可以参考:知乎专栏。同时,C语言中的相应语法知识,如函数、数组、指针、文件等,都是在开发游戏的实践中,遇到问题,学习相应语法知识后解决问题,从而得到更深的理解和体会。

  最后,有条件的话,还是和同学一起学习,这样可以互相交流、督促。后面开发较大的游戏练习时,可以进行有效的团队合作。

  希望你能和我的学生一样,写代码写的来不及吃饭、来不及睡觉,经过辛勤的努力,最后拿出非常自豪的游戏作品,向同学、朋友、家人、老师进行展示。。。在这个过程中,你的C语言会提高很快的。

  C 语言是整个计算机体系的基础,往下可以操作硬件(不止X86计算机,还有ARM,DSP,单片机等各种微处理器)写Firmware,写驱动、写OS,写编译器,往上可以写 App,并且大部分的计算机书籍里的算法都是C语言描述的。

  所以学会了 C 语言,就是掌握了软件领域的必备技能,以后再学其他的比如C++,Java,各种解释性语言、就是小 Case 了。

  下图是一个网上流行的程序员“鄙视链”。其实我想说的是,还是有一定道理的,哈哈哈,笑而不语。

  我初学 C 语言是在 2005年大二,那个时候,上课的模式是老师在上面讲,我们在下面听,然后就没有然后了,因为没有电脑练习,我根本就没有机会在课下了解更多的东西。学完了一本书,C 语言是干嘛的我都不知道,那个时候我并不知道 C 语言是用来写软件的,更何况别说软件了,电脑都没怎么见过。

  我们当初用的教材名字叫 《VC++ 语言程序设计》,这导致我很长一段时间都没不知道VC++,和 C++, C 的区别,OMG!!

  对 C 语言的深入学习是在研究生期间,我认真地从头到尾翻了一遍H.M.Deitel 的那本 C++,有了电脑简直如虎添翼,我有阵子天天在宿舍编程。对了,我是在学习C++的时候,顺带学习(复习)的 C 语言,反正 C++ 的书上总有会 C 的。

  C语言的语法也就是变量,数组、指针、表达式、逻辑操作、函数,宏定义等等。学习这些先买一本入门级书籍,其实大都差不多,最经典的就是谭浩强的那本了,虽然在知乎上没少被人黑,但是毕竟流行了这么多年,总归是有可取之处的,其实作为入门书,你不能指望从它里面得到你想知道的所有东西。

  这一点很少被C语言入门书提及,但是你要想写出一个像样的程序的话,标准库必不可少。推荐这本世界级C语言专家编写的《C标准库》。

  相信大多数人都是使用的Widnows,那么就下载安装一个Visual Studio吧,用哪个版本?最新的 VS2017 毋庸置疑。

  试着写一些简单的代码,比如 Hello World,文件读写,数学操作,常用算法,等等。

  看着人生第一个自己开发的程序,会有很多的成就感,并且在写程序的过程中,你的编程能力会有质的飞跃。

  另外需要说明的是,想在 Windows 上写一个有界面的程序的话,还需要学习Windows API,不过这仿佛是 C 语言之外的东西了,单单学习 C 语言,一个控制台程序就够了。

  初学编程,费了偌大的劲,理解了这,理解了那,竟然只是在黑框下打印出了几个数字。

  我觉得,初学一门编程语言一定要用合适的方式培养兴趣,黑框显然不是一个好方法。

  所以,我建议在学习c语言的过程中,把系统API什么的也加进去一起学吧,教人写个带界面的程序比教人成天面对控制台程序,效果可能会好很多,因为这让人觉得学习c语言能做事情。

  我是在学会了windows编程的时候,才对编程产生了很强的兴趣的,说说我当时写的一些小程序,简单但比较好玩,适合培养编程兴趣(代码量依次增大):

  1、点击,打开一个对话框,问你是猪不?然后告诉他,说不是的会自动关机,让他选吧。要是他点是,就嘲笑他,点不是,就关机吧。

  2、桌面下雪程序,在冬天大家都期待下雪的时候,做个简单的下雪程序,用到windows几个基本的api就行了,把这个程序发给大家,不懂的人会觉得非常神奇。我曾经发给几个mm,她们貌似都非常喜欢。

  3、桌面贪吃蛇,就是用桌面图标玩贪吃蛇,当时听说的时候,觉得太有创意了,网上曾风靡一时啊,但是原理其实很简单,如果你把这个演示给你的同学看,他们会把你视为偶像的。

  4、然后呢,对qq有兴趣的,去看看早期的qq是怎么写的吧,我记得有一篇《qq是怎样练成的》,还有源代码。改编一下,补充内容,甚至可以去参加学校的软件比赛去了,哈哈。

  写几个好玩的程序以后,相信你就知道该如何学习编程了,要多给自己找乐趣。

  如果之前没接触过编程,那么我建议不要从C入手,大多数新手都是被扼杀在黑框之中。先学点HTML和CSS,在学点PHP或PYTHON吧,等对程序设计有点概念之后在去学习C,往往效果会更好。

  如果你坚持选择C的话,那么我推荐两本书,先看《 C Primer Plus》 ,网上有电子版,但是最好买一本纸质书,然后再看《C程序设计语言》。

  可以选择C语言之父Dennis联合编写的《C程序设计语言》,很薄的一本书。

  等到掌握了基本的语法之后可以到各高校的OJ平台上做一些题。初学者推荐Welcome to Hangzhou Dianzi University Online Judge,稍微简单的;后续可以到ZOJ :: Home和Welcome To PKU JudgeOnline。在这个过程中就需要学习一些算法了。

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

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

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

  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语言”了。

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

  不同的编程环境会造就出不同思维的程序员。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(不是或者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 语言程序案例,把算法和语法结合起来,通过引导大家由浅入深地编写 C 程序,让大家掌握 C 语言。将从中学会 C 语言语法、数组、模块化程序设计指针、文件的输入与输出等。

  :通过 3 个 C 语言编程实例,让你在利用递归解决实际问题的过程中学习递归并掌握其核心思想。

  :使用 C 语言实现 LRU 缓存,从中学习 LRU 缓存的基本概念、C 语言相关编程技巧,双向链表的 C 语言实现以及哈希表的 C 语言实现。

  :使用 C 语言完成一个简单的通讯录。会涉及到结构体、数组、链表等重要概念。

  :用 C 语言做一个简单的计算器,进行加、减、乘、除操作。学习 C 语言的基本语法,与输入与输出。

  通过 C 语言实现一个简易计算器,用于解决任意长度的有符号整数的加、减、乘、除运算。将利用全新的数据结构来表示大数,并将新数据结构存储的大数转化为字符用于显示。以及基于大数新的数据结构完成加、减、乘、除的计算算法设计。

  :使用 C 语言实现聊天室软件,学习并实践基本的 Linux socket 通信的相关技术,加深对 TCP/IP 协议栈的理解。

  :使用 C 语言实现一个Web服务器。将会学习 C 语言网络开发,epoll IO 复用机制,熟悉Linux下的C语言程序编译方法,Makefile编写等技能。

  :通过实现 linux pwd 命令,以理解 linux 文件系统的基本概念及内部实现,并熟悉linux系统与文件系统相关的系统调用接口。

  :更加深入的理解套接字编程模型,并且了解应用层协议(FTP)如何在套接字基础上定义。本项目实现了支持 list,get filename,quit 等命令的 FTP 服务器。

  :通过 C 语言实现Linux who命令 项目的学习,可以掌握 Linux 操作系统为上层提供的访问系统数据文件的接口。更好的理解 Linux 操作系统工作的原理。

  《C 语言实现Linux cp 命令》:通过完成C 语言实现Linux cp 命令项目的学习,可以掌握Linux操作系统中的文件IO相关的系统函数和目录相关操作的系统函数,比如open, write, opendir, readir。深入了解Linux环境系统编程。

  :本课程学习 linux 目录与文件属性,使用C语言实现 Linux ls 命令。其中涉及到 ls 的原理,如何获取获取文件的属性,掩码的相关知识。认识linux系统函数opendir(),readdir()等的调用方法。

  :通过完成一个C语言实现Linux touch命令项目,学习基于LINUX环境的系统编程技术,尤其 Linux 文件 IO 操作相关技术。

  :带领你学习用C语言实现 ping 命令。通过本项目中你可以更深入地理解 TCP/IP 协议,套接字编程,掌握C语言进行网络编程的技巧方法。

  :使用 C 语言来实现一个字符版 Flappy Bird,感受不一样的风采。本课程学习后将会熟悉C语言,以及绘图库ncurses的使用。本课程适合有C语言基础,想做练手项目的同学,可以有效的学习ncurses绘图库的使用,做一些有趣的事情。

  :将在Linux平台使用C语言编程,在终端界面上玩贪吃蛇。本课程分为三个实验,实验一介绍了图像库,实验二绘制游戏图像界面,实验三实现贪吃蛇。逐步为同学们讲解一个游戏的制作过程。

  :用最简单的代码来实现五子棋游戏,帮助大家复习基础知识,学习了如何设计并实现一个五子棋游戏,巩固大家的基础知识。涉及到C语言的基础逻辑判断,程序设计与编写。

  :2048是之前十分火爆的一款益智游戏。将使用 C 语言完成一个2048游戏。适合对C语言有一定基础,想做项目练手的同学,本课程学习后将会了解C语言,以及绘图库ncurses的实用。

  2,自己写一遍3,看库函数源码是怎么写的4,Google下,看各路高手是怎么写的5,再重写一遍

  不了解你学习的目的,只能以自己的经历给一些建议,可能有点落伍,觉得有用可参考。

  CS专业,大学必修课,大一开始接触学习C语言,毕业后大部分时间C都是主要开发语言(嵌入式软件开发,C还是首选),学习基本是自学(大学逃课厉害)。

  学习路线:谭浩强经典教材--数据结构--C语言高级实用编程(貌似这个名字,记不清了)--Unix高级环境编程--编译原理--操作系统原理与实现--TCP/IP网络编程,中间穿插一些其他参考书籍。C本身基础打扎实后(语言本身就按照书上顺序学习就可以了,重点是指针要吃透),熟练掌握数据结构和算法(两大核心,需要一直用功的),建立严谨的逻辑思维和流程,然后就是应用了(毕竟C作为一门语言是一个工具,拿来用的。这个涉及到的东西太多了)

  学习C,个人觉得首先是兴趣,耐住寂寞和可能的无趣。因为C的特性,终究不是速成法,没有办法象其他高级语言那样很快可以开发应用工具出成果,而且很多C开发环境和编译工具在别人看来都显得高深(可自行脑补无鼠标,命令行,控制台,makefile等,现在可能好点吧)。所以坚持不容易,这点如果克服不了很容易半途而废。我个人心得:自我催眠很重要。告诉自己这种语言很牛,是几乎所有OS的开发语言,可以直接操作底层,可以让别人觉得你是高手等等。甚至可以把自己想像成闭关练内功的大侠。

  其次,我觉得就是学习中不断实践了,象疯狗一样上机实践,代码是一个字母一个字母敲出来的。先不要想着自己要开发什么应用这些,从最简单的一个一个程序开始学习。(不要小hello world以及打星星菱形三角形,这个是基础)如果不会,哪怕敲书上的源代码都可以,加printf总会吧,设置断点会吧,不断调试学习,了解程序思路。直到自己可以独立编出程序来运行无误,并逐步强迫自己养成先设计后实现的习惯。在这个之后,进阶的关键就是:从一个个独立的程序到真正实现一个应用或工程,尝试多个文件模块化实现功能,编译成库链接形成应用,学习并熟练使用makefile。感受自己真正用C开发出来一个应用的喜悦(俄罗斯方块,贪食蛇,随便什么)大多数C初学者都是在这步止步不前的。多读优秀的作品并分析领会,总结成自己的东西,从而在这条路上越走越顺畅。(天下代码一大抄,看你会抄不会抄)

  最后,其实我想表达的是:等你进坑后才发现,C语言本身不难,它只是一种和机器沟通的工具,难的是如何用它沟通(自己的设计思路,相关知识沉淀积累)

  首先确定你所说的学好是个什么概念?是语法层次的熟练?考试的满分?写出算法导论的算法?可以看懂别人的代码?还是可以自己写出个具体的应用?

  我觉得,自顶向下的考虑学习C语言是比较清晰的,还有不同的层次要求需要不同的对待

  首先大致了解下C语言在工程中的应用领域,比如学术领域,工业控制,电力电子,电信通讯,都是C语言应用比较多的地方,再有是互联网,主要应用在大型网站的服务器后台服务方面,你对哪个领域感兴趣,就去了解下此领域中C语言写出的都是什么东西,用来完成什么功能,为什么得用C语言而不用其他语言,有了感性上具象的认识,就比较容易学进去

  1. 应付考试层次,摩臣2注册或通过C语言学习做入门找编程感觉,再转而学习其他语言的:看《C程序设计语言》这本书,一本即可,然后安装ubuntu或者fedora等distributions,在其上写程序,linux环境是学习C语言最好的平台

  2. 能看懂别人的代码,或以后的职业发展是做程序员的:《C程序设计语言》这本必看了,然后找个别人的口碑不错的代码通读,期间进补算法知识和操作系统知识,等到你可以完全看懂并且甚至可以模仿人家写个应用的时候,恭喜你,你可以用C语言混口饭吃了

  3. 把写好程序当作人生理想的:这要说的就好多好多了,呃。。。我还是不说了以免吓坏初学者,哈哈

  谈谈我的经历吧。我建议把c语言当作第一门语言,它对建立自己的编程思维帮助极大。在学习c语言之前,用一本计算机科学导论或者是计算机科学概论,入门计算机原理和操作系统。然后学习c语言,就不会太难了。开始学的时候,可以在网上搜一些小的简单的例子。之后,还是要看书。书知乎都有推荐的。

  C语言才开始学的时候,虽然是面对的黑框框,但是你自己可以把它变得很有意思。比如,你可以自己和电脑对话啊;比如,可以实现简单的数据结构和算法啊,虽然显示的只是黑框框的数字,但是可以想象那个数据结构的存在。小孩子,玩泥巴都可以玩一下午。还是要自己找乐趣,黑框框也能玩出花来。