都说 C 语言难学。本文给一点点提示,希望大家看完之后能受点启发。
C 语言的来源
建议大家去维基百科里了解一下 C 语言。
这个语言诞生于 20 世纪 60 年代末,本来是为了写操作系统
的。
非计算机专业的为什么也要学 C 语言?谁让你不幸生在了中国……
C 语言难在哪儿
根据大家的反馈,C 语言难在以下几个方面:
- 语法
- 谭浩强 C
- 数组、指针、字符串
- 像 ACM (程序设计竞赛) 一样的算法
下面逐个分析一下。
语法
感觉语法困难,说明不熟悉计算机语言的套路。计算机语言是人类与计算机的“最大公约数”。“代码”就是既能让人看懂,又能让计算机看懂的东西,所以当然要遵循一定的语法。
解决语法问题,从以下几方面入手:
- 把书上代码和老师讲的代码
读懂
。就像读英文文章一样,把该翻译的都翻译一遍。 留意每一个细节
。注意每一个符号,注意大小写,注意空格,注意全角半角……- 以现有的程序为基础进行
改写
。在计算机上反复试验
。
谭浩强 C
谭浩强是清华大学出版社的一位同志,他曾经为编程语言 (BASIC) 在中国的普及做出了一定的贡献。
但是谭浩强本人对 C/C++ 的理解存在一些问题,因此谭浩强主编的 C/C++ 语言教材也存在问题。谭书的问题主要体现在以下几个方面:
- 概念理解有误;
- 应该详细讲的,可能讲得不详细;有些不难理解的可能讲得很多;
- 代码风格拙劣;
- 错误地分析未定义行为 (“未定义行为”由 C 语言标准规定,即使代码能正常运行也没有任何意义,例如“a=a++;”。);
- 有些示例程序可能无法完全达到预期目的。
因此应该多准备一本教材。
数组、指针、字符串
因为数据都存在了内存里,而内存是个很抽象的东西,所以在编程初期大家应该多编编程序(废话),拿草纸画些方格
来模仿内存。
数组和字符串在内存中是连续排列的,所以才让你画方格来模拟。把每一步操作,尤其是循环,在方格上面用手
走一遍,感觉应该会好一些。
算法
有些学校的 C 语言教学受到了算法竞赛的影响。由于算法竞赛难度很大,因此教学过程主要是“形似”。
对于算法类问题,最好的办法还是先听人把思路讲一遍,然后再结合代码理解思路。对于确实难以理解,但是考试还有要求的算法,最有效的学习方法就是背。单纯记忆效果可能不好,因此要结合电脑实践。
举个例子——这种代码看不懂就背:
int gcd(int a, int b)
{
return b ? gcd(b, a%b) : a;
}