绕开C语言4个大坑,这个学习顺序要牢记,学习效率事半功倍!

虽然 C 语言是众多初学者进入编程世界的首选语言,但真正通过C 语言入行的人并不多,甚至不到“望 C 止步”的一半!

中途而退的人都说难!难!难!难上加难!看了很多专业书籍、记录重点知识点,最后却无法真正运用到实际项目,时不时bug,断连......

而 C 程序员则是相反的说法,认为“这是一门勤能补拙的语言”,他们在开始学习的时候,除了看书,还要花时间去同步练习,就和学数学一样:先看理论,再去练习实践,从而掌握。

C 语言不单是编程世界的敲门砖,还是其他语言的敲门砖,当你学好C语言之后,接下来无论想进军Java、C++、C#、还是Python、Go、PHP、JavaScript 等语言,都会轻松不少。

 

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版)中文版习题解答》第四章课后训练题

对于热爱编程的人来说,有一群一起学习一起解答的小伙伴很重要!

小编有一个C/C++编程学习交流俱乐部,【点击进入】!

还有编程学习文件(源码,零基础教程,项目实战教学视频),欢迎初学者和正在进阶中的小伙伴们!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章