如果学习编程想以C语言入门,那么就要做好打持久战的准备,一个月时间学习python、PHP、javascript的话,也许可以达到入门的程度,可以上手编写程序了。而C语言则不同,由于C语偏重底层,偏重计算机应用基础,没有强大且方便地库可供调用,也没有各种语言的语法糖,所以入门是比较困难的。要做好半年一年,甚至两三年入门的心理准备。

不清楚楼主看的是哪本C语言的书,只学习一个月书中的内容都会了吗?比如下面这些内容:

  • 指针尤其是二重指针,真正理解其含义吗?

  • 指向函数的指针怎么使用?

  • ......

这里只是给出了几个简单的例子,先要衡量一下自己是否真的会了。

理解一门语言的语法和真正能写出程序来还是有一定差距的。编程实质上是一个解决问题的逻辑思维过程,需要将问题进行分解,然后按照一定步聚分步求解,最后达到解决整个问题的目的。这种思维方式或能力只靠看书是不够的,需要不断实践才行。以我个人的经验来说,我是完全自学C语言的,看的是谭浩强老师的书,我大概是分成三个阶段:

  • 第一阶段:努力理解并记住书中的内容,达到自己可以不看书,对书中的例题,在纸上可以写出基本正确的程序,在机器上简单调试即可通过;
  • 第二阶段:在纸上先写出每章后面的习题的程序,然后再上机经过简单调试,程序即可运行通过;
  • 第三阶段:重点掌握关于数据结构章节,如链表、双向链表的程序,后续我是配合清华大学出版社严蔚敏的数据结构来学习的,也是达到不看书在纸上写出程序,然后上机调试通过的程度;

个人感觉,如果能达到第二阶段的话,基本解很多问题就不会一点思路都没有了。达到第三阶段,基本就可以应付绝大多数编程任务了。如果还想继续深入的话,还可以去各种演算法网站去刷题,如leetcode,感觉这种方式对编程能力提高帮助会非常大。


从事软体开发多年,对于C语言的使用已经有十几年了,现在编程领域里面使用C语言作为入门初级入门语言的比例在下降,主要未来编程语言的发展趋势是集成化发展,但在市场招聘C语言的绝对职位数量依然不在少数,没有必要介意C语言是不是过时的这种理论论调,想要从事嵌入式,通讯,操作系统等行业的工作C语言也是不可或缺的,很多初学者在学习的时候总是想著分出个最好的编程语言,编程语言对于每个人的来讲选择权不一样,编程的学习建议还是以兴趣为主要的导向。

学习编程语言有哪些困惑

现在就根据自己编程过程遇到的一些具体问题,总结出来分享给大家,在这不仅仅局限于C语言的方面的讲解,因为编程语言在很多方面是相通的。

选择纠结症。很多初学者总想著学一门万能的编程语言,这种编程语言既时尚还能好学,还能方便找到工作,现在主流的编程语言数量也是非常有限的,小众的编程语言数量倒是很多,现在全球的编程语言的总体数量有500多种,真正被大家认可熟知的也就是十几种,而且这十几种里面真正主流的也就是5种左右,所以选择起来没有那么复杂,而且建议尽量按照自己的兴趣导向去走。

在选择编程语言的时候,如果没有明确的方向,那么就去招聘网站选择职位最多的编程语言,一种非常简单直接的办法。

老是怀疑自己不是编程的料。很多人选择了一种编程语言就开始信誓旦旦的学习了,一般学习的第一阶段属于兴奋期,无论哪种编程开始阶段都会相对简单,但任何编程语言在学习过程中总会遇到困难,这个时候其实很简单的就是死磕,但不是钻牛角,这是两种不同的性质,死磕就是不断的鼓励自己坚持下去,记住一句话编程语言的学习属于循序渐进的过程,属于非常理性的学习过程,不是因为你的一腔热血就很快把事情给做好了,遇到问题充分调动自己去思考,搜集相关的资料,现在网路上有关各类编程语言的书籍和视频资料多的很,选择一个对应去看就可以了。

