写给C语言新手的话

时间:2021-12-03 20:32:13

首先声明啊,写这个是因为一些加我QQ的朋友问我学习经验,我才写的。

另外,如果是二级党,那么请用谭浩强老师的书。然后你就可以不用看了。倒不是有偏见,而是我写的这个东西,根本不是为了考试,而是为了和新手交流怎么学习C语言,怎样编写代码的。

【如果要看,最后三条那是一定要看的。】

如果不是二级党,那么,开始:

 

一、      目的

我们做什么事情都是有目的的,比如说我,学习编程的最终目的就是从事软件行业。这个目的要十分明确,不能说想学编程,那么学编程的目的呢?当然如果仅仅是兴趣,我觉得这就是最光明正大的目的。

二、      有一个学习目标

还是以我自己为例,我刚开始学C语言的时候,就想要写一个学生信息管理系统,于是在我学习C语言八个月之后,终于完全有能力写出这个小项目,对于以后从事软件开发总算迈出了一小步。

读者应该明白了,我说的这个目标就是说你在学完C语言之后,要能写出一个东西,它可能是学生信息管理系统,可能是一个小游戏,还可能是一个外挂。总之你要有一个目标,这个目标不一定要多高,但一定要是你能力的体现。

三、      要有的学习工具和环境

学习是讲究环境的,还有一句话说:“工欲善其事,必先利其器。”

我觉得学习C的话,要有这么几个条件:

1、         电脑

不一定能上网,但一定要有,不然天天用C4(可以在安卓手机上写C语言程序的东西)搞,累死个人。

如果是笔记本的话,最好买一个外置的键盘。我不知道是不是所有写代码的人敲键盘的时候都很大力,反正我是,尤其是回车键。不然你每次都那么大力敲,本子用不了几天不就敲碎了。

2、        

C Primer plus

The C programming language

C语言程序设计现代方法

这三本书随便选一本。至于这三者之间的差异,我就不说了,C语言新手可以真么选择:

有过其他语言基础,比如VB ,javascript,actionsript之类的,可以看第一本

之前有学过一点C语言的同学,可以选第二本

之前没有任何基础的,可以选第三本

当然,这只是我的理解。其实对于新手来说,学习语法的话,这三本哪一本都可以。

3、         最好有一个固定的地方和学习时间表

在自己习惯的地方,效率应该会高一点。

至于学习时间表怎么安排,我就不说了。。。我自己的时间都安排不好的,如果你自己是那种很会安排时间的人,那么你一定要坚定的保持这个巨好无比的习惯。

4、         要保存你的代码

也许新手觉得我才刚开始学习,那么我最开始写的代码肯定错误百出,甚至可能不堪入目,为什么还要保存?

每个高手都是从新手过来的,高手第一次写代码的时候,也许还不如你呢。

保存自己所有的代码,以后自己能力提上去了,就可以看出自己的成长,也可以看出自己还有哪些坏习惯没有改掉,又可以作为自己的宝贵回忆,总之好处多多。

我以前把代码都保存到电脑上了,后来重做系统的时候,竟然一个不小心,忘了备份,结果就悲剧了。。。于是我学会使用CSDN博客,反正博客可以写很多,再不行就打包保存到网盘上。总之作为一个程序员,备份那是相当滴重要。

5、         善于利用百度,google之类的网站

不是每个人都可以自己搞定所有的问题,所以当你遇到自己搞不定的问题的时候,完全可以询问好友,老师,同学,也可以度娘之,google之,搞不定问题并不可耻,如果搞不定还不承认,自己闷头瞎搞,那就是愚蠢了,所以我们不仅要不耻下问,还要会不耻上问。

四、      学会坚持,更要学会休息

有一个伟人说过:“身体是革命的本钱。”

编程本身就是一个强脑力加强体力的工作,所以身体就显得尤为重要。

如果你无论如何都写不出代码,无论如何都看不懂指针,无论如何都搞不定栈和队列,那么类似于这种情况,就远离电脑,游戏神马的也不要搞,就直接关掉电脑,好的就这样,然后离开去打球,去溜达,去勾搭小姑娘等等能让你放松的活动。

至于坚持,坚持的越久的人,收获的越多,看的风景也就越多。

编程毫无疑问是一个枯燥,乏味,劳累,无趣……的工作,对于那些以编程为乐的人,或许不觉得,对于不那么喜欢编程的程序员,就要学会坚持了。我相信每一次终于搞定一个程序之后,那种成就感,可以冲淡一切疲惫。

五、      关于编译器那点事儿(可以不看)

可能你的书上推荐的是VC6.0,可能是Tubor C,也有可能是我给你推荐CodeBlocks,还有可能是你自己用C-Free,其实用哪个无所谓,对于刚开始学C的新手来说,学会  C的规则是最重要的。

例如说我,刚开始电脑是WIN7的,VC总是不能用,于是搞了一个C-Free,后来换成XP系统,开始用VC,再后来感觉CodeBlocks比较好,于是又换了。

CodeBlocks对于C99的支持比VC6要好,当然你用VS的话,也是可以的,因为VS加上助手,那简直碉爆了。

我现在是用UE写代码,安装了一个CodeBlocks,把环境变量配置好,然后在CMD里面用GCC命令编译运行程序,因为这样生成的中间文件少。

再有就是,不管你是用IDE也好,用代码编辑器也好,最好把窗口的背景色设置成沙绿色,因为白色背景实在是很刺眼。至于怎么设置,请度娘之。用Linux的同学,就自己想想办法吧,你都会用Linux了,这个应该难不倒你。

六、      语法学习经验

怎样学习语法,这是个问题,如果之前学过VB之类的也许还好一点,但是对于没有任何编程基础的人,也许刚开始学习语法的时候,会遇到各种问题,这里给出我的经验:

首先,不要过度追求细节。新手学C语言这个事儿,过度追求细节没有好处。大致理解,不求甚解也就行了,毕竟刚开始学,大致能明白怎么回事就行。就好像学习数学一样,你也许一个概念也背不出来,但是你明白原理的话,一样可以计算。

其次,语法记不住没有关系。曾记得我刚开始用指针那会儿,不看书,都不知道指针是啥玩意儿。所以,你会运用语法就行,不用死记硬背。

再次,遇到语法问题,不要纵容自己忽略,否则会养成错误认知,以后再想改就不好改了。

最后,如果你的英语很牛,那么你就看C语言标准吧,关于语法,没有比这个更好的东西了。

七、      编写代码的经验

1、         代码风格清晰要比高效更重要

代码的风格是一个很大的问题。你要像写十四行诗一样写代码。

有很多新手可能会在一行代码里面写好几个语句,也许你觉得这样写起来很快,但是这样是不行的,用我的话说,那就是错误,而且是很严重的错误。如果让你在杂乱无章的代码里面找一个编译器检测不出来的错误,那么你会很辛苦。如果代码超过几百行(也许会有几千行),你的风格还是那么糟糕透顶的话,那简直是无法想像的事情。

推荐新手在有一定的能力之后,最晚也要在学会函数的时候,可以看看《C/C++高质量代码》这本书,我现在的代码风格就是按照这本书写的,记得外国也有一本书是说代码风格的,具体名字忘了,可以自己查一下。

总之风格!风格!风格!风格!很重要!!巨重要!!无比重要!!!

2、         注释

也许新手又会觉得我小题大做了,我自己写的代码难道我自己还不清楚么?写注释要一直切换输入法,会影响写代码的速度,一旦修改代码就要修改注释甚至重写注释,有的时候注释好难写……是的,写注释好累,写注释好麻烦,写注释好墨迹。但是以后工作以后,没有几个项目是自己一个人搞定的,如果你的代码一行注释都没有,那会对别人造成很大的困扰。如果你看自己几个月以前甚至是几年以前的代码,一行注释都没有,那看起来会相当辛苦。

注释可以帮助我们更好的理解代码,可以帮助我们更加快速的阅读代码,可以加快我们的思维速度,可以……总之好处太多了。

有一句话说:“每一个不写注释的程序员,***都想注释那么长。”,额,这句话请自己百度之。

3、         怎样修改错误代码

我们几乎天天遇到这种情况:我写的代码没有问题啊,为什么运行不正确?或者说编译器没有报错,为什么就是无法运行呢?

这是因为你的代码有错误,当然这是一句废话。。。。

如何修改自己错误的代码?

如何快速的找到编译器都找不到的错误?

如何尽量的少写错误的代码?

其实想要减少错误,想要避免编译器检测不出来的错误,是很简单的事情,那就是调试,当然我反正是不会调试,如果你会的话,请留下你的QQ号码,或者博客地址,或者其他联系方式,电话号码也是可以的,只要你能教会我调试。

我一般都会在关键变量附近添加printf语句,这样可以随时监测变量的变化情况。

我一般会先写小规模的测试代码。比如要你输出50000以内的素数,我会先输出100以内的,如果有错误的话,这样不是很容易找?所以对于数据规模比较大的问题,可以先缩小规模,然后搞一个通用代码,然后扩大数据规模。

我一般会把问题分成几个模块,然后一个一个的搞定。比如输入两个整数,然后输出最小公倍数和最大公倍数。

我会先完成公倍数的功能,

再把公倍数的代码注释掉,

再完成公约数的功能,

最后去掉注释,最后测试。

对于要求比较多的问题,可以一步一步来,不要着急,饭要一口一口的吃,代码要一点一点的写。

4、         写不出来代码怎么办?

其实不仅仅是新手,每个程序员都有写不出代码的时候,那种摔鼠标、砸键盘就是写不出代码感觉太憋屈了,太难受了,但是我们写不出来有什么办法?写不出来就不要谢了嘛。。。。。

如果写不出代码,可能是那个问题对你来说难度太高了,放弃也是一种聪明。

如果写不出代码,可能是你的思路本身就是错误的,应该重新设计解体思路。

如果写不出代码,可能是你没有查阅足够的资料,比如求最小公倍数。最小公倍数=两数之乘积  / 最大公约数。你连这个东西都没有查到,你写不出来能怨谁?

如果写不出代码,可能是你太累了,休息一下。

如果写不出代码,可能是你应该参考别人的代码的时候了,其实照抄别人的代码有时候也是极好的。

如果写不出代码,可能是你根本没有充分的分析问题,一上来就写代码,没有足够的规划,写代码当然是一团糟。

写不出代码的原因很多,但是这个时候的心态却就那么相似。写不出代码,要仔细考虑原因,是不是自己太着急了?是不是自己搞错方向了?是不是这个问题本身就有问题呢?是不是自己耻于请教别人呢?是不是自己懒得查资料呢?总之这个时候,一定要Hold住,不要因为写不出代码就真的摔鼠标砸键盘了,整坏了,要花钱滴。。。。

写不出代码,是程序员经常遇到的事情,不必往心里去,也许睡一觉,梦里就写出来了呢?

5、         怎样写出很高级的代码?

新手看高手的代码,总觉得好简洁,好厉害!

高手看大神的代码,总觉得我靠,我怎么看不懂,但是运行起来好快啊!

这个东西是写给新手看的,所以怎样写出高效率,巨简洁的代码,要在具有一定的水平之后再讨论。对于新手来说,能够解决问题就可以了,不必对自己的要求太苛刻。

八、      怎样取舍?

我认为新手学会下面的东西就可以了:

1、         数据类型
新手只需要掌握:int,float,double,char,字符串就可以了,只要会定义,会使用,就行,不用追求int类型占用几个字节,最大最小值是多少什么的,因为没有必要。

2、         运算符
+,-,*,/,%,&&,||,=,==,就行了

3、         三种流程控制

 

4、         数组的基本用法

5、         字符串的运用和处理
字符串处理是一个大问题,不过新手只需要学会定义字符串数组,会基本的字符串处理函数,例如复制,比较,查找是否含有某个字符就行了。至于更加复杂的处理,等你学会C的语法,具有一定的能力之后再说吧。

6、         自己定义函数,并且会运用函数解决问题
也许新手会觉得,我可以把所有的代码都写在主函数里面,这样多好?不用定义函数,好省事儿。

其实这是不对的,用我的话说,那就是错误,而且是不可以犯的错误。虽然刚开始的时候,那些小问题,比如输出菱形,求公约数,输出佩纳契数列什么的,都可以把代码全部写到主函数里面,但是这并不是真正的C语言程序,如果没有自定义函数,那还是C吗?

新手只要能把这些小问题用自定义函数搞定就行了。不是那种把输入输出都写在一个函数里面,然后在主函数里面调用函数,那是不行的。要学会输入输出有主函数处理,中间的处理过程,交给自定义函数。

C语言是面向过程的语言,如果不会自定义函数,不会设计函数,那就是没有学会C语言。

