怎么去学习编程c语言,我没有一点数学基础 还有就是看不懂里面的代码 需要怎样去学 谢谢! 自学c语言应该用怎样方法去学习?

自学c语言应该用怎样方法去学习?

刚开始可以学谭浩强的《C语言程序设计》是清华大学的老教授写的一本大学教程,确实比较适合中国学生,特别是初学者的学习!(不要怕网上的一些对此书的负面的评论,毕竟这本书刚成书的中国国情决定的,但毕竟这本书成就了现在的很多C语言大咖,从书的版次和销量也说明了这本书的当时畅销程度),反正从一个C语言熟手或高手来看这本书可能会有一些问题但是,谭浩强的《C语言程序设计》的有一些地方确实也存在欠妥的地方,比如变量的表示很多用a,b,c,这一点如果初学者学了后成了习惯,那以后用C++等语言编写大型程序会出大问题,还有由于是一本入门教材对一些C语言的深入探究也不够,真正实际应用的实训例子也欠缺。等等
建议如果学完谭浩强的《C语言程序设计》后再好好看看.[C和指针].(美)Kenneth.A.Reek。,C primer plus第六版这两本书,然后有机会好好研究C语言代码的汇编调试代码,最好对内存的分配,代码区,数据区,数据区的全局变量区,栈区,堆区(全局变量,静态变量,局部变量在上述内存中的存储结构以及作用域,最好还要了解数组,结构体,共用体,位域的内存中的存储结构也知道);以及函数调用的汇编实现过程(栈实现过程)等知识到网上深入学习一下。有机会还可以用keilC进行单片机编程或学c++。

我也是初中学的编程,不过那时候学的是B语言,我是从书店买的书,自己没事就写。。上数学课的时候,把数学题都在电脑上耍。。那时候电脑还有现在这么先进。。所以推荐你自学。。不懂的问题,多用度娘搜索,多去一些编程相关的交流社区。。 自学C语言不是一件简单的事情,因为后来我学C语言也是自学的,和我的专业八杆子打不着。。可以分享一下我的学的过程,也许对你有所启发, 起初学C语言,学的是语法,看的谭浩强的教程,现在我推荐你看K&R C语言程序设计。。后来人们说,C语言有个无C境界 就是看到C语言源码就能知道汇编代码,于是我开始学汇编,其实主要学的调试技术,事实证明这些算基本功,必须要学的哦!再后来,我也好奇啊,一条mov指令是怎么样被计算机执行的? 于是又去学习组成原理,再后来发现要学好组成原理,必须对于物理上的电学,以及数学都有较深入的基础,于是把大学本科专业的数学教材全部买全了,全自学的,有些到现在也不懂,后来就发现,要弄好数学必须得懂些哲学的东西,举个例子,数学的最早著作是欧几里的《几何原本》 这是知识,但是没有一本书告诉你,为什么数学的最早学科是几何?这些需要你自己找答案。更重要的是数学也起于哲学。。再后来,读了太多太多的东西了。。

最后得出个结论:用到啥学啥,别瞎学,这是第一点,第二点就是多用。。不要老在那看理论,那个是真心不爽的,比如标识符必须得字母或下划线开头,其实你自己胡乱写代码,碰到这个问题,一次就记住了。。。
几条建议: 把C语言弄个差不多就去读C函数库的源码 Linux 0.01的操作系统源码 喜欢游戏的话可以读一下圣剑传说的源码。。这些源码读的多了,你写程序自然顺手。。 然后就是把组成原理 编译原理 操作系统原理 ,彻底的与C语言相结合。。这都是相通的啊。。比如,int main函数书上都说有系统调用,到底有系统的哪个函数调用 ?怎么调用 的?这就和操作系统相关了。

总而言之,一句话———————— 要做到知行合一。。。



一、C语言是最值得学习的语言

学习C语言,首先要明确地告诉自己:C语言是世界上最值得学习的语言。

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

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

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

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

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

    二、学习C语言的初步路线

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

    而学习C语言,一开始就不那么厚 : ) 。大道至简,只需一本:

    <img src="https://pic2.zhimg.com/50/v2-08669e3c2451a1ae01e48b6618877050_hd.jpg" data-rawwidth="286" data-rawheight="337" class="content_image" width="286">

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

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

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

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

    // 定义链表节点结构

    struct list_head

    {

    struct list_head *next, *prev;

    };

    // 创建链表

    #define LIST_HEAD_INIT(name) { &(name), &(name) }

    #define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)

    // 判断链表是否为空

    static inline int list_empty(const struct list_head *head){return head->next == head;}

    // 运行时初始化链表

    #define INIT_LIST_HEAD(ptr) do { (ptr)->next = (ptr); (ptr)->prev = (ptr); } while (0)

    // 我自己写的测试函数,方便读者阅读:

    int main()

    {

    LIST_HEAD(my_list_head);

    printf("列表是否为空  %d
    ", list_empty(&my_list_head));

    return 0;

    }

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

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

    <img src="https://pic4.zhimg.com/50/v2-35acfa319c4ea17a53db962a40373bb6_hd.jpg" data-rawwidth="300" data-rawheight="369" class="content_image" width="300">

    赏析一下书中前几个问题:

    第1章 正则表达式匹配器

    第2章 Subversion中的增量编辑器:像本体一样的接口

    第3章 我编写过的最漂亮代码

    第4章 查找

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

    PS:关于C语言开发环境

    1、Windows平台,请使用Dev-C++。不要用Visual Studio,对C语言支持不完整。

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

    三、关于进阶

    C语言的进阶会遇到两个主要问题:

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

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

    这样一来,学完基本知识之后的进阶之路真的非常陡峭。

    我个人大胆给出C语言进阶的一个相对缓和的路线:

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

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

    3、尝试ACM竞赛题,ACM竞赛和OnLineJudge平台,比如

    http://tyvj.cn/

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

    4、非常重要的私货:如果除了做练习题以外没有练习机会,那么请把C语言放一下,快速学习Python(首选)、Lua(次选)、JavaScript(或TypeScript更好)等能够立即实现功能效果的语言。学习好的动态语言有两方面好处:

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

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

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

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

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



看不懂代码可以找网上的公开课,都有免费的,老师讲的也很详细

那就没有办法了啊, 嘻嘻

我想自学c语言怎么办?我是一个完全的小白!以前一点也没接触过!请高手求...
1.学C语言重要的是你的逻辑思维和坚持学习的恒心,学编程特别是语言就要多看,多思考,多练,也就是多敲代码. 2.就C语言来说,是编程者应该好好学的一门语言,因为它是你日后要学的其他一些更高级的面向对象的编程语言的基础,学好了C语言,日后学高端语言就相对容易一些,而且在学习C语言的同时你的逻辑...

怎么去学习编程c语言,我没有一点数学基础 还有就是看不懂里面的代码 需...
C语言的语言本身很容易“精通”,一旦你理解了指针、函数指针等问题,基本知识方面就横行无阻了,很少会遇到完全没见过的语法。 C语言基本学习过程真的没有太多好讲的,假设每天学习两小时,每周学习5天,只要动手多写例子,把例子保存好随时翻看,那么C语言的语法基础很快就能全部过完一遍,估计半个学期的时间就能看完。难...

如何c 从零开始学习如何c语言编程?
学习C语言编程需要不断地练习编写C语言程序。你可以从简单的程序开始,逐渐提高难度。可以从一些简单的程序开始,如打印“Hello World”等等。然后逐渐学习更复杂的程序,如计算机网络、数据库等等。

C语言怎么学啊 ??我一点也不懂
1、学好C语言,你可以很好地应付任何一种编程工具。 2、一定要多上机练习,通过程式了解相关知识。几经反复方得正果。 3、不要把学习C语言当成一种任务,更不要把它看成很难完成的任务。要充满自信,只要是一个智力正常的人都能学好C语言。始终保持游戏的心态,多发现其中的乐趣。当感到编程趣味...

如何入门C语言
自我感觉拔高的差不多的话,建议你思考一个比较系统的东西例如学生信息管理系统,火车订票管理系统,通讯录,然后自己编写下,即使编写个教材上的试试换个其他的思路,若是能编写下来,说明你已经完全的入门了,市面上关于C的书籍都能为你所用了,没有什么可以阻拦你去往高的层次发展了,恭喜你!推荐书籍建议你看看林锐...

我想学习C语言编程,但我一点基础都没有,我是自学好呢?还是去参加一个培...
一点基础都没有还是先参加培训班吧,没点基础自学比较难,容易打击学习的兴趣,培训过后有基础了可以自学,自学记忆会深很多,我当初就是0基础自学的,刚开始几度想放弃,后来给人指点了下有点懂了兴趣也就来了,祝你成功!!

新手学编程该怎么入门
但一般的高级语言难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作),例如:对内存地址的操作、位操作等)。人们设想能否找到一种既具有一般高级语言特性,又具有低级语言特性的语言,集它们的优点于一身。于是,C语言就在这种情况下应运而生了。C语言介绍如下:C语言多次作了改进,但主要还是...

我从没接触过编程,但是想要学习编程,应该从哪里入手,他们说C语言是必须...
如果你一定要学C,推荐《C程序设计语言(第二版)》是K&R写的,又叫KR C,是C语言领域的圣经。不过难度还是有,如果看不懂,可以搭配《C primer plus》这本就比较详细了。谭浩强的书最好少看。如果你愿意听我的从python开始学,我推荐你可以先在codecademy这个网站上学习一下,互动课程,比较轻松有...

零基础的我如何学习C语言?
具体学习方法:第一阶段 《C Primer Plus》蓝皮+郝斌的C语言视频 我没推荐经典的《The C Programming Language》,因为我举得《C Primer Plus》比较啰嗦一点,当然这里的啰嗦是对完全初学者有很大帮助的。看你自己的基础吧。郝斌的视频也是很重要的,初学者往往需要一个“瓢”,一步一步的照着画,...

怎么自学c语言,需要怎么学习?
C语言学不会怎么办?我大一的时候也需要学C语言,C语言自学方法有很多,下面是我的建议。1.首先应该记住基础知识点,如数组,结构体,指针等相关内容,如果在编程过程中遇到想不起来的知识点,一定要及时去翻书或者上网搜索。2.有时随身携带电脑不方便,可以带上空白纸和笔(或者用手机里的软件),每天...

上一篇:
下一篇:

相关链接

星空游玩网特别说明:本站文章来自互联网交流,仅供参考,并不代表本站对其准确性和真实性作任何担保
© 星空游玩网 联系邮箱:电邮