由于编程是一个相对入门比较难的职业,需要经过一段很长的过渡期,很多自学编程的人在过渡期倒下了,坚持不下去了,觉得自己的能力和性格不适合做程序员,任何职业想要真正了解必须经历一个痛苦的蜕变过程,所以这个时候有疑虑或者退缩都是正常的,没有什么人天生就是做某个职业的料,无论什么职业想做点成绩出来,都是踏踏实实干出来的。

总想一蹴而就。这一点非常适合问题中C语言的学习过程,很多人觉得已经学习一个月了,很多东西都能看明白,特别是看书上一些理论都明白了,为什么放下书本直接去写代码两眼一抹黑的感觉,这是典型的实践不够,需要找到写代码的感觉,这种感觉的培养需要时间,下一个阶段就是在掌握理论的基础上尝试著独立完成代码,这个需要时间,需要先去看别人写的代码,把别人写的优秀代码吃透了慢慢演化成自己的写代码的习惯,就是不断的学习观摩的,没有什么捷径。

在学习初期还谈不上什么风格,很多编程模式代码写法就是要从优秀代码中提取,模仿的多了研究多了,有些沉淀下来就是属于自己骨子里面的东西了,但这个过程需要时间,所以不要总想著几个月拿下什么编程语言之类的豪言壮语,首先从基本的模仿路线开始,熬的时间长了自然也就明白了,学习编程没有捷径。

如何学习编程

这是一个非常开放的难以回答的方向,现在只是以自己学习编程中一些经验分成几个步骤来说明。

第一以最快的时间选择编程语言。编程语言在编程技巧掌握之后,很多人都会有一种感觉其实属于编程工具般存在,不要选择的时候看的太重,选择一个市场上用的比较多的直接入手学习就可以了,没有必要纠结太多时间,而且选择的时候最好是以自己兴趣为出发点,因为有了兴趣就有了动力,即使发现自己感兴趣的编程语言在市场受众不多,也可以继续自己的选择,因为任何一种编程语言只要存在就会有存在的价值,在自己掌握之后切换到别的编程语言也会比较顺畅。

第二制定一边理论一边实践的学习计划。学习编程就是一个循序渐进的过程,不是一口气干掉的生意,所以先收起几个月完成一门编程的语言的念想,做好打长期战役的准备,建议不是要直接在网上完全的视频学习,这样非常容易迷失自我,还是先弄本实体的书让自己先去研究,先去看必须留下给自己思考的时间,编程玩的就是思维模式了,不去经历过程是学不好透彻的,学习一个章节,先把理论拿下然后是实践学习,实践即使不是很顺利也要坚持走下去,坚持的时间长了自然就有感觉了,当然不要钻牛角,因为编程过程中总会遇到一些当前知识理解不了的东西,这个时候就是先绕开,真正掌握一定的理论之后再回过头来学习。

理论的过程就是要理解,如果一知半解就不要想著先实践,理论的东西必须有8分以上的理解再去实践,效果是最佳的。

第三不断尝试总结编程模式。这点对于很多初学者有点难,但编程最终的结果就是你掌握了多少编程模式,编程模式的形成是多方面的,可能来源于自己学习书本上理论的过程中,也可能是在书本上练习题目的过程,也可能是在项目实战过程,项目实战过程可能经历的编程模式多一点,在自学理论过程中可能会少一点,但离不了最关键的两个字:总结。不想办法提炼这方面的能力,编程之路会走的非常的艰辛。

以上是个人在编程过程中总结的一些经验,不一定适用于每个人,但整体的大方向不会偏离太多,如同题目讲的看的能懂但就是不会写,就去找对应的代码,不停的模仿锤炼,时间长了变成自己的也就变成了自己的编程模式,拿出时间去锤炼去思考去实践,多硬的的石头也能啃下来,适用于任何编程语言。希望能帮到你。


作为一个程序员,我有话说。

