欢迎访问:祀与戎,国之大事,在祀与戎。
手机号码:
欢迎访问:祀与戎,国之大事,在祀与戎。
欢迎访问:祀与戎,国之大事,在祀与戎。祀与戎
祀与戎,国之大事,在祀与戎www.siyurong.com
祀与戎,国之大事,在祀与戎。如果您觉得本站非常有看点,那么赶紧使用 Ctrl+D
这个我可太知道了!!!这才是你最想要的 C 语言学习路线!!!
在大学的时候搞 ACM,用过三年的 C 语言,自认为比较熟悉。
现在常见的高级语言的底层几乎都是 C 语言实现的。
学好了 C 语言,你再去学别的编程语言就很快了。
C 语言的学习其实就三个阶段 就好了:
(1) 入门阶段
这个阶段学习 C 语言的基础语法知识。
目标是可以开发一些简单的控制台小程序。
(2) 提高阶段
这个阶段学习 C 语言自带的库函数 ,形成 C 语言的基本知识框架。
目标是开发一些基本的应用程序 。
(3) 应用阶段
这个是实战阶段,要具备一定的综合性应用软件开发能力。
目标是能够开发像贪吃蛇 、图书管理系统、学生信息管理系统等项目。
注意!下面都是超极干的干货,记得先帮我
点个赞呀,么么哒。
一、入门阶段
入门阶段主要需要学习下图的内容:
1.视频推荐
此时同学们应该是小白阶段。
对于小白来说,不建议上来就看书,因为干看看不懂,容易劝退。
可以先从视频教程开始。
C 语言的视频教程我只推荐一人:浙江大学翁恺 老师的 C 语言课,yyds!
是一个课程质量非常棒,讲课幽默,深入浅出的课程,非常容易理解!
当时学 C 语言的时候,自己还是个从来没接触过编程的菜鸡,当时的学习全靠翁恺老师了!
不多说,看过的都知道。翁恺老师的课是在 MOOC 上开的。
主要分两门:
第一门是面向高考结束想提前自学一些编程的或者是刚开始学习的大一新生,叫《程序设计入门-C语言 》,涵盖了主要的 C 语言知识点。
完成本课程之后,就能具有初步的运用C语言编写程序的能力。
2.第二门是《C语言程序设计进阶 》,这门课就是要告诉你C语言到底有哪些独特的地方,为什么能长期占据15%上下的编程语言份额。这门课同样也是带你项目实操,和设计入门搭配使用,效果翻倍。
2.书籍推荐
我姑且认为现在题主有了一点基础,可以能配合视频看书了。
《啊哈 C语言 》
这本书是为计算机纯小白量身打造。
风格幽默,生动形象,通俗易懂,读起来令人耳目一新,对入门小白培养兴趣的帮助很大。
在语言艺术这方面,是登峰造极,让人不得不佩服作者的才华和用心。
只不过内容并不深入,真的是对零基础,大佬绕路。
《c primer plus》
语法全覆盖,细节多,知识点讲的清楚,但是内容极多,是本大部头,容易劝退。如果你觉得入门差不多,可以啃一下。
现在是第六版了,书的封面啥的都换了,内容也更贴合现在的需求。
一共17章:
第1、2章介绍了C语言编程的预备知识。
第3~15章详细讲解了C语言的相关知识。
第16章、17章介绍C预处理器、C库和高级数据表示。
书籍地址:
如果你在这个阶段觉得差不多了,可以尝试找一些在线的练习题做下。
这里推荐一下牛客网,在线的编程题库做的很不错。
直接点击下面这个链接可以直达,开启你的测试之旅~
传送门:牛客网 – 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网
二、提高阶段
这个阶段你已经对 C 语言有一定认知了,这个时候我们就可以深入学习 C 语言中最重要的指针等内容了。
1.提高内容
这一个阶段需要学习的内容主要有下图:
2.书籍推荐
《C 和指针 》
指针和指针操作一直是c语言中的重点和难点,反正我当时学到这里的时候,就很头疼。
这本书是 C 指针的经点之作, 通过对指针的基础知识和高级特性的探讨,来让我们学会把指针的强大功能融入到自己的程序中去。
但是这本书不只是指针,更是一本很棒的 C 语言入门书, 提供和C语言相关的全面资源,还有比较深入的讨论,让你形成一个正确的c语言观。
《C 专家编程》
任何人都可以享受编程,编程应该是一项精妙绝伦、充满生机、富有挑战的活动,而讲述编程的书籍也应时时迸射出激情的火花 。
这本书展示了最优秀的 C 程序员所使用的编码技巧,还对 C++的基础知识进行了介绍。
书里关于 C 的历史、语言特性、声明、数组、指针、链接、运行时、内存以及如何进一步学习 C++ 这些内容进行了细致的讲解和深入的分析。
差不多对几十个实例进行讲解,生动有趣,对 C 程序员具有非常高的实用价值。
《C 陷阱与缺陷》
任何人都可以享受编程,编程应该是一项精妙绝伦、充满生机、富有挑战的活动,而讲述编程的书籍也应时时迸射出激情的火花 。
这本书展示了最优秀的 C 程序员所使用的编码技巧,还对 C++的基础知识进行了介绍。
书里关于 C 的历史、语言特性、声明、数组、指针、链接、运行时、内存以及如何进一步学习 C++ 这些内容进行了细致的讲解和深入的分析。
差不多对几十个实例进行讲解,生动有趣,对 C 程序员具有非常高的实用价值。
书籍地址:
三、应用阶段
学编程除了理论外,更重要的是要应用,应用很好理解,前期多敲代码,之后慢慢去升华。
其实编程语言就是要多练,怎么多练,就是代码量。
自己多写,然后多观摩别人的项目,看人家的写法,模仿项目,学习其中的思想,一点点的积累,一步步形成自己的东西,厚积而薄发,慢慢你就会发现你也可以了。
1、C语言制作斗地主发牌器
通过本项目的学习,可以让学员掌握一些棋牌类的手机游戏中的发牌系统算法怎么编写,为学员就业后编写一些小的游戏类APP打下良好的基础。
传送门:C语言:斗地主的发牌器 – 网易云课堂 、
2、C语言实现通讯录/图书管理
这个课程将使用 C 语言完成一个简单的通讯录。会涉及到结构体、数组、链表 等重要概念,需要对 C 语言有一定的了解。
地址:C 语言实现通讯录_C – 蓝桥云课
3、C语言实现2048小游戏
2048是之前十分火爆的一款益智游戏,这个课程将使用 C 语言完成一个2048游戏。适合对C语言有一定基础,需要了解C语言,以及绘图库ncurses的实用。大大提高你的动手能力。
地址:C 语言实现 2048 游戏_C
4、Tinyhttpd(7.3k+ star)
一个不到 500 行的超轻量型 HTTP Server,可以用来理解服务器程序的原理和本质。
C语言 的入门级项目!
传送门:https://github.com/ EZLippi/Tiny
5、db_tutorial(5.9k+ star)
用 C 从零创建一个简单的数据库 。
传送门:https://github.com/cstack/db_tu
题主还说到了数据结构
题主开始数据结构的学习之前,首先要把 C 语言学好,这是个递进关系。
数据结构与算法的学习
程序 = 数据结构 + 算法。
数据结构经常与算法放在一起,在有些高校,会存在“数据结构”和“算法设计与分析 ”这样两门课。
这就造成很多同学懵圈,数据结构与算法有什么区别?甚至有些同学认为这就是一种。
其实吧:
数据结构主要讲解数据的组织形式。 就是我们要怎样把这些数据存储起来,所以有数组、链表、栈、队列、树、图,这是数据结构的重点。
算法,则注重的是思想。 比如数组里的元素怎么排序、怎么找到最大的数和最小的数等等。说白了就是解决现实中问题的思想 。所以才会有贪心、动态规划等这些算法。
数据结构与算法,不管你怎么想,一定要认真学!不管面试还是考研都是必考!
下面总结一些重要的知识点吧,这样才能有针对的学。
【复杂度分析】
学习数据结构与算法的第一课,我永远都选复杂度分析,在我看来,这是数据结构与算法中最重要的知识点,且不接受任何反驳。
文章推荐:
【数据结构】
数组(Array)
链表(Linked List)
栈(Stack)
队列(Queue)
散列表 (Hash table)
堆(Heap)
树(Tree)
图(Graph)
【操作数据结构 】
文章推荐:
蛋蛋惨遭数组滑铁卢,面试官建议回村养猪。
链表,画几下就整明白了!
呔!“栈”住,队列!
【数据结构书籍推荐】
《大话数据结构 》、《数据结构与算法分析》
《大话数据结构》这本书与市场上的同类数据结构图书相比,内容更加趣味易读,算法讲解细致深刻。
是一本非常适合自学的读物。
这本书通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。
如果你还是看不懂,可以看我写的图解,不过有点慢,但是绝对通俗易懂:
复杂度分析: 保姆级教学!彻底学会时间复杂度和空间复杂度
数组: 蛋蛋惨遭数组滑铁卢,面试官建议回村养猪。
链表: 链表,画几下就整明白了!
栈和队列: 呔!“栈”住,队列!
字符串: 关于字符串,你知道这些么?
书籍地址:
【算法】
学习算法的套路很简单,多看、多写、多上机。
查找算法
字符串匹配
10大排序算法
【算法书籍推荐】
《算法图解 》
示例丰富,图文并茂,这是一本像小说一样的算法入门书。
无论你是专业程序员,还是编程爱好者,亦或是需要重温算法的计算机专业学生,这本书都是你不二的选择。
书中的前三章将帮助你打下基础,带你学习二分查找、大 O 表示法、两种基本的数据结构以及递归等。
余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;Kzui 近邻算法 。
《算法(第 4 版)》
算法领域的经典参考书,包含了经过几十年演化而成的算法核心知识体系。
书中讲解了多种算法和数据结构,让你能够在各种计算机环境下实现、调试并应用它们。
作为算法领域经典的参考书,全面介绍了关于算法和数据结构的必备知识,并特别针对排序、搜索、图处理和字符串处理进行了论述
第 4 版具体给出了每位程序员应知应会的 50 个算法,提供了实际代码。
书籍地址:
【视频教程推荐】
《数据结构》,浙大陈越和何钦铭 教授联合授课,其大名在计算机领域可谓耳熟能详了。
链接:数据结构_浙江大学_中国大学MOOC(慕课)
《数据结构与算法》,这门课程的最大特点是理论和实践的结合,你将学习到解决各种计算问题的算法技巧,并实现大约100个算法编码问题。
链接:Data Structures and Algorithms
【网站推荐】
如果还是觉得学起来很吃力,可以借助下面这个网站来学习。
链接:数据结构和算法动态可视化 (Chinese)
【刷题】
数据结构与算法的学习,往往要伴随着“刷题”,如果没特殊情况,我建议大家刷 LeetCode 就好。
刷题按照分类来刷,如果不知道刷哪几道题,可以看下这个前字节大佬的刷题笔记:
针对 LeetCode,题的解法有很多,我们往往追求的是最优解,这里有一份清华学长整理的 LeetCode 最优解,强烈推荐:
两者配合起来应该非常舒爽。
我在大学的时候参加 ACM,拿过亚洲区预赛银奖,刷题贯穿了我的整个大学生涯,总结了一些刷题的经验,感兴趣的可以看下。
希望对你有所帮助!
如果觉得不错,大家记得帮我
点赞呀。
想要学习C语言,首先应该学好计算机 基础。里面的很多概念以及基本的常识对于C程序员都是非常重要的。如果在着手学习C语言之前,或者已经开始学习C语言,但是碰到了很多问题,应该再把计算机基础的书拿来好好看看。
条件允许应该在学习C语言之前学学汇编,这会对许多比较细腻的概念有清醒的认识。那么可以在看完一遍C语言的教材后再看,但是一定要看一遍,一定会受益匪浅。不管看什么书,先认真地看懂,不要贪速度,应该力求深入的理解。
如果能够比较熟练的解决一本教材上的所有习题,那么就应该转入对算法的学习,尽管此时的C语言还称不上精通,有许多细节问题还不了解,许多问题还没有碰到,但是这些问题会在后面的工作和学习中得到解决的。
如果你还没有系统化的C语言学习路线,那么可以领取下方的学习教程资料,资料中包含有学习路线图、学习笔记和视频教程,内容清晰详细易理解,非常适合新手小白入门学习,有需要的同学下方插件就能直接免费领取!
系统化的学习是非常重要的,如果你基础薄弱,突然一份高深资料可能会使你整个人云里雾里,一头懵!所以一个好的平台以及好的引路人则是非常关键的,对你后期学习的进步以及你的一个根基非常重要。俗话说:“师傅领进门,修行在个人”,好的师傅必不可缺,毕竟天才是少数的,耐得住寂寞的天才更是少数,所以这里必须找一个带你入门的人。
如果你身边没有这样的人能带领你学习,那么可以进入下方的C语言学习交流群,里面很多有技术有经验的大神在群里指导学习,还能帮你解答疑难问题,分享学习经验和源码笔记,能让你少走不少弯路,从而提升学习效率!
C语言的重要性我就不多说了,相信选择学习C语言的同学也都清楚,下面我总结了以下几点学习技巧给大家做做参考,给遇到瓶颈的同学指点一下,不要轻易放弃!
1、各门编程语言都有它存在的理由
不要今天感觉这个过时了,明天感觉那个不实用了。C语言被创立到现在将近50年了,不一样一直被使用吗?不一样很火吗?所以,任何一门编程语言你要是学好了学精了,都可以找个好工作,都可以赚到钱,不要犹豫学哪个,认准一个不错的、感兴趣的,努力的学下去吧!
2、学编程就应该专注的去学
即使你每天只有一两个小时的时间去学也一样,要全身心的投入。不能三天打鱼两天晒网,学几天扔几天,那样你是学不好C语言的,或者说你学不好任何一门语言。
3、学编程应该看书/看教程+敲代码实践结合起来
不能光看书或者教程而不敲代码,也不能一味的敲代码不看书。光看书或者教程不敲代码就会眼高手低。看到什么知识点或者看到什么功能题目了,感觉自己会,有思路,知道怎么做。但是真正让你去敲代码去写功能的时候就手忙脚乱了,不知道该如何下手,这就是典型的眼高手低的症状。
如果一味的敲代码,不看书,一味的认为实践出真知,这也是不行的。稍微遇到一个简单的小语法问题就会把你难住,遇到一个小的知识点也忘记怎么样去做,反过来还得去查资料。这样的话你的知识基础就会留下很多空洞,说白了就是基础不扎实,往往被很多基础的问题绊倒。
所以,一定要把看书/看教程+动手敲代码结合起来。
4、不怕贼偷,就怕贼惦记
遇到问题了应该多动脑去想想,去琢磨琢磨,为什么会出现这个问题,应该如何去解决。想不到了可以动手去谷歌、百度搜索下,找找资料。C语言发展到现在已经块50年了,所以这方面的资料可以说还是非常多的。
如果实在找不到适合自己的,也可以领取下方的资料包,都是最近刚整理的,资料很新,包含有视频教程、实战项目和电子书籍,都是新手小白适用的,需要的自行免费领取!
编程上面遇到的一些问题多思考,多分析,多找资料,90%以上的问题都可以解决。我接触C语言也有六七年的时间了,有时候也会遇到一些问题,当时可能解决不了,花个几天时间肯定是可以解决的,相信自己!
5、学编程不能花心
今天看这个语言好就学这个,明天看那个语言好又学那个。每个人的时间精力都有限,每个人不可能都是天才,所以不可能把常用的语言都学好,都学的很精,应该有重点的去学。
选择一门或者两门语言去重点的花时间去学,学好了,学精通了,再去扩展其他的知识面就很容易了,编程思想都是相通的。不然可能每门语言你都会,但每门语言你都不精通,各门语言都是半瓶子水,这样肯定是不行的。
所以不要去看其他网站或者淘宝上卖的很便宜的,几十块钱的,一两百块钱的一大把教程,什么语言的都有,感觉很值,从头学到尾,今天C语言,明天C#,后天Java,大后天Python,学到最后问哪门语言你最擅长?你自己都不知道。花那么多时间精力去学,有用吗?做了不少无用功。你要是把这些时间精力加一起单独学一门语言肯定可以学成。
总而言之,C语言想学好并不难!入门相对很轻松,关键在于好的引路人和好的资源,这样才会使你事半功倍。路漫漫其修远兮 ,余降上下而求索!希望有兴趣的朋友一起交流,互相进步!
入门学习C语言的过程当中有遇见任何关于学习,行业方面的问题,都可以进入下方的学习群系统的了解学习,群里还会不定时分享基础教程、C语言学习手册、面试题、开发工具和PDF文档书籍教程,都是可以免费领取的,但是大家领取后也要抽时间学起来,不要让它们在收藏夹里吃灰。
牢固的基础是靠着长时间的锻炼积累出来的,编程靠的绝对不是天赋,而是经验和积累。
为什么说这句话呢?对于我们很多刚刚学习C语言的朋友来说,我们首要做的就是通过C语言来锻炼自己的编程逻辑和编程思维,只有这样才能够在之后的多种语言,数据结构 和算法的学习中能够更加的顺利。
在前期的学习之中应该保持充分的自信,不要过早的否定自己,或许一开始有着很多的困难,但是当你慢慢熟练的积累之后你会发现它没我们想象中那么难,我们只需要通过自己的努力去锻炼,多敲一些代码,将我们出现问题的原因记录下来,这样在我们之后遇见相同的问题或者难以解决的时候,看看自己的笔记,就可以顺利的完成了,加油。
最后再分享几道练习题给大家练练手:
1. **冒泡法** 重中之重的一个程序
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int arr [ 16 ] = { 1 , 5 , 6 , 9 , 8 , 7 , 6 , 12 , 15 , 16 , 18 , 13 , 21 , 25 , 26 , 28 };
int temp ;
int i , m , n ;
for ( n = 0 ; n < 15 ; n ++ ) //进行9次
for ( m = 0 ; m < 15 - n ; m ++ ) //将相邻两位进行比较,将小的往后移
{
if ( arr [ m ] < arr [ m + 1 ])
{
temp = arr [ m ];
arr [ m ] = arr [ m + 1 ];
arr [ m + 1 ] = temp ;
}
}
for ( i = 0 ; i < 16 ; i ++ )
printf ( "The order is:%d \n " , arr [ i ]);
system ( "pause" );
}
2. **数字遍历**
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n = 123456 ;
int i ;
for ( i = n ; i ; i /= 10 ) //数位遍历;
{
printf ( "%d " , i % 10 );
}
system ( "pause" );
return 0 ;
}
3.**递归输出1234**
#include <stdio.h>
#include <stdlib.h>
void PrintNum ( int num ){ //将1234输入进;
if ( num > 9 ){
PrintNum ( num / 10 ); //递归进行调用 从首位开始输出
}
printf ( "%d " , num % 10 );
}
int main ()
{
PrintNum ( 1234 );
system ( "pause" );
return 0 ;
}
4. **计算一个数的位数 按位输出 逆序输出**
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int factor ( int x ){ //计算出位数
int count = 1 ;
for ( x ; x / 10 != 0 ; x /= 10 ){
count += 1 ;
}
printf ( "%d" , count );
return ( count );
}
void Factor ( int a ){ //按位输出
float n = factor ( a );
int i , j ;
printf ( "按位输出为: \n " );
for ( n ; n > 0 ; n -- ){
i = a / pow ( 10 , n - 1 );
j = i % 10 ;
printf ( "%d " , j );
}
}
void PrintNum ( int num ){
int i ;
for ( i = num ; i ; i /= 10 ) //数位遍历;
{
printf ( "%d " , i % 10 );
}
}
int main (){
int x ;
printf ( "请输入一个不大于五位的正整数: \n " );
scanf ( "%d" , & x );
factor ( x );
printf ( " \n " );
Factor ( x );
printf ( " \n " );
printf ( "逆序输出这个正整数每一位: \n " );
PrintNum ( x );
system ( "pause" );
return 0 ;
}
5. **完数**
#include <stdio.h>
#include <stdlib.h>
int Sum ( int n )
{
int i ;
int sum = 0 ;
for ( i = 1 ; i < n ; i ++ ){
if ( n % i == 0 )
sum += i ;
}
return sum ;
}
int main ()
{
int j ;
for ( j = 2 ; j < 1000 ; j ++ )
{
if ( Sum ( j ) == j )
printf ( "%d is a wanshu! \n " , j );
}
system ( "pause" );
return 0 ;
}
6. **反向输出字符串**
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (){
int i , j , k ;
char c [ 200 ], c1 ;
printf ( "Enter a string : \n " );
scanf ( "%s" , c );
k = strlen ( c ); //求字数串长度;
for ( i = 0 , j = k - 1 ; i < j ; i ++ , j -- ){
c1 = c [ i ];
c [ i ] = c [ j ];
c [ j ] = c1 ;
}
printf ( "%s" , c );
system ( "pause" );
return 0 ;
}
7. **杨辉三角形**
#include <stdio.h>
#include <stdlib.h>
int main (){
int i , j ;
int a [ 7 ][ 7 ];
for ( i = 0 ; i <= 6 ; i ++ ){
a [ i ][ i ] = 1 ; //将为1的数位,先全部输出;
a [ i ][ 0 ] = 1 ;
}
for ( i = 2 ; i <= 6 ; i ++ ){
for ( j = 1 ; j <= i - 1 ; j ++ ){
a [ i ][ j ] = a [ i - 1 ][ j ] + a [ i - 1 ][ j - 1 ]; //将不为1的数位输出
}
}
for ( i = 0 ; i <= 6 ; i ++ ){
for ( j = 0 ; j <= i ; j ++ ){
printf ( "%4d" , a [ i ][ j ]);
}
printf ( " \n " );
}
system ( "pause" );
return 0 ;
}
8. **回文字符串**
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (){
char s [ 100 ];
printf ( "enter a string: \n " );
gets ( s );
int i , j , n ;
n = strlen ( s );
for ( i = 0 , j = n - 1 ; i < j ; i ++ , j -- ){
if ( s [ i ] != s [ j ]){ //判断第一位和最后一位是否相等
break ;
}
}
if ( i > j ){ //当全面相等的话 ,则判定位回文数;
printf ( "This is a huiwen string. \n " );
}
else {
printf ( "This not is a huiwen string. \n " );
}
system ( "pause" );
return 0 ;
}
9. **从字符数组中删掉d中的字符**
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (){
char s [ 200 ];
char a ;
printf ( "Enter a string. \n " );
gets ( s );
printf ( "Enter a charater. \n " );
a = getchar ();
int i , j ;
for ( i = j = 0 ; s [ i ] != '\0' ; i ++ ){
if ( s [ i ] != a ){
s [ j ++ ] = s [ i ]; //将不同的取出来放进新的字符串之中;
}
}
if ( s [ i ] == '\0' ){ //将之后重复的最后一位删除掉;
s [ j ] = s [ i ];
}
printf ( "%s \n " , s );
system ( "pause" );
return 0 ;
}
10. **从100米的地方落下的球,每一次弹起来是下落的一半,则第十次弹起多高,总弹多少米**
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main (){
double sum = 0 , sum_down = 0 , sum_up = 0 , h = 0 ;
double i ;
for ( i = 0.0 ; i <= 9.0 ; i ++ ){
sum_down = sum_down + 100 * pow ( 1.0 / 2.0 , i ); //计算每一次下落的总距离;
}
for ( i = 1.0 ; i <= 9.0 ; i ++ ){
sum_up = sum_up + 100 * pow ( 1.0 / 2.0 , i ); //计算每一次上升的总距离;
}
sum = sum_down + sum_up ; //计算总距离;
h = 100 * pow ( 1.0 / 2.0 , 10 ); //计算第十次弹起来的高度
printf ( "在第十次落地,一共经过了%lf米 \n " , sum );
printf ( "第十次再弹起 有%lf米 \n ." , h );
system ( "pause" );
return 0 ;
}
在C语言的学习上,看书只是最开始的办法,我们应该明白更多的都是需要依靠自己的勤奋锻炼来进行实践,只有长时间的敲代码才能够更快的提升自己的能力。
零基础的小伙伴可以先从视频课程入手 ,国内浙大翁凯 老师 的课,看过的都说好~
浙大C语言-翁凯,分为两门:
C语言程序设计CAP(大学先修课):https://www .icourse163.org/course/Z JU-1001614008 C语言程序设计进阶:https://www .icourse163.org/course/Z JU-200001
第一门是面向高考结束想提前自学一点编程和大一新生 的,叫大学先修课。
虽然叫先修课,但是覆盖了C语言的主要知识点~
第二门是C语言程序设计进阶,会带你用C语言完成一些有趣的项目,比如一些图形界面小游戏。
先修课学习C语言语法基础,进阶课带你项目实操 ,搭配使用,你就是同学中的大神!
关于编辑器 /IDE,推荐如下几个适合初学者的 :
Visual Studio(Windows平台)。微软出的,有点庞大。
Dev C++。没有VS那么复杂,是一款免费的C/C++ IDE,内嵌GCC编译器,是NOI等比赛的指定工具。
Code::Blocks一款开源、跨平台、免费的 C/C++ IDE,它和 Dev C++ 非常类似,小巧灵活,易于安装和卸载,不过它的界面要比 Dev C++ 复杂一些,不如 Dev C++ 来得清爽。
C语言经典的书籍这里推荐3本:
第一本是《C Primer Plus 》 ,比较适合入门 。内容循序渐进,书中的每一个知识点都有很多生动简单的示例,并给出了相应的运行结果。而且每章末设计了大量复习题和编程练习,帮助巩固所学知识和提高实际编程能力。
第二本是《C程序设计语言 》 ,豆瓣评分9.4分,适合有一点基础后再来看 。
进阶推荐《C和指针》 。全书共18章,覆盖了数据、语句、操作符和表达式、指针、函数、数组、字符串、结构和联合等几乎所有重要的C编程话题。书中给出了很多编程技巧和提示,每章后面有针对性很强的练习。
适合新手练习的C语言项目推荐!
核心的基础知识掌握并会初步运用 ,其实就可以开始做一些mini的项目了,在实践中学习更有体感,理解更深刻。并不建议大家在理论基础上花太多时间,毕竟计算机是时间性强的学科,必须多动手,多实践 。
(1)PTA-程序设计 实验辅助教学平台
传送带:https:// pintia.cn/problem-sets? tab=0
上面有非常多的习题,非常适合练习。
(2)webbench-网站压测工具
一款知名的linux下的网站性能压测工具,由Lionbridge公司开发,代码不多,不到1000行 。
它使用fork()模拟多个客户端同时访问我们设定的url,测试网站在压力下的性能,可以同时模拟3W个并发连接去测试网站的负载能力。
webBech的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。
webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进行测试的能力。还有就是他支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试,
下载地址:
http:// home.tiscali.cz/~cz2105 52/webbench.html
使用起来非常简单:
wget https://www .ha97.com/code/webbench- 1.5.tar.gz tar zxvf webbench-1.5.tar.gz cd webbench-1.5 make make install
命令行选项
其核心原理:
父进程 fork多个子进程,每个子进程在用户要求时间或默认时间对目标网站发起访问请求,父子进程通过管道进行通信。子进程通过管道写记录到的信息,父进程通过管道读子进程的信息,子进程在时间到后结束。父进程在子进程退出后统计并展示信息。
(3)CJson-JSON解码器
CJson是一款JSON解码器,代码不到1000行。github star 6.7K 。
github:https:// github.com/DaveGamble/c JSON
其核心数据结构 :
/* The cJSON structure: */
typedef struct cJSON
{
struct cJSON *next;
struct cJSON *prev;
struct cJSON *child;
int type;
char *valuestring ;
/* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */
int valueint;
double valuedouble;
char *string;
} cJSON;
支持的类型:
/* cJSON Types: */
#define cJSON_False 0
#define cJSON_True 1
#define cJSON_NULL 2
#define cJSON_Number 3
#define cJSON_String 4
#define cJSON_Array 5
#define cJSON_Object 6
其API用起来也非常简单:
char *out;cJSON *json;
json=cJSON_Parse(text);
if (!json) {
printf("Error before: [%s]\n",cJSON_GetErrorPtr());
} else {
out=cJSON_Print(json);
cJSON_Delete(json);
printf("%s\n",out);
free(out);
}
(4)EasyLogger-高性能、轻量级C/C++日志库
是一款超轻量级、高性能的C/C++日志库,非常适合资源敏感的场景。
其功能简单,上手迅速,以插件形式动态扩展支持更多实用功能。
代码下载链接:
https:// gitee.com/Armink/EasyLo gger
主要特性:
支持用户自定义输出方式(例如:终端、文件、数据库、串口 、485、Flash…); 日志内容可包含级别、时间戳、线程信息、进程信息等; 日志输出被设计为线程安全的方式,并支持 异步输出 及 缓冲输出 模式; 支持多种操作系统(RT-Thread、UCOS、Linux、Windows…),也支持裸机平台; 日志支持 RAW格式 ,支持 hexdump ; 支持按 标签 、 级别 、 关键词 进行动态过滤; 各级别日志支持不同颜色显示; 扩展性强,支持以插件形式扩展新功能。
(5)cWebsocket-轻量级websocket服务库
传送带:https:// github.com/m8rge/cwebso cket
特点:跨平台、轻量级。
(6)cmockery-轻量级单元测试框架
一款轻量级C语言单测框架,google发布的,非常小巧和轻量级,代码不到3K行。对其他开源包没有依赖,对被测试代码侵入性非常小。
是由google在2008年发布的,这是google open source blog上的博文:
https:// opensource.googleblog.com /2008/09/cmockery-easier-unit-tests-for-c.html
github链接:
https:// github.com/google/cmock ery
(7)C语言实现数独
youtube上有完整的详细的系列教学视频,强烈推荐:
https://www .youtube.com/playlist? list=PLkTXsX7igf8edTYU92nU-f5Ntzuf-RKvW
不过视频是英文的,需要一定的英文听力能力。
(8)Tinyhttpd-轻量级http server
一款超轻量级http server,使用C语言开发,代码总共才500行左右。通过这个小工程可以理解一个httpserver 的本质。
github star 7.8K:https:// github.com/EZLippi/Tiny httpd
基础工作原理:
(9)libev-开源事件驱动框架
一款C语言编写的高性能事件驱动框架,基于reactor 模式实现。
官网:http:// software.schmorp.de/pkg /libev.html
github(star 1.2K):https:// github.com/enki/libev
文档介绍:https:// metacpan.org/dist/EV/vi ew/libev/ev.pod
注意:学习此框架需要了解Linux操作系统部分基础知识。
IO多路复用技术:
reactor模式:
模块间的交互:
(10)buildyourownlisp-小型Lisp解释器
一本开源书籍,教你用C语言实现自己的lisp语言:一个1000行左右的简单lisp。
链接:https://www .buildyourownlisp.com/
网上有2个中文翻译版:
(1)https://www .abnerchou.me/BuildYourO wnLispCn/
(2)并未翻译完成:https:// ksco.gitbooks.io/build- your-own-lisp/content/
网友的实现:https:// github.com/NessOffice/L isp_on_C
(11)kilo-文件编辑器
用不足1000行代码实现一个文件编辑器,酷不酷?
github star 已有5.3K:https:// github.com/antirez/kilo
博客介绍:http:// antirez.com/news/108
官网:https:// viewsourcecode.org/snap token/kilo/
(12)ffmpeg-视频播放
不足1000行代码实现视频处理功能:
http:// dranger.com/ffmpeg/ffmp eg.html
在做项目的过程中,大家还要掌握良好的编码习惯,这里挑选了业内毕竟推崇的2个编码规范:
①华为C语言编码规范:https://www .dongeasy.com/wp-content /uploads/2018/03/%E5%8D%8E%E4%B8%BA%E6%8A%80%E6%9C%AF%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8c%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B%E8%A7%84%E8%8C%83.pdf
②Google C++ Stype:https:// google.github.io/styleg uide/cppguide.html
学习计算机一定不要想着速成,没有什么捷径和超能力。要下苦功夫去啃那些经典书和源码,然后自己动手写 ,所有技术大佬都是一行行代码敲,一本本书啃出来的。
我看过的书籍里的一部分
我看过的书籍里的一部分
我在大学期间,为了把专业学好,看了大量经典的专业书籍,整理了这份计算机必读的高分经典书籍 :
需要的戳下面链接下载
需要的戳下面链接下载
这份书单对于CS学习的同学帮助非常大且十分系统,这些书籍的电子版已经整理好了。
需要的直接戳这里领 :计算机必看经典书籍(附pdf下载),请注意查收~
希望本回答能对你有所帮助~
财富和美貌都是稀缺资源,为什么大家对两者的态度完全不同?
河北大午集团为何会被低价拍卖?