C 语言好难

都说 C 语言难学。本文给一点点提示,希望大家看完之后能受点启发。

C 语言的来源

建议大家去维基百科里了解一下 C 语言

这个语言诞生于 20 世纪 60 年代末,本来是为了写操作系统的。

非计算机专业的为什么也要学 C 语言?谁让你不幸生在了中国……

C 语言难在哪儿

根据大家的反馈,C 语言难在以下几个方面:

  1. 语法
  2. 谭浩强 C
  3. 数组、指针、字符串
  4. 像 ACM (程序设计竞赛) 一样的算法

下面逐个分析一下。

语法

感觉语法困难,说明不熟悉计算机语言的套路。计算机语言是人类与计算机的“最大公约数”。“代码”就是既能让人看懂,又能让计算机看懂的东西,所以当然要遵循一定的语法。

解决语法问题,从以下几方面入手:

  1. 把书上代码和老师讲的代码读懂。就像读英文文章一样,把该翻译的都翻译一遍。
  2. 留意每一个细节。注意每一个符号,注意大小写,注意空格,注意全角半角……
  3. 以现有的程序为基础进行改写。在计算机上反复试验

谭浩强 C

谭浩强是清华大学出版社的一位同志,他曾经为编程语言 (BASIC) 在中国的普及做出了一定的贡献。

但是谭浩强本人对 C/C++ 的理解存在一些问题,因此谭浩强主编的 C/C++ 语言教材也存在问题。谭书的问题主要体现在以下几个方面:

  1. 概念理解有误;
  2. 应该详细讲的,可能讲得不详细;有些不难理解的可能讲得很多;
  3. 代码风格拙劣;
  4. 错误地分析未定义行为 (“未定义行为”由 C 语言标准规定,即使代码能正常运行也没有任何意义,例如“a=a++;”。);
  5. 有些示例程序可能无法完全达到预期目的。

因此应该多准备一本教材。

数组、指针、字符串

因为数据都存在了内存里,而内存是个很抽象的东西,所以在编程初期大家应该多编编程序(废话),拿草纸画些方格来模仿内存。

数组和字符串在内存中是连续排列的,所以才让你画方格来模拟。把每一步操作,尤其是循环,在方格上面用走一遍,感觉应该会好一些。

算法

有些学校的 C 语言教学受到了算法竞赛的影响。由于算法竞赛难度很大,因此教学过程主要是“形似”。

对于算法类问题,最好的办法还是先听人把思路讲一遍,然后再结合代码理解思路。对于确实难以理解,但是考试还有要求的算法,最有效的学习方法就是背。单纯记忆效果可能不好,因此要结合电脑实践。

举个例子——这种代码看不懂就背:

int gcd(int a, int b)
{
    return b ? gcd(b, a%b) : a;
}