{{indexmenu_n>2}}====== C语言从入门到进阶 ====== 酷码STEM实验室设计的编程成长总路线图是[[program:scratch:scratch|Scratch]] → [[program:python:python|Python]] → [[program:c|C/C++]]。[//2021更新//]美国西点军校 Suzanne J. Mathews 等编写的最新教科书 [[http://culmart.com/play/steam/CC2020.html#cc|Dive into Systems]] 致力于面向具有计算机科学入门知识并熟悉 Python 的学生介绍计算机系统的底层知识,包括计算机系统、计算机组织、操作系统和并行计算,以及 C 语言和汇编语言。此教材也证实了以上路线图的可行性。 如果要从C/C++直接入门编程,难度会大一些,类似形体训练(少儿舞蹈课)或者弹钢琴,通常是强迫课程+等待学生培养兴趣+悟性发现的过程;否则,比较容易出现“从入门到放弃”的结果。 编程是孩子们应对未来挑战的基本能力之一。编程教学一定要有趣、好玩、能与物理实体相关联,这样才能吸引学生主动参与。Arduino使用C/C++编写程序,因此优选结合此开源硬件学习C/C++。 以下以C++为例说明。如果其他老师告诉你:C语言的基本概念和设计方法相对比较容易理解,初学者应该从它入手,没有问题:开发环境相同,学习相应的关键语法即可。 ===== 开发环境 ===== ==== Windows 下如何选择 IDE? ==== === Dev-C++ === {{:50.program:c:dev.png?200|}} NOI、NOIP指定的C/C++集成开发环境是Dev-C++和Code::Blocks。 NOI 是National Olympiad in Informatics的缩写,译为“全国青少年信息学奥林匹克竞赛”;NOIP 是National Olympiad in informatics in Provinces的缩写,译为“全国青少年信息学奥林匹克联赛”。NOI、NOIP 都是奥林匹克竞赛的一种,参加者多为高中生,获奖者将被保送到名牌大学或者得到高考加分资格。 Dev-C++是一套用于开发C/C++的自由的集成开发环境,并以GPL作为散布许可。使用MinGW及GDB作为编译系统与调试系统。Dev-C++的IDE是利用Delphi开发的。其实,Dev-C++的更新开发和维护已经停滞(2006年),移植到Linux的项目也被暂停。 Code::Blocks是一个免费、开源、跨平台的整合式开发环境,主要针对开发C/C++程式而设计。自2021年9月1日启用的比赛用标准环境[[https://www.noi.cn/gynoi/jsgz/2021-07-16/732450.shtml|NOI Linux 2.0]]版(基于Ubuntu 20.04.1)中,Code::Blocks是主要的C/C++集成开发环境。 === Code::Blocks === {{:50.program:c:cb.png?200|}} Code::Blocks 界面比 Dev-C++ 稍复杂,也是一款开源、跨平台、免费的 C/C++ IDE。 === Visual Studio === {{:50.program:c:vside.png?200|}} Windows 下的标准 IDE,实际开发中常用,但对初学者不友好。 ==== Linux 下如何选择 IDE? ==== Linux 下可以不使用 IDE,只使用 GCC 编译器和一个文本编辑器(例如 Gedit)即可,这样对初学者理解C语言程序的生成过程非常有帮助。 如果希望使用 IDE,那么可以选择 CodeLite、Code::Blocks、Anjuta、Eclipse、NetBeans 等。 Linux 是超级计算系统上的主要操作系统,GNU 编译器可以说是当今最常用的 C 编译器,因此,很多的例程推荐使用 GNU C 编译器编译并在 Linux 操作系统上运行。 ==== Mac OS 下如何选择 IDE? ==== 推荐使用 Apple 官方开发的 Xcode,Visual Studio 也推出了 Mac 版本。 ===== C++程序的基本结构 ===== {{ :program:c:vscode-cordova-main.png?nolink |}} Visual Studio Code(简称VS Code)是一个由微软开发,同时支持Windows 、 Linux和macOS等操作系统且开放源代码的代码编辑器,它支持测试,并内置了Git 版本控制功能,同时也具有开发环境功能,例如代码补全(类似于 IntelliSense)、代码片段和代码重构等,该编辑器支持用户个性化配置,例如改变主题颜色、键盘快捷方式等各种属性和参数,同时还在编辑器中内置了扩展程序管理的功能。 ===== C++程序的基本结构 ===== int main() { return 0; } ===== C++程序编译与运行 ===== 通过编译器将源程序.cpp文件编译成计算机可以识别的二进制格式的.exe目标文件。 执行这个.exe文件就是程序的运行。 ===== 图书推荐 ===== 虽然我们前面介绍过The C Programming Language(《C程序设计语言》)这本“白皮书”,但强烈不推荐用其入门。 ==== 入门经典书籍 ==== 《C语言小白变怪兽》 既适合对计算机一窍不通的小白,也适合有编程基础的读者,还可以用来进阶。 《C语言小白变怪兽》是一套网络教程,发布在C语言中文网,由站长亲自编写,这套教程最大的特点是通俗易懂,深入浅出,既适合小白入门,也适合后期进阶。 书籍链接:http://c.biancheng.net/cpp/u/jiaocheng/ {{:50.program:c:24171639-1_w_5.jpg?400|}} 《啊哈C语言》 适合对计算机一窍不通的纯小白,有编程基础的读者请忽略。 这本书语言幽默,生动形象,通俗易懂,给人耳目一新的感觉,但是这本书非常浅显,并不深入,所以适合纯小白入门,找到门以后也就扔了。 这本书着重于语言艺术,针对纯小白下足了功夫,小学生坐在马桶上都能学会编程。说实话,我非常欣赏作者的创意和用心,国内像这样写书的少之又少,入门的书就应该是这个样子。 {{:50.program:c:23818127-1_w_2.jpg?400|}} 《明解C语言》 适合对计算机一窍不通的纯小白,有编程基础的读者请忽略。 日本人的作品,最大的特点是插图很多,生动有趣,让人一目了然。 其实真正的《明解C语言》一共有三部,分别是《明解C语言·入门篇》《明解C语言·中级篇》《明解C语言·实践篇》。 ==== 进阶经典书籍 ==== {{:50.program:c:23958142-1_w_12.jpg?400|}} 《C Primer Plus》 适合有编程基础的读者,对计算机一窍不通的纯小白请忽略。 畅销 30 余年的C语言入门经典书籍,至今无人能撼动它的地位,它是最符合C语言标准的书籍,作为一名C语言程序员,不收藏一本都觉得自己很水。 信息量大,涉及的知识面广,书也比较厚,得有耐心才行。 {{:50.program:s1106934.jpg?400|}} 《C程序设计语言,The C Programming Language》 C语言创始人丹尼斯·里奇(Dennis MacAlistair Ritchie)的著作,和《C Primer Plus》并驾齐驱,很难分出伯仲,这两本书都是一样的优秀,都是C语言程序员必须收藏的。 {{:50.program:c:20105286-1_w_9.jpg?400|}} 《C专家编程》 这貌似是一本吐槽C语言的书,基本上介绍了大多数C语言的坑,有不少精髓,在C语言界久负盛名,想进阶的一定要看。 {{:50.program:c:20105315-1_w_6.jpg?400|}} 《C陷阱与缺陷》 c语言的“四书五经”之首。和《C专家编程》类似,也是给C语言挑刺的,阐述了很多容易让人误解的语法细节,重在帮助C程序员绕过编程过程中的陷阱和障碍。 ==== 高阶经典书籍 ==== {{:50.program:c:20569834-1_w.jpg?400|}} 《程序员的自我修养 -- 链接、装载与库》 这真是一本深入骨髓的书,让你彻底明白程序的编译、链接、装载和运行的全过程,你会从此上天,拉开和别人的差距,看任何问题都有了深度和高度。