前言                                                   近年来,以云计算、大数据、深度学习为代表的计算机技术快速发展,“互联网+”和“人工智能+”成为传统工业改革的重要方向。强大的社会需求对高等教育人才的计算机能力培养提出挑战。“程序设计基础”是计算机能力培养的核心课程,承担着计算思维与程序设计能力培养的重要责任。 计算思维的表达和程序设计均离不开程序设计语言,本书选择了C语言。1972年,为了编写UNIX操作系统,贝尔实验室丹尼斯·里奇(Dennis Ritchie)和肯·汤普森(Ken Thompson)设计了C语言,并于1978年发布C语言的第一个版本,史称“K&R”版本。伴随着小型机和微型机的快速发展,macOS、Windows、Linux等操作系统及其应用软件的开发大量使用了C语言。随着C++、Java、PHP、Python等多种程序语言的兴起,C语言在应用软件开发中的比例有所下降。但是, IEEE Spectrum发布的报告显示,最近几年内,C语言依然是最受欢迎的程序设计语言之一。随着多核计算和GPU计算的兴起,大多数的并行计算框架依然选择C语言作为软件开发的主要程序设计语言。因此,在程序设计基础课程中C语言是最佳选择。 本次修订在前三版的基础上对内容进行了较大幅度的调整。结合作者多年的教学和软件开发经验,本书重点介绍程序设计的基本方法和技术。本书按程序设计思想、程序设计语言、程序设计技术和软件工程管理4条主线组织相关内容。在程序设计思想方面,以结构化程序设计为主,引入了面向对象程序设计的思想和并行程序设计思想。在程序设计语言方面,以C11标准的C语言为主,兼顾C17和C2x标准,充分考虑初学者的学习规律,深入浅出地介绍基本语法和特性,内容通俗易懂。在程序设计技术方面,从代码封装与重用入手,介绍函数库和组件,丰富了并行计算技术的相关内容,除面向集群的MPI技术外,还包括面向多核的多线程技术和OpenMP技术。为培养个人软件开发能力,从程序设计的规范性入手介绍个体软件过程管理。此外,围绕计算机发展历史、典型产品和技术、未来技术展望,在每章的最后增加了案例,方便读者了解程序设计技术发展的脉络。 本书共分15章。第1章按照计算设备的发展过程,介绍图灵机及现代计算机的工作原理、问题求解与算法,以及主流的程序设计思想和程序设计语言。第2章从信息编码与存储着手,介绍基本标识符、数据类型、常量和变量。第3章从数值计算角度出发,介绍运算符、表达式、输入输出函数库、数值计算函数库以及基本程序设计语句。第4章重点介绍逻辑运算与选择结构及其实现。第5章介绍迭代逻辑与循环结构及其实现。第6章从集合数据处理角度介绍数组、字符串及其实现。第7章从分工和重用角度介绍函数以及基于多文件的源程序结构。第8章从地址角度介绍指针处理数据和指令的过程。第9章围绕复杂数据结构的表示,介绍结构体、共用体、链表。第10章介绍预编译处理、程序移植和泛化编程。第11章从数据永久存储角度介绍文件以及常用文件函数。第12章汇总常用问题的求解算法。第13章从代码和数据封装角度介绍面向对象程序设计思想。第14章从高性能计算角度介绍并行程序设计的基本思想以及MPI、OpenMP和多线程技术。第15章从培养合格程序设计人员角度介绍程序设计规范和代码重用技术,初步介绍个体软件过程管理。 本书由高克宁教授总负责,参与编著的有高克宁、李金双、赵长宽、柳秀梅和徐彬。其中,第2~5章由李金双编写,第1、7、12、14、15章由赵长宽编写,第6、9、11章由柳秀梅编写,第8、10、13章由徐彬编写。高克宁、赵长宽负责全书统稿。同时感谢为本书出版付出辛苦工作的各位同事。 本书中典型例题和综合应用的源代码可以通过扫描相应的二维码获取。本书相关的全部教学用PPT、习题答案及源程序代码,请联系清华大学出版社(https://www.tup.com.cn)。书中的部分程序要求采用支持C11标准的编译器,建议使用GCC 4.9.2或更新版本。 作者 2025年1月于东北大学