计算机程序设计基础课程是高等学校计算机基础课程中的核心课程,具有大学基础课的性质。本书以C语言程序设计为基础,注重讲解程序设计与软件开发的概念、方法和思路,培养读者的基本编程能力、逻辑思维与抽象思维能力。 本书内容包括:程序设计的基本概念、C语言的基本语法元素、程序控制结构、函数、算法、结构化与模块化程序设计的基本概念、程序组织与库的设计、数组、字符串、结构体与指针等复合数据类型、文件与数据存储、程序抽象等。希望通过强调那些在程序设计与软件开发过程中起重要作用的思想与技术,使读者体会并初步掌握较大型或实用程序的编写与设计能力。 本书行文严谨流畅,语言风趣幽默,示例丰富生动,习题难度适中。本书可供高等院校计算机及理工类各专业、成人教育院校作为程序设计课程的教材,也可供计算机应用开发人员及相关人员自学。
本书写作目标可用8个字概括:开卷有益,开卷有趣。
一、本书旨趣
六年来的教学经验表明,学生在学习程序设计类课程时最难的地方不是掌握某种程序设计语言的语法规范,而是掌握程序设计的基本方法。
程序设计语言的语法规范是死的,并且与任何一种自然语言相比,程序设计语言的语法规范更为简单。因此,对于任何学生而言,只要花费一定量的时间(并且这个时间并不长),通过记忆并辅以上机验证,完全可以掌握甚至精通其语法规范。
然而,问题在于,在学生已经预习课程并认真听讲,自认为已掌握了程序设计方法后,却发现在解决实际问题时经常是毫无头绪,一筹莫展。这种心理落差与由此造成的心理恐慌对学生的学习热情来说是致命的——这事实上是课程教学无法获得应有成果的主要原因。因此,本书力图在学习语法规范与培养实际动手能力之间架设一座沟通的桥梁,以解决程序设计教学中理论与实践脱节的问题。
对于程序员而言,抽象贯穿程序设计与开发活动的始终,是应着重强调的最核心概念。事实上,如果让笔者仅使用一个词来表达本书旨趣,那只能是抽象。程序员对抽象的理解与把握左右着程序的质量与效率。所以,抽象正是本书所要架设的桥梁。
坦率地说,抽象思维能力的培养不是一本教材、一门课程所能够涵盖和阐释清楚的。但作为一种有益的尝试,本书希望能够通过一种有趣的、面目可亲的方式向读者说明抽象在程序设计中所能够和应该起到的作用,以及抽象思维能力对读者未来学习、工作的重要意义。
Vinoski有云:“Finding the right balance between abstraction and pragmatism requires Knowledge,experience,and above all,thought.”翻译成汉语就是“于抽象与具象间寻觅正道需要知识、经验,更需要思想。”希望读者能够记住这句话。
二、篇章结构
本书的篇章结构与传统C语言教材不同。本书如此编排知识点的根本出发点在于,笔者希望能够以培养读者解决实际问题能力和抽象思维能力为主线,而不是以语言语法知识点为主线。这么做的好处是,读者不会在一开始就接触到过多的C语言语法规范的细节,避免在实际编程时受到“学习知识过多”所造成的干扰,从而能够将注意力集中到解决实际问题中去。
本书共分10章,具体组织方式如下。
第0章简单回顾C语言的历史,介绍C语言与程序设计的一些基本概念,然后通过两个小例子说明了C语言编程的基本流程。
第1章与第2章介绍C语言的基础知识,这些知识包括数据与数据类型、表达式与语句、运算、基本输入输出功能、枚举类型与布尔类型等用户自定义类型、典型的分支与循环结构等,它们是程序员构建C程序宏伟大厦的一砖一瓦。此外,第1章还专辟一节讨论程序设计风格问题,良好的程序设计风格是编写优秀代码的要件之一。作为后续章节的先导,第2.7节讨论问题求解与结构化程序设计的基本方法,以使读者大概了解结构化程序设计的思路。
第3章与第4章着重研究函数与算法,包括函数声明与调用、函数定义、函数调用规范、程序的结构化与模块化、程序测试与代码优化、算法的概念与特征、算法的描述方法、算法设计与实现、递归算法、容错、算法复杂度等内容。这些知识同样是基本的。
第5章讨论程序组织与软件工程,主要研究库与接口的概念、作用域与生存期、宏与条件编译等知识。通过两个具体的实例——如何设计随机数库以及如何使用随机数库设计一个猜测价格的游戏程序说明程序开发的基本流程以及在进行程序开发时要着力关注的问题。
第6章研究C语言提供的复合数据类型,主要涵盖字符与字符串、数组、结构体三方面知识。这些知识其实并不复杂,在本书力图淡化细节的主旨下尤其如此。此外,本章还讨论简单数据集上的简单查找与排序操作。
第7章研究指针。C语言的指针非常灵活,事实上它与其他语法要件(例如函数、数组、字符串、结构体等)有着千丝万缕的联系。专列一章讨论指针是非常有必要的,它起到了承前启后的作用。
乔林,博士,清华大学计算机系副教授,美国加州大学圣迭戈分校访问学者。2001年毕业于清华大学计算机科学与技术系,获工学博士学位。主要研究兴趣有多核处理器系统结构、片上网络、物联网、MOOC课程与知识挖掘等,主持或参与国家自然科学基金、核高基、973、863项目或子项目多项。主讲:计算机程序设计基础、基于Linux的C++、操作系统等课程,出版教材多部,开设清华大学MOOC课程“基于Linux的C++”。
第0章 C语言概述
0.1 C语言简介
0.1.1 C语言简史
0.1.2 C语言特点
0.2 程序设计的基本概念
0.2.1 程序
0.2.2 程序设计与程序设计语言
0.2.3 算法
0.2.4 数据与数据结构
0.3 简单C程序介绍
0.3.1 c程序实例
0.3.2 程序设计思维
0.3.3 C程序结构特点
0.4 程序设计的基本流程
0.4.1 源文件和头文件的编辑
0.4.2 源文件和头文件的编译
0.4.3 目标文件的连接
0.4.4 测试运行
本章小结
习题0
第l章 C语言基本语法元素
1.1 数据类型
1.1.1 整数类型
1.1.2 浮点数类型
1.1.3 字符串类型
1.2 量与表达式
1.2.1 表达式
1.2.2 变量
1.2.3 文字
1.2.4 常量
1.2.5 赋值与初始化
1.2.6 操作符与操作数
1.2.7 混合运算与类型转换
1.3 语句
1.3.1 简单语句
1.3.2 复合语句
1.3.3 空语句
1.4 基本输入输出函数
1.4.1 格式化输出函数
1.4.2 格式化输入函数
1.5 程序设计风格
1.5.1 注释
1.5.2 命名规范
1.5.3 宏与常量
1.5.4 赋值语句的简写形式
1.5.5 源程序排版
本章小结
习题1
第2章 程序流程控制
2.1 结构化程序设计基础
2.1.1 基本控制结构
2.1.2 顺序结构示例
2.2 布尔数据
2.2.1 枚举类型
第3章 函数
第4章 算法
第5章 程序组织与软件工程
第6章 复合数据类型
第7章 指针
第8章 文件与数据存储
第9章 程序抽象