1 程序员要想做得好,理论学习当然不可缺少,但更重要的是实际操作,只有经验多了才会有能力应对各种问题,更重要的是要有很强的逻辑思维能力,知道为什么计算机专业只招理科生吗,就是因为理科生的逻辑思维能力比文科生普遍强,但也不是绝对的哈,也有特例,想想自己曾经被数学 物理 化学 生物折磨的死去活来,但挺过来之后,真的发现自己逻辑思维能力比以前好多了,真是痛并快乐著,哈哈,要想写好程序,得养成程序思维,计算机可不是你哦,你要站在他的角度结合自己的项目,一步一步严格按照逻辑来,不然就会漏洞百出,记得我刚入职的时候,老是写不好程序,后来在前辈的指导下,慢慢培养自己的程序思维,也就越来越顺利了。

2 作为程序员,要不断学习新的东西,社会发展到今天,技术每天都在发展,都在进步,学校里学的东西撑不了几年就过时了,所以要想不被淘汰就得时刻学习,再好的程序员不勤奋练习一样会被淘汰,你还得要忍受孤独,加班,没日没夜敲代码,调试程序,有时候干到你崩溃,所以一般人真不做不了这个。

个人观点,不足之处请大神指导。


我其实也有类似的经历,当年学c的时候,也是自己看了几个月的书,感觉看书上别人写的代码都能看懂,然后自己去写个东西就不知道从哪下手了,后来总结一下,原因如下:

1.看书上别人的代码都是默认照著别人的思路来的,不需要考虑代码设计的思想,能懂c语言的语法基本就能看懂了。

2.优质代码都是通过千锤百炼积累来的,想要写的一手好代码,建议先从小出开始积累,自己来写一些小演算法:冒泡排序,杨辉三角形,九九乘法表,然后再来自己写一些小程序,设计一些小游戏,这样慢慢就有了积累。

3.要锻炼自己设计代码的思想,这点对以后的发展很重要,决定了你的职业上限,写代码的时候多想想为什么这么写,还有哪些方法可以实现目的,条条大路通罗马,对比参照下来,就是在进步。愿一往无前虎山行,拨开云雾见光明!


你好,这是作为新手必然经历的一个阶段。

我们在学习英语时都有这样一种感觉,当有一定的辞汇量时,看一下别人写的英文文章比较容易看懂,但是让自己写一篇英文文章,却感觉无从下手,你现在的感觉就类似学习英文的情况,为什么会这样呢?

能看懂代码,只要学会编程语言的语法,记住关键词即可。看懂代码就像阅读英文文章,本身不需要过多的思考,相对简单。

但如果要自己编程,除了懂编程语言外,更多的是依靠经验,只有通过多加练习,掌握各种编程处理问题的方法,到时候,你就会觉得写代码也不是一件多么复杂的事情!

所以,多多练习才是王道,遇到一些编程任务时,先不要看别人是如何实现的,尽量自己实现,然后把自己编写的代码和别人的代码相比较,学习别人好的地方,坚持一段时间后,你就会发现可以轻松编写代码了。


谢邀。

初学者在学习一段时间C语言后,会对语法和结构基本了解,再看书常会产生一种「什么都会」的错觉。之所以说「错觉」是因为,真让自己写C语言代码,不少初学者完全不知道如何下手。

这是一个比较普遍的现象,题主也不用惊慌,这里我将介绍一种非常适合初学者的编写C语言程序的方法。

从头开始编写C语言程序解决某个问题,应该按照什么步骤来呢?

我还记得我当初学习C语言时,看人家写的例子非常顺畅,觉得 C 语言也不过如此。可是真的给我一个问题让我从头编程解决,还真是一脸懵逼,完全没有头绪,不知道从何下手。

现在想想,这是因为当时我还没有编程思想,还不会按照计算机的思维考虑问题,这项能力只能多锻炼获得。

长征是一步一步走的,再复杂的C语言程序也是一句一句完成的。这里我将介绍一种「增量式」开发的思路,非常适合还没有形成「计算机思维」的初学者。

「增量式」C语言程序开发

还是以实际问题为例,对这种开发思路做介绍,请看问题:

一个长方形对角的两个点坐标分别为 (x1, y1) 和 (x2, y2),用 C 语言编写程序求它的面积。

从数学上来看,要解决这个问题,显然可以分三步:

  1. 计算这个长方形的长: L=|x1-x2|
  2. 计算这个长方形的宽:W=|y1-y2|
  3. 利用公式:长 x 宽 计算这个长方形的面积 S=L x W

这里直接认为长方形的长在 x 轴方向,宽在 y 轴方向了,长宽的方向并不影响计算面积。

接著,我们看看如何用C语言计算长方形的长。首先应该知道,坐标,长宽,面积应该用 double 类型的数据表示,所以计算长方形长的函数可以如下写:

初学者写到这里就已经不太自信了:这个函数定义写得对吗?虽然我是按我理解的语法规则写的,但书上没有和这个一模一样的例子,万一不小心遗漏了什么呢?

既然不自信就不要再往下写了,没有一个平稳的心态来写程序很可能会引入Bug。所以在函数定义中插一个return 0.0立刻结束掉它,然后立刻测试这个函数定义得有没有错误:

编译,运行,一切正常。这时你就会建立起信心了:既然没问题,就不用管它了,继续往下写剩下的C语言代码。

如果你不敢确定写的对,可以就此打住,再来测试一次:

编译并运行这段C语言代码,程序输出 2,是正确的。

至此,就完成了根据坐标计算长方形长度的函数,而且测试正确,又有信心往下继续写了。下面同样的方式来完成计算宽度的C语言函数:

好了,计算长和宽的函数都完成了,现在可以来写计算面积的C语言函数了。计算面积的话,就需要输入两个坐标了,也就是四个变数,然后要在计算面积的函数里计算长方形的长和宽,然后再把长宽相乘计算面积。

如果担心C语言程序写的不对,可以写到这里停下来,先把长和宽计算后列印出来。因为你已经测试过 width 和 length 函数都正确了,如果写到这里出问题了,那就说明肯定是 area 函数写的有问题,这样就不用去之前写的代码中找问题了。编译,运行发现一切正常:

确定没问题了,我们就可以继续往下写 area 函数的C语言代码了。

area 函数中的,包括之前我们测试 width 和 length 函数中的 printf 都起到了类似脚手架的作用:在盖房子时很有用,但它不是房子的一部分,房子盖好之后就可以拆掉了。

房子盖好之后可能还需要维修、加盖、翻新,又要再加上脚手架,这很麻烦,要是当初不用拆就好了,可是不拆不行,不拆多难看啊。写代码却可以有一个更高明的解决办法:把 printf 的代码注释掉。

到这里我们就写完了计算面积的代码,赶紧放到 main 函数中测试:

编译并运行这段C语言代码,发现输出正常:

成功了,至此,终于一点一点的(增量式)用C语言解决了问题。当然,熟练了以后,可以直接写出求面积的函数:

这样写简洁得多了。但是如果出错了呢?只知道是这一长串表达式有错,但根本不知道错在哪,而且 area2 整个函数就一个语句,插 printf 都没地方插。

所以用临时变数有它的好处,程序更清晰,调试更方便。而且,这样写,length和width函数还要不要?不要的话删掉,如果有些情况,只需求长方形的长和宽呢?

那留著 length 和 width 函数咋样?这样的话,length,width 以及 area2 函数有相同的C语言代码,一旦出了错,修改 length,width 还得记著修改 area2 函数。

维护重复的代码是非常容易出错的,在任何时候都要尽量避免。因此,尽可能复用以前写的C语言代码,避免写重复的代码

按照这个思路来看,还是 area 函数好一点。更进一步的,我们发现 width 和 length 函数的C语言代码逻辑其实是一样的,只是变数的名字不一样,这也应该避免,width 和 length 函数可以用 distance 函数代替:

整理一下,最终C语言代码如下:

到这里,我们就一点一点的写出了自己的C语言程序,可以发现并没有什么难度。


推荐阅读:
相关文章