学习C语言一个月了,感觉看书都会,但是让自己写代码完全不知道如何下手怎么办?

小虎哥奇异故事


初学者在学习一段时间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语言程序,可以发现并没有什么难度。


IT刘小虎


我记得我翻谭浩强那本c语言翻了可能有1年,最后书都翻烂了,书上所有的试题都反复练习,刚开始是有点抗拒,就和你跑步是一样的,跑两圈后你就觉得腿软体酥,但如果这时我们如果再坚持跑两圈,你就会发现腿就开始有力了,又可以跑十圈,学习也是一样的道理,贵在坚持。


老欧教你玩转单片机


看了题主的问题,很显然是只看书,没有实际动手编程了;抑或是对着书敲键盘 过一遍,却从未进行更深一步的思考。


如果不慎选择了网上鼓吹的《21天精通XXX语言》这种书籍,建议趁早扔掉它。那么到底应该如何学习C呢?下面说说自己的看法:

1、看书

学习任何一门编程语言少不了先学习基本语法。C语言的语法也就是变量,数组、指针、表达式、逻辑操作、函数,宏定义等等,其精华也就是在指针这块。这里推荐两本书,至于谭浩强写的C,建议还是慎重使用吧!知识无国界,不得不承认国外的这些教材就是经典。

  • 《C标准库》

  • 《C和指针》

2、动手编码

无论学习哪一门编程语言,如果你仅仅是看书那远远是不够的。一定要多动手编程,打断点调试。

  • Linux下可以试着去学习gdb、gcc的使用;

  • Windows下推荐VS2017或者CodeBlocks,像什么VC6的这种古董就趁早丢掉吧。

3、总结

只有通过总结过去,才能将所学所见,内化为人生的积淀,丰富并提升人生的价值。

子曰,温故而知新!更是从另一个角度阐释了总结的意义所在

这里推荐使用Markdown语法来总结,它是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。更多的介绍这里就不进行了,感兴趣的可自行搜索。

4、综合前面所学知识写个小程序

这部分涉及到综合运用呢,比如最简单的XX管理系统之类的,网络相关的ping小程序、实现类似Linux下ls命令的小工具。

5、从经典开源项目中汲取营养

github上有太多的经典开源项目可供我们参考学习,比如「tinyhttp」,源码只有500多行却实现了一个简易的HTTP服务器,既能帮你融会贯通C语言基础知识,又能掌握学习HTTP相关网络知识。

6、善用搜索引擎

作为一个合格的程序员,一定要懂得善用搜索引擎,学会科学上网,懂得关键词搜索,多用「Google」「stackoverflow」,远离某度!


一句话作为总结,想要自己的编程能力突飞猛进,一定要不断地勤加练习,C/C++足够博大精深,很多工作多年的C/C++开发者,都不敢自称精通C/C++,选择了它,就意味着孤独,也许很长一段时间你可能面对的都是一个dos的黑窗口,而不是像Web、移动端开发那种可见即可得的开发模式,所以一定要有信心,要相信自己!


一个程序员的奋斗史


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

学习编程语言有哪些困惑

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

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

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

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

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

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

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

如何学习编程

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

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

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

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

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

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


大学生编程指南


以下所有的回答都是废话连篇,浪费阅读人的时间,浪费带宽,浪费头条数据存储空间。大道理一堆,实际没有一个可以着手操作,实践。

学c语言->第一步:买本c语言基础书籍,就是教你在dos命令框中运行程序的哪玩意。 淘宝 天猫铺天盖地的 找本销量靠前的就行。 也可以在网上找教程 讲解全面系统的就行。

第二步->买本”windows程序设计”学习windows api的使用。这样你就能写出调用操作windows系统的图形化界面程序了。

第三步->买本“linux程序设计” 或者“linux环境下c程序设计” 因为企业里多数使用linux系统做为服务器系统。学好了 不管是开发软件 还是运维都能有口饭吃。

第四步->有时间多阅读“TCP/IP协议详解” 卷一和卷二,一本是理论、一本是c语言代码实现的源代码举例。毕竟是网络时代,程序也需要增强网络通信的能力。这是socket的爸爸,不只是简单的开个端口连接下,传输个信息就完事了。

更多资料可以上Google搜索查阅

头条空间第一篇教程,教你上Google


众云梯


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

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

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

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

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

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

  • 第一阶段:努力理解并记住书中的内容,达到自己可以不看书,对书中的例题,在纸上可以写出基本正确的程序,在机器上简单调试即可通过;

  • 第二阶段:在纸上先写出每章后面的习题的程序,然后再上机经过简单调试,程序即可运行通过;
  • 第三阶段:重点掌握关于数据结构章节,如链表、双向链表的程序,后续我是配合清华大学出版社严蔚敏的数据结构来学习的,也是达到不看书在纸上写出程序,然后上机调试通过的程度;

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


最老程序员


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

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

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

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


法海爱上白娘子


我给你一个可行的建议:

找一本参考教材,快速过一遍打基础,主要理解数据类型,运算符号,数据结构,函数库分类等。

然后以问题为导向,挑选一些问题,比如读取一个文件并替换指定的内容,通过来编程写代码解决它,这个过程会遇到看参考书时遇不到的问题,这时就要根据自身的短板再回炉参考书,寻求知识的提升,这是一个循环往复过程。

编程即数据结构+算法,通过练习问题提升自己的算法能力和数据结构的思考能力,在所有计算机语言都是通用的。不同的编程语言只是在语法结构上有差别,本质的数字逻辑原理不变。喜欢C语言简单就学C语言,喜欢功能强大又复杂那就学C++,喜欢语法简练就学go,喜欢脚本解析运行就学python,php,js,他们不用编译直接解析器运行。计算机语言不分高低好坏,只有语法的简单与复杂之分,应用场景也有各自的强弱,适用的就是极好的。


十口坚果


没什么经验之谈,不知你学C语言是干嘛用的。先试着编几个小游戏,老掉牙的贪吃蛇,简易版俄罗斯方块等等。把思维锻炼下,然后看看了解下WindowsAPI,弄几个程序看看咋样。c是做底层的,不要拿他去画小窗口什么的,累死你。把数据结构好好学学。


罗李郎


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

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

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

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


分享到:


相關文章: