C语言那点事——如何从零学好C语言?

本文的核心,是在讨论如何真正的学好C语言,而不是讨论如何在C语言考试中拿高分。当然真正学好了C语言,拿高分也就不那么难了。

C语言是很多大学生大一的一门必修课,尤其是理工科专业,这门课程更是重中之重。如何学好C语言呢?这里提几点我的看法。

打好基础

基础对于任何东西的学习都很重要,没有基础肯定不容易学好,遇到问题解决不了,然后发现欠缺了到很多基础,就会感觉无从下手。C语言国内采用较多的是谭浩强的《C程序设计》,我更推荐的是C语言创始人参与编写的《The C Programming Language》,中文名《C程序设计语言》。

有时候有人问个问题,给他解释根本听不懂。我问他,你知道什么是变量,什么是表达式么?对方表示不知道。这就是基础欠缺太多的表现。这样的情况只能好好去看书补基础。

当然,基础知识严重欠缺也不能全怪学生。

由于C语言常常在大一学习,很多人还不能适应从高中到大学的转变。高中老师逼着学,一点一点不厌其烦的灌输知识;而大学,一下课老师就有自己的事,负责任的老师也就是偶尔抽出一些时间给大家集中解答疑问。于是很多人一下子转变不过来了。这个也是教育存在的严重问题吧,不能很好的培养学生的自主学习能力。

很多人没接触过编程,初次学习很难接受非常正常。很多东西可能都不懂,为什么要这么做啊?为什么printf就能输出Hello World?printf之所以能输出字符串,其原理深入研究下去比较复杂,没有学过编程的人更是无法理解。

所以初学的时候,不要过早的问为什么,先照着别人说的做,对语言逐步熟悉;到了学习的足够深入时,就有基础去探究深层次的原理了,甚至能自然的理解很多东西,即所谓的融会贯通。说的简单一点,初学C语言依赖printf的使用,而printf的原理则又依赖深入的C语言知识;互相依赖的东西,只有找到一个合适的切入点,一点一点的学习。

不惧怕英文

建议编程时,变量名多使用英文而不是拼音,具体的讨论,可参考下文:

《思想:不要惧怕英文——英文的作用和重要性》 http://www.paincker.com/english

好习惯的养成

很多初学者,对于软件设计规范没有什么概念,甚至一些老师也没有去强调这些问题,或者是学生没有认真听,而这一点恰恰是很重要的。在以后的工作中如果从事软件方面的工作,公司也会对软件设计规范有要求。

软件设计规范包括:命名风格、代码风格、注释风格、工程文件管理等。

命名风格包括变量名、函数名等,首先一般都用英文而不是中文,前面已经说了;统一比较重要,例如首字母大小写、单词之间用下划线还是大写的方式分割,例如lcd_display,LCD_Display,printInfomation等。

参考命名风格(模块名_功能):

很多人学习编程时,不知道代码风格的重要性,甚至都不知道什么是代码风格。所谓代码风格,可以简单的理解成程序代码的排版,在合适的地方应该加上缩进、空格,大括号要按照规定的格式对齐。如果你的代码有问题需要别人帮忙,代码排版混乱,高手肯定懒得给你看。就像写作文不加标点不分段一样,即使让作家给你看哪有问题,人家肯定也不愿意看。

如果有了正确的缩进,遗漏大括号之类的很多问题根本不会发生。

至于代码具体的风格,例如什么时候换行,什么地方加括号,并没有统一的规范。可参考《C++ Primer》一书中的讨论:

关于什么是 C 或 C++ 程序的正确格式存在无休止的争论,我们相信没有唯一正确的风格,但一致性是有价值的。在选择代码风格时,要考虑提高可读性,使其易于理解。一旦选择了某种风格,就要始终如一地使用。

《C++ Primer》中的C++代码风格

除了代码风格,注释风格也有必要注意下,这里不做细说。

参考注释风格:

工程文件管理,对于初学编程时,小的程序一般只有几个文件,没有太多的问题。

规范书写程序的重要性

减少代码错误,方便学习交流

代码混乱,别人看不懂 ,时间久了,自己也看不懂

实现代码复用,大大提高编程效率

完成大型工程时,好的风格非常有必要

多人开发程序,便于分工合作

公司工作对代码风格要求严格

养成良好代码风格是写出高质量程序的重要过程

写出优美的代码是一门艺术

……

当然,前面说的这些风格未免要求过分严格,对于我们平时学习编程来说,没必要总是那么规范,但是至少要做到,能让人看起来比较清晰舒服,基本的代码风格还是要有保证的。

认真

认真也是相当的重要。据观察,大神、学霸等某方面比较成功的人,在他所在领域,一般都非常认真。中国的技术为什么做不好,有一个重要因素就是缺乏认真做事的意识。从小由于环境等因素,作业只是为了完成任务,养成了不认真的习惯。我希望中国每个大学生,至少在自己想学好的事情上足够认真,这样才能对得起“大学生”这个称呼。转自科学网的一篇文章很值得我们思考:

《中日差距一厕所》http://www.paincker.com/china-japan-difference

多练习

想要学好C语言,最重要的一点就是多练习。学校开设的C语言课程基本上都会有上机课,一定要抓紧这些机会去实际练习编程。如果有时间和条件,也可以在机房或是自己的电脑上多进行实际操作练习。

自主学习与提问的智慧

当自己学习出了问题时,要尽可能独立思考去解决;再考虑通过查阅书籍和网上的资料来解决;实在还是解决不了,再考虑请教别人,而提问也需要智慧。具体可参考:

《自主学习 & 提问的智慧——学习中遇到难题怎么破?》 http://www.paincker.com/solve-problem

C程序如果出了问题需要提问,建议做到以下几点,会大大增加被人回答的几率:

至少有基本的代码风格,例如合理的缩进;

说明程序的目的;

如果出错了,描述一下哪里出错,错误的现象是什么。如果是编译时就有的语法错误,把编译器报错信息贴出来;如果是执行结果不对,不正确的执行结果是多少说清楚。因为看的人不一定能用电脑给你的程序再执行一遍试试,即使大神也不是机器人,代码也不是一眼能看明白的。

对于稍微复杂一点的程序,最好给出几个测试用例,也就是分别输入1、2、3的时候,正确结果应该是多少。