先说下自身的情况吧,我非计算机科学科班,本科专业学的是电子信息工程,学过模拟电子和数字电子技术,课程与计算机科学专业有点差异,算是半个科班。因此我的计算机体系知识构建,基本都是靠自学,只要掌握正确的学习方法,自学也可以构建起来完备的计算机知识体系。
计算机科学技术CS(ComputerScience)作为一门专业课程,就和其他工科课程一样有自己的理论体系,如果你是计算机专业的同学不用我来教该学什么,计算机专业大学四年学校教的那些就是基础,别小看在学校学的那些看起来没啥用的课程。这有一份中中科大的计算机技术本科主要课程结构安排,科班计算机专业培养路线:
操作系统看的是清华学堂在线和哈工大李志军老师的操作系统,数据结构可以看浙大陈越和何应钦老师讲的数据结构,计算机网络参考哈工大的计算机网络课程,这些课程都是免费的公开课,可以在慕课网或者b站找打视频课程。
最近在知乎上回答了一些C语言学习的问题,发现很多C语言刚入门的同学,对于为什么要学C语言,怎么学好C语言这门课有不少的疑问,很多问题也是我在刚入门时遇到过的。
于是,写下这篇C语言学习路线,解决同学们关于如何学和怎么学的问题。
C语言在计算机体系中,占据着不可替代的位置,起到承上启下的作用。它的语法是很多高级编程语言的基础,比如说Java、C++;向上可以学习高级编程语言,向下可以学习计算机组成原理、操作系统等等偏基础的计算机基础知识。
想要完全掌握C语言,可以先了解C语言的学习内容:
如今C语言入门书太多了,你去网上商店或者图书馆搜索,教材多如牛毛,这就导致很多初学者不知看哪本书,光看名字长的都一样,无从下手选择!
比如学到指针、结构这块内容,感觉似懂非懂,这些内容对于初学者来说是比较难的,尤其是指针,初学者最容易懵逼。但又临近期末考试,老师为了加快教学进度,几乎照着PPT一段段读过。
说起来还要感谢学校的'天书教材',为了搞懂这些内容,我自己找了其他C语言图书和视频,对比着学习,彻底搞懂了C语言基础内容。
现在回头看如果能一开始就接触这些优秀C语言教材的话,学习起来应该能轻松不少。
主要从C语言学习三个阶段来推荐书籍:
群众的眼睛是雪亮的,豆瓣评分就能看出来。
都2022年了,大家都知道,谭浩强老师的C语言程序设计教材不适合入门,因为早几年这本书是很多高校的C语言教材,但是教材质量一言难尽,特别是指针部分看完仍然一头雾水。
但我还是先替谭浩强老师打个不平:在特定历史时期下,谭老师教材确实挺好的,但是现在不推荐了!
在国内优秀C语言教材还比较缺乏的情况下,谭老师的C语言教程,一直作为C语言教材的经典,这是完全没问题的!
我记得B站教C语言的郝斌老师,也推荐谭老师的教材。
毋庸置疑,这是一本经典好书,被称为C语言圣经。本书作者是C语言之父DennisM.Ritchie和著名计算机科学家BrianW.Kernighan合著的一本介绍C语言的权威经典著作。
书很薄,短短两百多页,从helloworld开始讲起,在短小的篇幅里,手把手教你写了stdio.hstdlib.hstring.h当中大部分例程,实现了二分查找、快速排序、二叉树、哈希表这些重要的数据结构和算法。
但是,我要说但是,神书虽好,不适合初学者作为C语言入门图书,否则你会被劝退的。当你看完前面推荐的入门书籍,编写过一定量的代码,再来看这本书,一定会有醍醐灌顶,豁然开朗的感觉。所以我建议你先购买收藏起来,等入门之后再来看,效果更佳!
这本书是C语言入门的经典教材,内容很全面,循序渐进,非常适合自学,详细讲解了C语言的基本概念和编程技巧,由于内容全面书比较厚,需要一定的耐心来仔细品读。
全书共17章。
计算机小白如果要自学c语言的话,可以尝试先把浙大翁恺老师的C语言程序设计视频课学完,视屏课程重点更为突出,再来自学《CprimerPlus》这本书(内容虽多但对看书自学非常友好),两者相得益彰,先后学完后真是美妙至极!
畅销38年了图书,就像引路人一样引导着C语言初学者。从1984年至今,已经升级到了第6版,书中大量完整的、可运行的程序及详细的注释有助于理解代码和概念。
与市面上其他的教程书籍相比,最大的特点就是读起来不会有枯涩烦躁之感。书中新出现的每一个术语,符号,都给出贴近读者目前知识储备的和理解能力的解释。而且,这本书在编排上也十分与众不同,在每个知识点后面都会附带一个“程序清单”。
这本书通过一种被作者称为「现代方法」的方式来来介绍C语言,书中强调标准C、强调软件工程,不再强调“手工优化”。紧密结合了C99标准,并与C89标准进行对照,补充了C99中的最新特性,这种对比式学习,让读者印象深刻。
本书是为大学本科阶段的C语言课程编写的教材,同时也非常适合作为其他课程的辅助用书。
这本书推荐的人比较少,我看过之后觉得作为入门教材是非常合适的,也推荐给初学C语言的同学们。
这本《明解C语言》是日本的C语言经典教材,最大的特《明解C语言》是日本的C语言经典教材,最大特点点是图文并茂,第三版据说全书有205段代码和220幅图表,示例丰富,生动有趣,非常适合入门学习阅读。
同时这本书是图灵系列丛书,图灵翻译和初版了很多经典的计算机图书,口碑经得起考验。原著在日本广受欢迎,始终位于网上书店C语言著作排行榜首位。
而且内容深度也比较适中,对C语言的基础知识进行了彻底剖析,内容涉及数组、函数、指针、文件操作等。对于C语言语法以及一些难以理解的概念,均以精心绘制的示意图,清晰、通俗地进行讲解。
但是,神书虽好,不适合初学者作为C语言入门图书,否则你会被劝退的。当你看完前面推荐的入门书籍,编写过一定量的代码,再来看这本书,一定会有醍醐灌顶,豁然开朗的感觉。
虽然书名是「C和指针」但它涵盖了C语言的全部内容,特别注重指针的讲解,除了头尾的几章,指针的话题几乎是贯穿了全书。
通过对指针的基础知识和高级特性的探讨,帮助程序员把指针的强大功能融入到自己的程序中去。
正是指针使得C语言如此之强大,所以要学习C语言的精髓,就是要精通指针!不应当像java或者pascal那样禁用或者限制指针。当然,设计语言时限制指针也只是一种权衡,牺牲了效率却是使得编程人员更容易保证程序的安全。指针的特点就是高效、灵活。
本书的每一章后面都有“总结”“警告的总结”和“编程提示的总结”三个小节,这个特别好。“总结”是对本章的内容上的回顾,而后面两个是一些经验性的东西,相当宝贵。
第1章只讲解了一个完整的C语言源程序,引出了很多很基础的问题,很好地激发了学习者的兴趣和学习欲望。我觉得这是很好的一种设计。
第2到第5章,讲的是每一门语言都有的一些常规的内容,包括词法、数据类型、语句、操作符和表达式。
第11章是动态内存分配,其实就讲解了malloc、free、calloc、realloc4个函数。
第12章详细讲解了怎么用指针实现链表
第13章是指针特性的一些高级应用,最能体现指针神乎其神的地方就是这里了。
剩下几章是一些杂七杂八的内容,包括预处理器、库函数、几种经典抽象数据类型和运行时环境。
本书更适合有C基础的人看。如ADT、递归、指针和数组的部分,书中所述的思想是国内教材所缺乏的,看完本书,能得到一个正确的C语言观。
这本书的主题是C中的各类细节,平时往往不会注意,比如:1.注释的嵌套性,怎么判断编译器是否允许嵌套注释。2.运算符优先级,结合顺序,编译器贪婪3.assert的实现方法,避免if4.少敲一个分号导致各种血案5.注意函数、if等的作用域。6.注意字符集,防止移植性问题7.变长参数,stdargs
书中列举的C语言的细节,至少能够帮助你减少C代码和初级C++代码中90%的Bug,可以帮助我们避免C语言开发的陷阱和障碍。
虽然名字叫《C陷阱与缺陷》,但本质上说的不是C语言的缺陷,而是编程者容易犯的错误。全文的语言很有意思,丝毫没有说教的感觉,举的例子很简单却一针见血,可以作为手边的读物,没事经常翻翻加深印象。
这本书展示了最优秀的C程序员所使用的编码技巧,并专门开辟了一章对C++的基础知识进行了介绍。
全书撷取几十个实例进行讲解,对C程序员具有非常高的实用价值。如果你是C语言程序员,这本书很值得一读。
另外还讲述了C语言发展过程中的一些轶事,作者行文比较随性,如果你爱听八卦可以去看看这些有趣的小故事,另外,书中对C语言中数组和指针这两个常用语法,进行了深入的剖析。
初学C语言不建议一上来就啃书,建议从优质视屏公开课入门,视屏教程相比文本,更容易理解的学习途径。
如果你在学校的C语言课听不懂,看书太枯燥看不进去,这都没关系。现在网上大把的高质量学习资源,只要你去找肯定能找的到,资源收集能力也是一种学习能力。
C语言入门视屏课程,推荐翁凯老师和郝斌老师的视屏公开课资源。
CS50其实不是C语言入门课,它是哈佛大学的一门计算科学导论课程,内容包括基本的计算机知识以及基础算法,常见的编程语言等等,还会探讨最新的计算机科学领域的成果,课程发散性思维强。CS50课程的讲课形式让人耳目一新,真正做到了“快乐学习”。
柠檬哥为什么推荐学习C语言先学这门课程呢?
国内的大学大部分一上来就讲C语言,很少有这样一门计算机导论课程。这门课是用C语言作为教学语言的,但不会深入的讲解C语法,只是用C语言来表达一种编程思维,更重要的是培养计算机思想,对计算机科学有宏观的了解,这对以后任何一门计算机专业课程(包括C语言)的学习都是大有裨益的!
这门从算法、程序设计开始,讲到游戏和网页制作,课程列表是这样的:
【第1集】算法,程序设计,语言等译
【第2集】算法,数据存储,磁盘,程序设计等译
【第3集】C语言,源代码,编译器(1)译
【第4集】C语言,源代码,编译器(2)译
【第5集】函数,全局变量,参数,返回值译
【第6集】参数,返回值译
【第7集】线性搜索,二进制搜索译
【第8集】符号,递归,冒泡排序译
【第9集】归并排序,动态内存分配,堆和栈译
【第10集】CS50函数库,指针,文件输入输出译
【第11集】数独、计算机史上最有名的bug译
【第12集】魂斗罗游戏,如何分配内存译
【第14集】用户体验,数组与指针,Hash函数译
【第15集】网络编程,HTML语言,编写网页译
【第16集】网络安全,窃取通讯的工具,动态网络译
【第17集】垃圾邮件的骗局,屏幕抓取的原理译
【第18集】网页网站开发译
【第19集】互联网工作原理,网页游戏制作译
【第20集】总结与知识问答译
中国大学慕课网有很多高质量C语言课程,其中最推荐浙大翁凯老师的《C语言程序设计入门课》,翁凯老师的C语言入门课YYDS,非常适合C语言入门,老师讲解透彻、声音好听,而且特别注重细节。上过这门课的同学都说好,课程好评如潮!
课程我从头到尾听过两遍,第一遍是学习,第二遍是享受。两个字评价:透彻。
建议和C语言入门部分推荐的图书搭配使用,效果更佳!
这门课是14年开的,翁凯老师讲课风趣幽默,课程深入浅出,每节课程之后都有程序清单,还在课堂介绍了一个可以做小游戏的图形库ACLLib,让你的C语言学习不再只有黑乎乎的命令行窗口。
这门课程是C语言基础学习版,翁凯老师还有一门《C语言程序设计进阶》公开课,同样可以在慕课网在线学习,进阶课程的质量也得到了同学们的广泛好评,推荐在完成基础内容学习之后,可以继续跟着老师学习C语言程序设计进阶,内容涉及指针、文件、结构类型等C语言进阶主题。
郝斌老师的自学入门C语言教程,很多早几年入门C语言的同学应该都知道,教程是09年左右录制,虽然是有些年份了,但C语言自1972年从贝尔实验室诞生以来,基础语法几乎没有变动,所以你完全可以放心去看。
郝斌老师讲课时说,自己是完全的自学C语言,因此更懂初学者的需求。从自学者的角度带大家学C语言,讲解非常认真仔细,是非常基础的的C语言入门教程,适合完全零基础的同学入门,毕竟过来才懂过来人的需求。
其他的视屏就不太推荐了,准确的说只要你认真学完以上视屏公开课,基本算是已经入门C语言。
完成C语言入门书籍和视频教程同时,需要看进阶教材深入学习+项目练习来消化所学内容,达到对知识的内化吸收。整理了21个C语言练手项目,从基础语法开始,逐步深入,通过一个个练手项目,让你轻松驰骋在C语言的快车道。不走弯路就是捷径!
引入大量的C语言程序案例,把算法和语法结合起来,通过引导大家由浅入深地编写C程序,让大家掌握C语言。将从中学会C语言语法、数组、模块化程序设计指针、文件的输入与输出等。
通过本项目的学习,可以让学员掌握一些棋牌类的手机游戏中的发牌系统算法怎么编写,为学员就业后编写一些小的游戏类APP打下良好的基础。
本次课程将使用C语言完成一个简单的日历功能。输入相应的年/月即可看到当月的日历。因此,您需要对C语言有一定的了解。
使用C语言多线程模型实现了排序算法。本项目在Linux环境下使用C语言多线程模型实现了排序算法,通过该项目的学习,可以理解并实践Linux环境的编程基础及多线程模型。
通过3个C语言编程实例,让你在利用递归解决实际问题的过程中学习递归并掌握其核心思想。
递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。本课程通过3个C语言编程实例,让你在利用递归解决实际问题的过程中学习递归并掌握其核心思想。举一反三,懂得如何使用递归解决其他实际问题
地址:www./courses/749
地址:www./courses/737
使用C语言完成一个简单的通讯录。会涉及到结构体、数组、链表等重要概念。
用C语言做一个简单的计算器,进行加、减、乘、除操作。本程序涉及的所有数学知识都很简单,但输入过程会增加复杂性。都是C语言很基础的东西(输入输出),学了之后能写出一个完整的C语言程序。适合涉及C语言的基本语法,与输入与输出。适合初学者学习。
通过C语言实现一个简易计算器,用于解决任意长度的有符号整数的加、减、乘、除运算。主要将涉及到利用全新的数据结构来表示大数,并将新数据结构存储的大数转化为字符用于显示。以及基于大数新的数据结构完成加、减、乘、除的计算算法设计。
使用C语言实现一个Web服务器。将会学习C语言网络开发,epollIO复用机制,熟悉Linux下的C语言程序编译方法,Makefile编写等技能。
更加深入的理解套接字编程模型,并且了解应用层协议(FTP)如何在套接字基础上定义。本项目实现了支持list,get,quit等命令的FTP服务器。
通过C语言实现Linuxwho命令项目的学习,可以掌握Linux操作系统为上层提供的访问系统数据文件的接口。更好的理解Linux操作系统工作的原理。
带领你学习用C语言实现ping命令。通过本项目中你可以更深入地理解TCP/IP协议,套接字编程,掌握C语言进行网络编程的技巧方法。
使用C语言来实现一个字符版FlappyBird,感受不一样的风采。本课程学习后将会熟悉C语言,以及绘图库ncurses的使用。本课程适合有C语言基础,想做练手项目的同学,可以有效的学习ncurses绘图库的使用,做一些有趣的事情。
地址:C语言实现FlappyBird游戏
将在Linux平台使用C语言编程,在终端界面上玩贪吃蛇。本课程分为三个实验,实验一介绍了图像库,实验二绘制游戏图像界面,实验三实现贪吃蛇。逐步为同学们讲解一个游戏的制作过程。
:用最简单的代码来实现五子棋游戏,帮助大家复习基础知识,学习了如何设计并实现一个五子棋游戏,巩固大家的基础知识。涉及到C语言的基础逻辑判断,程序设计与编写。
地址:www./courses/313
2048是之前十分火爆的一款益智游戏。将使用C语言完成一个2048游戏。适合对C语言有一定基础,想做项目练手的同学,本课程学习后将会了解C语言,以及绘图库ncurses的实用。