虽然 C 语言是众多初学者进入编程世界的首选语言,但真正通过C 语言入行的人并不多,甚至不到“望 C 止步”的一半!
中途而退的人都说难!难!难!难上加难!看了很多专业书籍、记录重点知识点,最后却无法真正运用到实际项目,时不时bug,断连......
而 C 程序员则是相反的说法,认为“这是一门勤能补拙的语言”,他们在开始学习的时候,除了看书,还要花时间去同步练习,就和学数学一样:先看理论,再去练习实践,从而掌握。
C 语言不单是编程世界的敲门砖,还是其他语言的敲门砖,当你学好C语言之后,接下来无论想进军Java、C++、C#、还是Python、Go、PHP、JavaScript 等语言,都会轻松不少。
— 01 —
C语言为什么学不好
经常听到大家嘶喊:眼睛学会了,手却跟不上操作!这是为什么?
尽管C 语言如此火爆,学习的人也很多,纵使没有“望 C 止步”,但能运用自如的却远远不到一半!
● 无论是C++、Java、Object-C等其他很多语言,在语法特点上都很C语言类似,学习C语言更能为我们打好程序设计的坚实基础。
● 作为一门历史悠久的程序设计语言,C语言有着其他语言无可比拟的广泛的应用领域,小到“Hello World!”,大到操作系统,C语言的工作场景处处可见。学好C语言将大有可为。
● C语言强调的面向过程的问题分析方法,更是培养我们思维灵活性和严谨性的最佳途径。
C语言灵活多变的语法更是一柄双刃剑,一方面它能够充分发挥程序员的个性、提高工作效率,也提高程序运行效率。但是另一方面,C语言也能带来一些问题,其中最大的问题就是,学习了却无法应用到实际项目…………因为你只是单纯地学习了理论知识,没有去通过练习来真正掌握这些知识的核心!
常见的“坑”
哪一个编译器更好?
GCC 还是Visual C++?
哪一个IDE更好?
Visual Studio还是 Vim 或者 emacs?
这个表达式的结果到底是多少?
可能是这个?
有问题没搞懂,该怎么办?
找网络帮么?
对于初学者来说,最重要是有一本让你能够系统全面地从基础学起还能提供每个阶段相对应的练习题及答案的一本书,而这些“坑”在初入门时并不那么重要。
学习C语言的顺序
(1)选一本好的入门书,系统地学习。
(2)动手去上机操作和练习,对答案,任何理论知识都需要实操验证。
(3)正确认识和理解C语言,把握学习的重点,避免分散精力。
从最基础的语法(变量、字符串、条件、循环、数组、函数、结构体等),再到高阶的算法(指针、内存管理等C语言中至关重要的两大标准),循序渐进。
确实,大家在学习 C 语言的过程中,往往忽视了最重要的一点,看书很重要,但配套的训练同样不容忽视,两者结合起来同时进行的才能快速提升编程水平,最终达成学习的目标——在实际项目中运用。
而学习 C 语言恰恰就是一个坚持看、敲、写的过程,缺一不可:
1)多看书学习
不能仅仅记住那些名词,那些规则,程序设计语言的重点在于应用。在应用中去总结和体会,用自己的语言去定义那些名词术语,用自己的语言去概括那些语法的规则和意义。对,就是不要“你觉的”,而是要通过学习领会“你觉的”,最终到达“自己觉得”!
2)操作和练习
C语言是一门工具,我们要在不断的操作和练习中熟悉工具的性能、使用方法和使用技巧,仅仅停留在纸上谈兵的程度,是远远不够的。
3)拓展知识面
C语言虽然是一门高级程序设计语言,但是它还是涉及很多计算机系统底层方面的知识,最典型的例如指针,多了解一些计算机原理方面的知识,拓展自己的知识面。
4)多做练习
不能仅仅停留在编码上,程序设计的重点在于设计。做习题时拿起纸和笔,整理自己的思路,记录自己分析问题和解决问题的想法。过段时间再来看看自己曾经的想法,评价一下,也就是说,学习C语言,要反复多次地进入学习。
5)反复学习
学习C语言,要反复多次地进入学习。每过段时间再来整理自己的所学和曾经的想法,
第一次,重点在于了解基本语法和知识点
第二次,在练习中体会基本语法和知识点
第三次,系统观的练习和设计思想的锻炼
逐渐在学习中培养自己的逻辑思维能力。学习自顶而下的分析方法,学习严谨而全面的流程控制。学习其他优秀工程师的思维技巧,将会是我们受益终生。
例如:字符串与格式化输入/输出,我们应该这样去进行练习、实操,从而巩固我们从书本上学到的理论知识,只有这样才能掌握它的核心!
1)假设一个程序的开头是这样的。
#define BOOK "War and Peace"
int main(void){
float coast =12.99;
float percent = 80.0;
请构造一个使用 BOOK、coast 和 percent 的 printf()语句,打印以下内容。
This copy of "War and Peace" sells for $12.99.
That is 80% of list.
分析与解答:
程序要求打印带双引号的字符串,因此在 printf()函数中需要加入转义序列\"。此外,80% 需要使用浮点型数据 percent,打印时需要添加修饰符,百分号的打印需要使用转换说明符号%% 。具体代码如下。
*/
#include
#define BOOK "War and Peace"
int main(void){
float coast =12.99;
}
float percent = 80.0;
printf("This copy of \"%s\" sells for $%.2f.\n",BOOK,coast);
printf("That is %.0f%% of list.\n",percent);
return 0;
2)打印下列各项内容要分别使用什么转换说明符?
a.一个字段宽度与位数相同的十进制整数;
b.一个形如 8A、字段宽度为 4 的十六进制整数;
c.一个形如 232.346、字段宽度为 10 的浮点数;
d.一个形如 2.33e+002、字段宽度为 12 的浮点数;
e.一个字段宽度为 30、左对齐的字符串。
分析与解答:
a.整型数据使用转换说明符%d,字段宽度与位数相同不需要使用特殊修饰符,因此转 换说明符为%d;
b.十六进制数据的转换说明符(输出大写字符应当使用大写 X)是%X,因为宽度是 4, 使用 4 作为修饰符,因此转换说明符为%4X;
c.浮点型数据转换说明符是%f,10 位,小数点后有 3 位修饰符,应表示为 10.3,因此 转换说明符为%10.3f;
d.显示指数使用转换说明符%e,字段宽度为 12,小数点后有 2 位的修饰符,应表示为 12.2,因此转换说明符为%12.2e;
e.字符串使用转换说明符%s,长度为 30,左对齐,使用−30 修饰符,因此转换说明符 为%−30s;
3)打印下面的内容要分别使用什么转换说明符?
a.字段宽度为 15 的 unsigned long 类型整数;
b.一个形如 0x8a、字段宽度为 4 的十六进制整数;
c.一个形如 2.33E+02、字段宽度为 12、左对齐的浮点数;
d.一个形如+232.346、字段宽度为 10 的浮点数;
e.一个字段宽度为 8 的字符串的前 8 个字符。
分析与解答:
a.unsigned 类型整数转换说明符是%u,对于 long 类型字段宽度,应添加 l 修饰符,字 段宽度为 15,就需要添加 15 修饰符,因此转换说明符为%15lu。
b.十六进制整型数据的转换说明符是%x(输出小写字母使用小写 x),输出 0X 使用# 修饰符;长度为 4 就使用 4 作为修饰符,因此转换说明符为%#4x;
c.输出科学计数法使用转换说明符%E(输出大写字母使用大写 E),左对齐使用"−"号修 饰符,字符宽度为 12,显示两位小数使用 12.2 修饰符,因此转换说明符为%−12.2E;
d.浮点数转换说明符是%f,显示正号使用"+"修饰符,字符宽度是 10,有 3 位小数,使 用 10.3 修饰符,因此转换说明符为%+10.3f;
e.字符串转换说明符是%s,字段宽度为 8,显示前 8 个字符使用 8.8 修饰符,因此转换 说明符为%8.8s。
4)打印下面各项内容要分别使用什么样的转换说明符?
a.一个字段宽度为 6、最少有 4 位数字的十进制数;
b.一个在参数列表中给定字段宽度的八进制整数;c.一个字段宽度为 2 的字符;
d.一个形如+3.13、字段宽度等于数字中字符数的浮点数;
e.一个字段宽度为 7、左对齐的字符串中的前 5 个字符。
分析与解答:
a.十进制整数使用转换说明符%d,字段宽度为 6,最少有 4 位数字,使用 6.4 修饰符, 因此转换说明符为%6.4d;
b.八进制数据使用转换说明符%o,字段宽度由参数列表指定,使用修饰符" * ",因此转 换说明符为%*o;
c.字符数据使用转换说明符%c,字段宽度为 2,使用修饰符 2,因此转换说明符为%2c;
d.浮点型数据使用转换说明符%f,显示正号,字段宽度为数字中字符数,即不指定字 段宽度,小数点后显示两位,使用修饰符+0.2,因此转换说明符为%+0.2f;
e.字符串使用转换说明符%s,字段宽度为 7,显示前 5 个字符,左对齐,使用修饰符−7.5,因此转换说明符为%−7.5s。
▲ 摘选自《C Primer Plus(第6版)中文版习题解答》第四章课后训练题
— 02 —
C语言指路灯
C语言从早期的非正式的K&R标准,发展到1990 ISO/ANSI标准,进而发展到2011 ISO/EC标准。本书也随着逐渐成熟,发展到现在的第6版。在所有这些版本中,我的目标足致力于编写一本指导性强、 条理清晰而且有用的C语言教程。
——《C Primer Plus》系列书籍作者 Stephen Prata
很多人会问:C语言这么好,我也想学好它,但是我该怎么开始第一步呢?
万事开头难,跟着教材开始学就好了。
C语言书这么多,我该买哪一本呢?
其实,从C语言面世以来,相关书籍数不胜数,但唯独有一本图书,跟随C语言一起成长,畅销38年,迭代6版,每个版本豆瓣评分9分以上,累计销售量已超过100万册,被C语言程序员奉为圭臬!
它就是《C Primer Plus》系列图书,2016年人民邮电出版社发布《C Primer Plus 6》中文版,在豆瓣评分上获得9.3分的高分好评,在之前版本的基础之上进行了全新升级。从1984年至今,作者初心不变——致力于编写一本指导性强、条理清晰而且有用的C语言教程。
C Primer Plus 第6版 中文版
内容介绍:
几乎所有C 语言程序员都会将《C Primer Plus》作为自己的入门书籍,对于 C 语言初学者来说,它就像引路人一样意义非凡。
所以,书中大量完整的、可运行的程序及详细的注释有助于理解代码和概念。
与市面上其他的教程书籍相比,《C Primer Plus(第 6 版)中文版》最大的特点就是读起来不会有枯涩烦躁之感。
因为斯蒂芬·普拉塔十分在意读者在阅读过程中的阅读体验,所以书中新出现的每一个术语,符号,都给出贴近读者目前知识储备的和理解能力的解释。
而且,这本书在编排上也十分与众不同,在每个知识点后面都会附带一个“程序清单”,也就是程序实例,这是理解编程知识点的绝好方法,供初学者自己手动实操,提升编程水平。
C Primer Plus 第6版 中文版习题解答
内容介绍:
在千呼万唤中,《C Primer Plus(第6版)中文版习题解答》面世了,为了每个程序员都能将所学的知识落实到实际项目,它是作者根据《C Primer Plus(第 6 版)中文版》而撰写的,由北京师范大学名师详细剖析所有题目,全面提升 C 编程能力的优选编程练习册,也是这个《C Primer Plus》系列经典畅销图书不可缺少的学习伴侣。
《C Primer Plus(第6版)中文版习题解答》针对于提高 C 语言的编程技能、理解计算机原理的枯涩知识,和《C Primer Plus》系列一样通俗易懂,作者旨在让读者读得舒服、读得通透。
在每章内容做了简单总结和梳理的基础上,根据学习的不同阶段,对所有复习题和编程练习做了详细的解答,至始至终都有详尽完整的答案代码示例。
◆ 在介绍C语言细节的同时,讲解编程概念;
◆ 每次尽量用短小简单的示例演示一两个概念,学以致用是最有效的学习方式之一;
◆ 当概念用文字较难解释时,则用图表演示以帮助读者理解;
◆ C语言的主要特性总结在方框中,便于查找和复习;
◆ 每章末尾设有复习题和编程练习,帮助读者测试和加深对C语言的理解。
适宜人群:作为《C Primer Plus(第6版)中文版》的配套参考书,本书特别适合需要系统学习C语言的初学者阅读,也适合打算巩固C语言知识或者希望进一步提高编程技术的程序员阅读。
— 03 —
结语
我们要时刻记住:C 语言是一门十分严谨的语言,知识体系庞大,需要掌握的知识非常多,单单看书是无法真正掌握这门语言的核心,只有多写多练习,才能透彻地了解 C 语言、懂得 C 语言,将它熟练运用。