7、         指针
指针学起来好辛苦啊!指针规则好多啊!指针的错误好难找啊!

           是的,指针很难搞,但是学不会指针的人,就没有学过C语言。

           在上面那条里,我提到的问题,可以用函数加指针搞定就行了。

8、         库函数

C的库函数那么那么多,我怎么记得住?
我可以明确的告诉你,你是不可能全部记住的。如果你真的去背了,那你别学C了,去参加记忆大赛吧。
我们只需要记住常用几个就行了。比如printf,scanf,pow,等,新手能够运用库函数解决问题就行了。

9、         C的其他内容

比如文件,比如宏,比如多文件编译,等等这些问题,可以等你需要加深学习的时候再搞

九、      几个小程序

1、         Hello World

这个程序,必须要亲自敲一边,并且运行成功,没有理由,那就是必须滴

2、         输入两个数字,求他们的和或者乘积

这是看你有没有学会输入输出函数和几个最近本的运算符

3、         解一元二次方程

这是看你有没有学会选择控制语句和对输入输出处理的提高

4、         输出配伯纳契数列或者输出菱形图案

这是看你有没有掌握循环控制语句

5、         自己写字符串复制函数或者求长度函数等

这是看你对于字符串数组的理解,以及自定义函数处理问题的能力

基本上也就这些吧,一不小心没有收住,如果你看完了,新手有问题可以留言提问,高手感觉哪里有问题,请不要客气的指出来,我是很认真的说。
t.163.com/event/info/eventId/4951314002052595292
t.163.com/event/info/eventId/-1840863506486226979
t.163.com/event/info/eventId/-4064796040344072102
t.163.com/event/info/eventId/-2261663094332661587
t.163.com/event/info/eventId/-9030760735116791113
t.163.com/event/info/eventId/-2316749589172298488
t.163.com/event/info/eventId/4313292503660540271
t.163.com/event/info/eventId/8908048203472371388
t.163.com/event/info/eventId/6842823486796430041
t.163.com/event/info/eventId/7112513400522185384
blog.sohu.com/s/MjMyMjYzNzc1/277541672.html
blog.sohu.com/s/MjMyMjYzNzc1/277541860.html
blog.sohu.com/s/MjMyMjYzNzc1/277542075.html
blog.sohu.com/s/MjMyMjYzNzc1/277542257.html
blog.sohu.com/s/MjMyMjYzNzc1/277542541.html
blog.sohu.com/s/MjMyMjYzNzc1/277542765.html
blog.sohu.com/s/MjMyMjYzNzc1/277542982.html
blog.sohu.com/s/MjMyMjYzNzc1/277543207.html
blog.sohu.com/s/MjMyMjYzNzc1/277543346.html
blog.sohu.com/s/MjMyMjYzNzc1/277543496.html
kan.weibo.com/con/3624625456793047?_from=title
kan.weibo.com/con/3624625729422856?_from=title
kan.weibo.com/con/3624626216080897?_from=title
kan.weibo.com/con/3624626446767659?_from=title
kan.weibo.com/con/3624627038045918?_from=title
kan.weibo.com/con/3624627683968840?_from=title
kan.weibo.com/con/3624628208256927?_from=title
kan.weibo.com/con/3624628577474451?_from=title
kan.weibo.com/con/3624628904511498?_from=title
kan.weibo.com/con/3624629286311938?_from=title
event.weibo.com/2011262
event.weibo.com/2011342
event.weibo.com/2011380
event.weibo.com/2011628
event.weibo.com/2011706
event.weibo.com/2011764
event.weibo.com/2011908
event.weibo.com/2011992
event.weibo.com/2012046
event.weibo.com/2012250
qing.blog.sina.com.cn/3237933710/c0fef28e33004zt2.html
qing.blog.sina.com.cn/3237933710/c0fef28e33004zt1.html
qing.blog.sina.com.cn/3237933710/c0fef28e33004zt0.html
qing.blog.sina.com.cn/3237933710/c0fef28e33004zsz.html
qing.blog.sina.com.cn/3237933710/c0fef28e33004zsy.html
qing.blog.sina.com.cn/3237933710/c0fef28e33004zsx.html
qing.blog.sina.com.cn/3237933710/c0fef28e33004zsw.html
qing.blog.sina.com.cn/3237933710/c0fef28e33004zsv.html
qing.blog.sina.com.cn/3237933710/c0fef28e33004zsu.html
qing.blog.sina.com.cn/3237933710/c0fef28e33004zss.html