大学计算机程序设计基础(C语言)

大学计算机程序设计基础(C语言)"

作者:张长海、赵大鹏、陈娟
ISBN:9787302194361
定价:¥25
字数:千字
页数:
出版时间:2009.05.01
开本:
版次:1-1
装帧:
出版社:清华大学出版社
简介

本书以C 语言为载体,引进PAD图表示程序逻辑,阐述基本的程序设计方法。全书共分13章,主要内容包括算法、程序设计方法、函数、数据的组织、程序开发。每章都包含大量例题和习题。

本书最大的特点是以程序设计为主线、以案例为驱动。全书自始至终围绕“程序设计”来讲解,而不是“语言”的简单介绍,摒弃了目前各种程序设计书中流行的“解释程序设计语言”的做法。本书的目的是教会读者怎样编程序,提高读者的程序设计能力,彻底改变 “学了程序设计而不会编程序”的现状。

本书整体结构好、图文并茂,力求体现“结构化程序设计”思想,注重培养和训练读者良好的程序设计风格。

本书可以作为面向应用的高等院校中计算机类各个专业程序设计课程、一般高等院校理工科各专业公共计算机基础课程“高级语言程序设计”、“程序设计基础”、 "C程序设计”、 "C语言”等的教材和参考书;还可以供从事计算机工作的有关人员参考。

前言

随着计算机技术的不断发展,计算机应用的逐步普及,人们对于大学程序设计课的认识也在不断的更新。

最早在20世纪70年代及其以前,计算机应用十分狭窄,所谓“搞计算机”的人也很少。那时的计算机专业是在研究计算机本身,相应的第一个程序设计课称为“算法语言”。学习该课程的目的是学习程序设计语言本身(绝大部分学校都选讲ALGOL60) ,而对于怎么用这个语言不太关心。因为那时的教学目的是让学生研究计算机本身,是要制造计算机,是要研究透程序设计语言本身的语法和语义,并实现它。

进入21世纪之后,计算机已经渗透到各个领域,甚至已经普及到家庭,它像电视、冰箱一样,是家用电器之一。计算机专业的规模与30年前大不一样,据2005年统计,全国有“计算机科学与技术”专业的院校有741所,“计算机科学与技术”专业在校生人数超过45万;目前据保守估计,全国有“计算机科学与技术”专业的院校超过800所,“计算机科学与技术”专业在校生人数超过50万。若再加上软件工程、计算机网络、信息技术等计算机类的专业,全国的计算机专业数和在校生数还将比800所和50万大得多。

面对如此庞大的队伍,我们的毕业生不可能都去研究计算机本身,社会也不需要这么多人从事计算机研究。所以现在计算机专业的含义已经完全与30年前的计算机专业不同了,现在绝大部分计算机专业人员主要是做“计算机应用”,甚至是在“应用计算机”,而不是在研究计算机本身了。

由于计算机的普及,高等院校各专业都在使用计算机解决本领域的问题,各专业的学生都需要学习“程序设计”,显然这些非计算机专业人员学习的目的更是在“应用计算机”. 

在这种形式下,程序设计课怎么讲?摆在每个组织计算机教学的人面前,更摆在教授程序设计课的教师面前。目前学习程序设计的人大致可以分成三类: 

 从事计算机研究的人员,人数极少;

 计算机应用和应用计算机的人员,这类人员是绝大多数;

 程序编码人员,这类人员是高职高专培养的目标,社会需求极大,但学校培养的人数有限。

本书针对计算机应用人员和非计算机专业人员(应用计算机人员)。在面向应用的大背景下,程序设计课不应该再去讲程序设计语言本身了,而应该讲程序设计语言的应用。应该把授课重点从讲授语言的符号、语句等语言成分上,转移到讲授程序设计上。教学的目的是教会学生“怎么编程序”,而不是背几个语言符号、说明、语句等。应该把该课程的名字从“×××语言”改为“高级语言程序设计”、“程序设计基础”或“程序设计”。尤其一些非计算机专业开设该课程,更应该跳出讲授“语言”的误区。因为他们更是在“应用计算机”,是用计算机解决本专业领域的问题,更没有必要背那些死的语言符号、语法概念,更应该是学会怎么编程序。

本书秉承面向应用的主导思想,依托C语言讲述“程序设计”,重点在于程序设计。在这种思想指导下,对C语言本身采取“有所取、有所不取”的策略。对于那些常用的语言成分,直接与讲述程序设计方法有关的语言成分,穿插在程序设计过程中详细准确的介绍;对于那些与程序设计方法联系不太紧要,但是还使用的部分,放在最后简单介绍;而对于那些与讲述程序设计方法关系不太大,也不常用的部分则根本不涉及。

本书秉承“授之以渔”而非“授之以鱼”的理念组织教学内容。以案例为驱动,使用大量例题讲解程序设计思想和方法。案例不是为了解释语言概念,而是从构造算法出发,以训练学生的实际编程能力为目标。彻底改变过去那种单纯解释语法、语义等语言成分的做法。改变那种提出一个很小的问题,然后给定相应的不太大的程序,最后解释程序中各个语句、说明的做法。让程序设计始终贯穿于整个教学过程,使教学内容更贴近应用。针对程序设计的每个知识模块都采取如下模式讲授: 

提出有意义的问题→设计算法→分析算法特点→编出程序

  →介绍使用的C语言成分→配合讲述大量例题→课后习题与实践

在上述过程中,把重点放在设计算法和讲述算法特点上。例如,全书开篇从有趣的“鸡兔同笼”问题开始,引进算法、程序、程序设计等概念,即讲授了抽象的概念又调动起了学生的学习兴趣。

作为大学本科计算机基础课教材,本书具有如下特点: 

 (1)  最大的特点是以程序设计为主线、以案例为驱动。按程序设计的思路组织全书内容,真正的在讲授程序设计,而不是讲语言,摒弃了目前各种程序设计书中流行的主要“解释程序设计语言”的做法。

 (2)  整体结构好,章节安排合理,由浅入深地介绍程序设计知识。例如有关函数的知识,由浅入深的分散到4章中介绍;有关指针的知识也分散到5章中介绍。免得集中在一章,使读者学起来枯燥乏味,接受困难。

 (3)  全书自始至终贯穿结构化程序设计思想,所有例题都具有良好的结构和程序设计风格。目的是给读者一个示范,使读者从开始学习程序设计就养成一个良好的程序设计习惯和风格。

 (4)  图文并茂,引进PAD图表示程序逻辑。PAD图的结构比传统的流程图、NS图等都好,同时也比直接用程序表示算法更直观,易于理解。

 (5)   配备大量例题和习题,并且全部为程序设计题目。例题讲解从构造算法出发,以训练读者的编程能力为目标;概念、语言成分的介绍穿插在程序设计之中。本书中的全部例题都在Microsoft Visual C++ 6.0的环境下调试通过。大量的习题供读者做练习和进一步提高使用。

全书共13章,大致分为四部分。

第一部分基本知识,为第1章,介绍计算、算法和程序设计基本概念。

第二部分程序设计,包括第2~5、9、11章。第2章简单程序设计,介绍顺序程序设计、数据及其类型、表达式、赋值、I/O;第3章介绍分支程序设计;第4章介绍循环程序设计;第5章简单介绍模块化程序设计思想,引进子程序和函数概念;第9章进一步介绍函数,讲述参数、作用域、递归程序设计;第11章介绍程序开发和结构化程序设计,包括结构化程序设计原则、程序风格、自顶向下逐步求精的程序设计技术。

第三部分数据组织,包括第6~8、10、12章。第6章讲述批量数据组织--数组;第7章介绍指针;第8章讲述对复杂的表单数据的描述,引进结构体;第10章讲述外部数据组织--文件及其操作;第12章讲述动态数据组织及其在程序设计中的应用。

第四部分为第13章,若干深入的问题。进一步介绍函数,讲述函数作参数、函数值、函数副作用、间接递归等;以及存储类别、位操作、位段、goto、编译预处理等。

本书第1~4章由吉林大学张长海执笔,第5、6、8~11章由长春税务学院赵大朋执笔,第7、12、13章由吉林大学陈娟执笔。最后由张长海统稿。

在本书的编写过程中作者参阅并引用了国内外诸多同行的文章、著作,在此作者向他们致意,并恕不一一列举、标明。在本书的成书和出版过程中得到清华大学出版社的帮助和大力支持,作者在此表示由衷的感谢。

限于作者学术水平有限,错误和不足在所难免,敬请各位读者批评指正。作者十分感谢。

作 者 2009年3月于长春

目录

第1章 绪论1

1.1 “鸡兔同笼”--计算1

1.2 算法2

1.3 PAD图3

1.4 程序4

1.5 运行5

1.6 计算机的基本结构7

1.7 C语言7

1.8 Visual C++集成开发环境9

1.8.1 启动VC++9

1.8.2 独立文件模式下建立环境9

1.8.3 独立文件模式下录入、编辑源程序9

1.8.4 编译11

1.8.5 连接与运行11

1.8.6 程序参数12

1.8.7 项目管理模式下建立运行环境13

1.8.8 项目管理模式下录入、编辑源程序14

本章小结16

习题一16

第2章 简单程序18

2.1 行程问题--简单程序18

2.2 语句19

2.3 表达式20

2.3.1 表达式语句22

2.3.2 赋值22

2.4 基本符号23

2.4.1 关键字23

2.4.2 标识符23

2.4.3 间隔符24

2.4.4 注释25

2.5 数据及其类型26

2.5.1 浮点类型26

2.5.2 整数类型27

2.5.3 字符类型27

2.5.4 混合运算28

2.6 常量和变量28

2.6.1 字面常量28

2.6.2 常量标识符31

2.6.3 变量31

2.7 类型转换32

2.8 输入输出34

2.8.1 字符输入34

2.8.2 字符输出35

2.8.3 格式输入35

2.8.4 格式输出36

2.9 顺序控制结构39

本章小结43

习题二44

第3章 分支程序设计46

3.1 判断成绩是否及格--双分支程序设计46

3.2 成绩加上获奖信息--单分支程序设计48

3.3 逻辑判断--布尔类型54

3.3.1 关系运算54

3.3.2 布尔运算55

3.4 获奖分等级--多分支程序设计55

3.5 表示汽车种类--枚举类型59

本章小结61

习题三61

第4章 循环程序设计64

4.1 计算平均成绩--循环程序64

4.1.1 后判断条件的循环65

4.1.2 先判断条件的循环69

4.1.3 for语句73

4.2 打印99表--多重循环75

4.3 程序设计实例79

本章小结83

习题四83

第5章 模块化程序设计--函数86

5.1 求给定三角形的重心--模块化程序设计86

5.2 函数89

5.2.1 函数定义90

5.2.2 函数调用91

5.2.3 先调用后定义93

5.3 程序设计实例94

本章小结97

习题五97

第6章 批量数据组织--数组99

6.1 成绩统计--数组类型99

6.1.1 数组声明100

6.1.2 下标表达式101

6.1.3 应注意的问题101

6.2 统计多科成绩--多维数组102

6.3 程序设计实例104

6.4 成绩排序--数组初值113

6.5 输出回文字--字符串115

6.6 类型定义119

本章小结120

习题六121

第7章 指针124

7.1 指针与变量124

7.1.1 指针类型和指针变量125

7.1.2 指针所指变量126

7.1.3 空指针、无效指针128

7.2 指针运算129

7.3 指针与数组131

7.3.1 用指针标识数组131

7.3.2 指针数组132

7.4 指针与字符串134

7.5 指向指针的指针137

本章小结139

习题七139

第8章 表单数据组织--结构体141

8.1 图书卡管理141

8.2 图书卡保存--结构体144

8.2.1 定义结构体类型145

8.2.2 结构体类型名146

8.2.3 结构体变量147

8.2.4 指向结构体变量的指针148

8.2.5 访问结构体变量的成分148

本章小结150

习题八150

第9章 再论函数153

9.1 参数153

9.1.1 传递直线方程系数--指针作参数153

9.1.2 对任意数组排序--数组作参数155

9.1.3 图书卡检索--结构体作参数159

9.2 函数值160

9.2.1 打印月份名--返回指针值的函数160

9.2.2 读入图书卡片--返回结构体值的函数162

9.3 作用域163

9.4 局部量和全局量164

9.5 计算n!--递归程序设计166

本章小结171

习题九171

第10章 外部数据组织--文件174

10.1 重新考虑图书卡管理问题--文件174

10.2 文件概述176

10.3 打开和关闭文件179

10.4 程序参数180

10.5 字符读写183

10.6 字符串读写184

10.7 格式化读写185

10.8 数据块读写188

10.9 文件定位191

本章小结192

习题十193

第11章 程序开发195

11.1 求三角形外心--自顶向下、逐步求精195

11.2 结构化程序设计原则200

11.3 程序风格201

11.3.1 行文格式202

11.3.2 标识符203

11.3.3 注释203

11.3.4 对程序说明的建议203

本章小结204

习题十一204

第12章 动态数据组织206

12.1 打印法雷序列--动态数据结构206

12.2 动态变量210

12.3 链表212

12.4 程序设计实例216

本章小结220

习题十二220

第13章 若干深入问题222

13.1 函数222

13.1.1 不定方向的数组排序--函数指针222

13.1.2 计算定积分--函数作参数224

13.1.3 计算算术表达式的值--间接递归228

13.1.4 函数副作用230

13.2 运算231

13.2.1 赋值运算232

13.2.2 顺序表达式232

13.2.3 条件表达式232

13.2.4 位运算233

13.3 语句235

13.3.1 break235

13.3.2 continue236

13.3.3 for的延伸237

13.3.4 goto和标号237

13.4 数据组织238

13.4.1 多维数组与指针238

13.4.2 位段241

13.4.3 职工登记卡--共用体242

13.5 存储类别245

13.5.1 数据在内存中的存储246

13.5.2 自动存储类别246

13.5.3 寄存器存储类别247

13.5.4 变量的静态存储类别248

13.5.5 变量的外部存储类别250

13.5.6 函数的存储类别250

13.5.7 类型定义符251

13.6 编译预处理252

13.6.1 宏定义252

13.6.2 文件包含253

13.6.3 条件编译254

本章小结256

习题十三256

附录A ASCII字符集259

附录B 标准库头文件表262

参考文献263

第3章 分支程序设计45

3.1 判断成绩是否及格--双分支程序设计45

3.2 成绩加上获奖信息--单分支程序设计47

3.3 逻辑判断--布尔类型53

3.3.1 关系运算53

3.3.2 布尔运算54

3.4 获奖分等级--多分支程序设计54

3.5 表示汽车种类--枚举类型58

本章小结60

习题三60

第4章 循环程序设计63

4.1 计算平均成绩--循环程序63

4.1.1 后判断条件的循环64

4.1.2 先判断条件的循环68

4.1.3 for语句72

4.2 打印99表--多重循环74

4.3 程序设计实例78

本章小结82

习题四82

第5章 模块化程序设计--函数85

5.1 求给定三角形的重心--模块化程序设计85

5.2 函数88

5.2.1 函数定义89

5.2.2 函数调用90

5.2.3 先调用后定义92

5.3 程序设计实例93

本章小结96

习题五96

第6章 批量数据组织--数组98

6.1 成绩统计--数组类型98

6.1.1 数组声明99

6.1.2 下标表达式100

6.1.3 应注意的问题100

6.2 统计多科成绩--多维数组101

6.3 程序设计实例103

6.4 成绩排序--数组初值112

6.5 输出回文字--字符串114

6.6 类型定义118

本章小结119

习题六120

第7章 指针123

7.1 指针与变量123

7.1.1 指针类型和指针变量124

7.1.2 指针所指变量125

7.1.3 空指针、无效指针127

7.2 指针运算128

7.3 指针与数组130

7.3.1 用指针标识数组130

7.3.2 指针数组131

7.4 指针与字符串133

7.5 指向指针的指针136

本章小结139

习题七139

第8章 表单数据组织--结构体142

8.1 图书卡管理142

8.2 图书卡保存--结构体145

8.2.1 定义结构体类型146

8.2.2 结构体类型名147

8.2.3 结构体变量148

8.2.4 指向结构体变量的指针149

8.2.5 访问结构体变量的成分149

本章小结151

习题八151

第9章 再论函数154

9.1 参数154

9.1.1 传递直线方程系数--指针作参数154

9.1.2 对任意数组排序--数组作参数156

9.1.3 图书卡检索--结构体作参数160

9.2 函数值161

9.2.1 打印月份名--返回指针值的函数161

9.2.2 读入图书卡片--返回结构体值的函数163

9.3 作用域164

9.4 局部量和全局量165

9.5 计算n!-递归程序设计167

本章小结172

习题九172

第10章 外部数据组织--文件175

10.1 重新考虑图书卡管理问题--文件175

10.2 文件概述177

10.3 打开、关闭文件180

10.4 程序参数181

10.5 字符读写184

10.6 字符串读写185

10.7 格式化读写186

10.8 数据块读写189

10.9 文件定位192

本章小结193

习题十193

第11章 程序开发196

11.1 求三角形外心--自顶向下、逐步求精196

11.2 结构化程序设计原则201

11.3 程序风格202

11.3.1 行文格式203

11.3.2 标识符204

11.3.3 注释204

11.3.4 对程序说明的建议204

本章小结205

习题十一205

第12章 动态数据组织207

12.1 打印法雷序列--动态数据结构207

12.2 动态变量211

12.3 链表213

12.4 程序设计实例217

本章小结221

习题十二221

第13章 若干深入问题223

13.1 函数223

13.1.1 不定方向的数组排序--函数指针223

13.1.2 计算定积分--函数作参数225

13.1.3  计算算术表达式的值--间接递归229

13.1.4 函数副作用231

13.2 运算232

13.2.1 赋值运算233

13.2.2 顺序表达式233

13.2.3 条件表达式233

13.2.4 位运算234

13.3 语句236

13.3.1 break236

13.3.2 continue237

13.3.3 for的延伸238

13.3.4 goto和标号238

13.4 数据组织239

13.4.1 多维数组与指针239

13.4.2 位段242

13.4.3 职工登记卡--共用体243

13.5 存储类别246

13.5.1 数据在内存中的存储247

13.5.2 自动存储类别247

13.5.3 寄存器存储类别248

13.5.4 变量的静态存储类别249

13.5.5 变量的外部存储类别251

13.5.6 函数的存储类别251

13.5.7 类型定义符252

13.6 编译预处理253

13.6.1 宏定义253

13.6.2 文件包含254

13.6.3 条件编译255

本章小结257

习题十三257

附录A ACSII字符集260

附录B 标准库头文件表263

参考文献264

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个