前言
C语言是广受欢迎的一种成熟的编程语言,它在众多的计算机编程语言中占有独特的地位。作为最早的高级语言之一,以及系统级开发与高性能计算的基石,C语言历经岁月洗礼,在机电控制等核心领域始终占据不可替代的地位, 被广泛应用于各种编程开发工作中。
C语言是高级语言中当之无愧的性能王者。凭借其卓越的执行效率与极高的灵活性,C语言的应用场景极为广阔——下至操作系统内核,上至高性能AI算子开发,它始终是关键项目的首选利器。
随着人工智能技术的爆发,是否还需要学习计算机编程,是否还需要修读C语言,成为教育界热议的话题。一种观点认为,“多数人未来无须直接使用C语言,甚至不需要编程,学习成本过高”;另一种声音则指出,“若完全依赖AI生成代码,人类将失去对底层逻辑的掌控力”。
1. 学习计算机编程的目的
苹果公司创始人史蒂夫·乔布斯曾说过,“所有人都应该学计算机编程,因为它教你如何思考。”作者颇为赞同这一观点。在AI时代,不仅计算机专业的学生应该学编程,所有希望发挥自己聪明才智的人都应该学编程。编程是将宏观构想拆解为细小、无歧义指令的过程,这种思维拆解训练能极大地提升我们将抽象想法付诸实践的能力。无论职业方向如何,编程赋予我们的严谨的逻辑思维都是一种通用的底层能力,对各类工作皆有深远助益。在AI时代,编程思维的权重不降反升。虽然自然语言接口降低了交互门槛,但程序逻辑仍是AI的基石。要深层理解AI机理并精准应用,逻辑构建能力依然是核心。面对AI生成内容真伪难辨的挑战,逻辑思维已成为人机协作的底层协议,是跨越智能鸿沟的唯一通路。
2. C语言是最独特的高级语言
作为最早的高级语言之一,C语言具有许多独到之处。C语言与UNIX几乎同时问世并相互成就。通过C语言重写,UNIX突破了硬件依赖,开创了跨平台操作系统的先河。而C语言也成为UNIX系统中的首选高级语言。此后,众多操作系统与高性能软件皆以C语言为基石构建,或全盘采用,或核心调用。
C语言不仅是系统开发的基石,更是一门全能的通用语言,广泛覆盖从操作系统到各类应用软件的开发。在高性能计算的关键领域,其优势更是无可替代。作为众多技术的“底层内核”,绝大多数AI核心算法,以及其他语言的编译器与解释器均由C语言构建。以近年大火的Python语言为例,其解释器核心便建立在C语言之上。因此,掌握C语言无异于打通了编程的“任督二脉”,再涉猎其他语言时,自然会更加得心应手。
3. 算法与数据结构
程序设计的核心,在于算法与数据结构的深度融合。从基础运算到前沿AI,计算机的一切逻辑最终都可还原为0与1的数学运算。而将现实问题抽象为数学模型并求解的方法,便是程序设计的灵魂——算法。解决同一问题往往存在多条路径,不同算法在计算量上的差异可能是天壤之别,这便是“算法复杂性”。低复杂度的算法意味着更高的执行效率,但这往往违背人类的直觉经验,因此需要系统性的思维训练。与此同时,数据结构研究的是如何高效组织数据,以配合算法运行。面对海量信息,合理的数据结构是算法准确、高效执行的基石。二者互为表里,相得益彰,共同构成了程序设计的双翼。如果以音乐来比喻,算法与数据结构就是音乐的旋律与节拍,而编程语言则是乐器,编程技能就如同演奏乐器的技巧。要演奏优美的音乐,旋律、节拍、乐器与演奏技巧缺一不可。程序设计亦是如此,算法、数据结构、语言与编程技巧都不可或缺,四者相辅相成,方能成就优秀的软件。
4. 本书的主旨
本书以培养编程实践能力为核心主线,由浅入深地阐述如何运用C语言解决问题,将常见算法和语法知识有机融合,通过精心编排的渐进式案例,引导读者逐步掌握编程技巧。在此基础上,本书构建了全新的教学体系,旨在帮助读者夯实C语言基础,学会用C语言实现常用算法,并能规划、设计合适的数据结构,以解决基础问题。
算法与数据结构博大精深,其重大突破甚至能问鼎图灵奖。本书并不是专门的算法与数据结构教材,有兴趣的读者可以进一步深入学习专门的课程。
5. 教学的组织
学习计算机编程,语法是入门的基石。自然语言偶有语法瑕疵尚能达意,而程序设计容不得半点马虎,语法错误会导致程序编译失败、无法执行。计算机编程语言的语法是硬性的规则,没有语法错误是编程最基本的要求。但是学习程序设计的精髓绝非死记硬背语法,充分利用语法提供的功能构建整体程序才是核心。因此本书没有采用语法参考书的枯燥构架,而是采用“案例驱动”模式:在每章中,首先举几个简单的例子,引入新的问题;接着介绍怎样利用C语言解决这些问题;然后再循序渐进地介绍较复杂的算法和程序。使学生在富有创意、引人入胜的编程过程中学会算法,掌握语法,领悟程序设计的思想和方法,把枯燥无味的语法规则变成生动活泼的编程应用。多年的实践表明,这种做法是成功的。
6. 给教师的建议
建议教师在教学时,确立以程序为中心的导向,着重阐述解题思路与实现路径,避免孤立地讲解语法规则。教材中叙述的语法规则,可以在介绍编写程序的过程中加以说明,或在简单介绍后引导学生在上机实践中自主掌握。
学好程序设计,问题不在于是否掌握语言工具,而在于如何学习和掌握语言工具的使用方法——是死记硬背枯燥的条文,还是在实际案例中通过应用来习得。初学阶段应重视主干,淡化细节,有些细节不必一一讲授,随着编程能力的提升,引导学生根据实际需求自查自学,逐步完善知识体系。程度较高的学校和学生,可以学完本书的全部内容,再完成一个大作业。如果学时不够,书中有的章节可让学生课后自学或作为选学内容。
7. 要从实际出发,准确定位
不同的人,学习C语言程序设计的目的可能不同。既有计算机专业学生将其视为核心专业课,也有非计算机专业学生将其作为辅修技能;有人为了从事开发而深耕,有人为了洞察计算机原理而涉猎;目标从精通、粗通到一般了解,各有侧重。对于零基础的初学者,仅凭几十学时的课程虽难以达到精通境界,但构建起算法、数据结构与编程语言的认知框架,掌握基本的编程技能,并利用C语言解决具有实际意义的问题,是完全可行的。而对于具备其他语言基础的读者,则可通过本书较快地掌握C语言的特性,进而参与较复杂的编程项目。
本书在《C程序设计》(第五版)的基础上进行修订, 新增了对C11和C23标准的介绍,并在相关章节中对标准的演进予以说明。读者应当注意,编译器对标准的落实往往滞后于标准发布,并非标准越新,通用性越强。本书成书之际,GCC已启动对C23标准的支持,多数编译器(如Visual Studio 2022)已支持C11标准,而传统遗留系统的底层核心多仅支持C99标准。鉴于此,C11标准目前最适宜作为跨平台开发的基准;若需兼容遗留系统,则应考虑采用C99标准;对于完全不需要考虑跨平台性的应用,读者亦可酌情使用特定编译器提供的非标准扩展功能。
本书采用作者提出的“提出问题—解决问题—归纳分析”的新的教学“三部曲”,确立了“先具体后抽象,先实际后理论,先个别后一般”的认知逻辑,突破了传统的“先抽象后具体,先理论后实际,先一般后个别”的局限。教学实践证实,该路径高度契合读者的认知规律,显著提升了知识的可理解性与接受度。
本书在讲解每个例题时,均严格遵循“给出问题—解题思路—编写程序—运行结果—程序分析—程序改进”的六步教学法。书中穿插“说明”“注意”“提醒”“思考”等标注,并辅以不同字体醒目提示,引导读者深入思考。这种方法顺应由浅入深的认知规律,让抽象的算法变得“看得见、摸得着”。读者在验证算法正确性的同时,能切实感受到编程的乐趣,从而极大地降低理解门槛。
每章的末尾有本章小结,归纳本章的要点,提纲挈领,画龙点睛,以加深印象,提升学习的条理性与系统性。
本书可作为高等学校各专业的教材,同时,本书高度重视自学适应性,具备高中及以上文化程度的读者,即使没有教师讲解,也能基本掌握本书的核心内容。这样就有可能做到: 教师可精简讲授,引导学生自学与上机实践。
曾经有学者提出C语言难以掌握,但是自从本书1991年问世之后,越来越多的读者与教育工作者评价其“降低了C语言的学习门槛,C语言变得不难学了”。本书作者结合多年的教学实践经验,提供一些建议供读者参考。
(1) 切忌死记硬背语法细节。尽管编程语言的语法规则严谨,对语法错误零容忍,但编程的核心任务在于分解问题、构建算法,并以语法为载体进行逻辑表述。因此,学习C语言应聚焦于理解语法及标准库提供的功能,构建解决问题的程序。建议从简单程序入手,理解C语法构建程序的能力和可能性,由浅入深,逐步掌握细节。即便是资深程序员在开发大型项目时,也常查阅参考书或手册,因此无须过度拘泥于语法的记忆。
(2) C语言功能强大,灵活性高。但也正因如此,若运用不当,极易产生意想不到的结果。因此,学习C语言切忌好高骛远,务必脚踏实地。建议读者认真思考并运行每章例题,在后续章节的学习过程中,读者可尝试在阅读例题后,先试着自己解题并编写代码,再与书中示例比对,这样的学习方法往往能有效提升对编程要点的理解深度。
(3) 程序设计是一项实践性极强的创造性技能,掌握概念与语法仅是构建程序的基石。仅凭阅读本书,尚不足以熟练掌握C语言编程。希望读者务必重视编程、调试与运行的完整实践过程,认真完成书中的练习题。衡量学习成效的标准,不在于“知不知道”,而在于“会不会干”。因此,应注重提高程序编写与调试的实际能力。
本书配备丰富的立体化教学资源,包括辅助教材、AI智能体、AI助教、微课视频、教学课件、教学大纲、电子教案、程序源码及在线题库等。为方便读者实践,同步配置了支持C23标准的云端C/C++运行环境,无需本地安装,打开浏览器即可编码。
考虑到部分高校C程序设计课程学时有限,本教材同步推出姊妹篇《C程序设计教程》(第5版)(ISBN:9787302715528)。该教程以本书为基础,适当精简内容,突出重点,且与本书共用全部教学资源,方便师生根据实际情况灵活选用。资源下载提示
教学课件、教学大纲、电子教案:登录清华大学出版社官网,搜索书名即可下载。
AI智能体、AI助教:扫描本书目录页中相应的二维码使用。
在线自测题:扫描封底的“作业系统”二维码,再扫描书中每章末的“自测题”二维码,即可在线做题并查看答案。
微课视频、程序源码、云端运行环境(免安装):扫描封底的“文泉云盘”防盗码,再扫描本书目录页中相应的二维码即可获得学习权限。
本书的修订工作得到编写团队部分同仁的鼎力襄助。尤需致谢:南京大学金莹教授与西北工业大学姜学锋教授,参与修订研讨,并精心研制了配套教学资源;谭亦峰高级工程师,不仅参与部分章节编写,更专为本书搭建了配套的云端C++运行环境。诸位专家的高情厚谊与辛勤付出,谨此敬致谢忱。
在本书出版之际,作者衷心感谢全国高等院校计算机基础教育研究会和全国各高校教师多年来的始终不渝的关心与鼎力支持,感谢广大读者给予我的理解与厚爱,感谢清华大学出版社四十余载的紧密合作与坚实支持。没有这一切,我难以取得今天的成绩。我永远铭记并感恩所有相识与不相识、曾给予我帮助与支持的朋友们。
谭浩强 谨识
2026年1月于清华园
