C语言解析教程(原书第4版)
作者 : (美)Al Kelley Ira Pohl
译者 : 麻志毅
丛书名 : 计算机科学丛书
出版日期 : 2002-01-01
ISBN : 7-111-09336-4
定价 : 48.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 436
开本 : 16开
原书名 : C by Dissection: The Essentials of C Programming
原出版社:
属性分类: 教材
包含CD :
绝版 : 已绝版
图书简介

C语言在全世界的学术界和工业界都广泛地应用,同时它也是计算机科学教育编程课程的首选编程语言。本书通过应用作者首次提出的一种独特的教学方法—解析,对C语言的关键特征及编程过程做了细致全面的介绍。书中大量的练习和带有详细注释的工作程序会使读者从整体上提高编程能力、掌握编程技巧。本书的附录还给出了大量标准库函数供读者参考。
本书全面介绍了C语言的数组、指针、函数、串处理、文件处理和软件工具等方面的内容,本书是计算机专业本科生的极佳教材。

图书前言

目前,全世界的学术界和工业界都在广泛使用ANSI C编程语言。在很多教育机构,它是编程课程的首选语言和用于计算机科学教育的语言。这主要是因为从高级的课程到介绍性的课程都可选择C。此外,C带有很多有用的库,并由复杂的集成环境所支持。ANSI C的改进弥补了一些在传统C中发现的不足,例如弱类型规则,这些改进以及C作为开发系统、图形和数据库的语言的广泛影响使得它成为讲授编程和计算机科学的首选。
通过详细地展开工作程序,本书对编程过程进行了全面的介绍,说明了C编程语言的关键特征。本书用一种循序渐进的方式对程序代码进行了全面说明。书中的代码已经在几个平台上测试过,你可从因特网站点aw.com获得这些代码。
本书中的代码能用于大多数C语言系统,例如MacOS、MS-DOS、OS/2、UNIX和Windows操作系统中的C系统。
解析(Dissection)
通过用解析的方法详细地展开工作C程序,本书向读者提供了清晰而完整的编程过程。解析是作者于1984年研制的一种独特的教学法,用于说明工作代码的关键特征。解析类似于结构化的代码预排。其意图是向读者解释新遇到的编程元素和工作代码中含有的习惯语法。本书以一种按部就班的易于遵循的方式对程序和函数进行解释。在不同上下文中的应用充分强化了关键思想。
无背景假设
本书假设没有任何编程背景,学生和初学的计算机用户都可使用,不熟悉C的有经验的程序员也会受益于C语言细致的结构化表达。对于学生而言,本书可作为计算机科学或编程的第一门教程。
对于其他学科,本书也适合于CS1课程或初始编程课程。本书的每章都给出了一些带有详细注释的程序,以用整体的方式使学生不断地提高编程技巧。本书一开始就向学生介绍完整的程序,在本书的前面部分引导学生编写作为结构化编程主要特征的函数。函数与程序的关系就像段落和文章一样。能胜任编写函数是熟练程序员的标志,因而要强调这点。书中的例子和练习是富有内容和难度的,因而教师可精选适合于学生的作业。
专有特征
《C语言解析教程》(《C by Dissection: The Essentials of C programming》)的第4版增加了一些新的专有特征:
全部运用最新的ANSI C,例如函数原型。
每章末尾的“转向C++”一节有助于转换到面向对象的C++。
早期的对多文件程序的解释使得程序员能正确地编制模块代码和产品,并能正确地使用库。
早期的对简单递归的解释反映出在早期阶段的计算机科学课程中对递归的提前介绍。
介绍了程序的正确性和输入的安全性。
对函数和指针进行深入的解释,这些概念通常是初学者的绊脚石。
对二维数组的讨论反应了科学家和工程师对C越来越多的使用。
对递归的深入研究反应了计算机科学家为了实现复杂算法对C的越来越多的使用。
可选的C++和Java练习。
附录中的位运算符改善了对主流语言特征的表示。
章节特征
每章都含有如下的教学法元素:
解析 每章都有几个重要的示例程序。本书用解析方法解释这些程序的主要元素。这种新的编程思想的讨论,有助于读者在首次遇到这些思想时对它们的理解。
编程风格和方法 本书到处强调编程风格和方法。书中较早地提出了诸如结构化分支语句、嵌套控制流、自顶向下设计和结构化编程这样的重要概念。从一开始的详细解释就采用了一致和正确的编码风格,以强调编码风格的重要性和合理性。本书使用的编码风格是使用各种C语言编程的专业人员常用的。因为C支持函数原型和强类型检查,这种风格已被全面采用。
工作代码 从一开始,本书就向学生介绍完全可执行的程序。使用可执行的代码,学生能更好地理解和评价正在讨论中的编程思想。很多程序和函数都通过解析来解释。对编程思想的变化经常会体现在习题中。
常见的编程错误 书中描述了很多典型的编程错误以及避免这些错误的方法。学习编程语言遇到的大多数挫折都是由于遇到含糊的错误引起的。很多书讨论正确编码,而让读者用反复实验的方法去找出错误。本书说明了C中典型的错误是如何产生的以及应该怎样来改正错误。
系统考虑 在几乎任何的计算机和大多数操作系统中C都是可用的,但从一个系统到另一个系统在行为上偶然会存在不同。本书描述了这些不同。在ANSI C和传统C之间也存在不同,这些不同在本书中也做了描述。所有的程序通常都在一些不同的环境下进行了测试。本书强调编写可移植的独立于系统的代码。
转向C++ 每章的末尾有一个可选的节,它描述了转向C++所需的编程元素。本书对这些内容也给出了练习。就绝大部分而言,C是C++编程语言的子集,在转向C++之前很多学生先学习C,本书有助于这种自然过渡。对于希望完全精通C++的读者来说,可以将本书与Ira Pohl所著的《C++ for C Programmers,Third Edition》(Addison Wesley Longman, Inc., Reading, MA 1999, ISDN 0-201-39519-3)配合起来使用。
小结  在每章的末尾,我们给出了一个简洁的这一章的要点列表,对读者起复习的作用,以加深理解这一章提出的新思想。
练习 各章末的练习测试读者的语言知识。很多练习要与阅读正文交互式地进行,这样可以促进读者自我调整学习进度。还有一个练习特征:一些练习非常详细地着眼于一个主题,另外一些练习能扩充读者的知识以达到使用的高级境界。
作为学生的教材
本书作为教学生编程的教材,在第一学期的课程中可以使用第1章到第10章,其中包含了C编程语言的数组、指针和串的全部用法。第二学期课程致力于高级数据类型、文件处理和软件工具,这些内容包含在第11章到第15章。对于为已经具有一些编程知识(不一定是C语言的知识)的学生而设立的课程,教师也可以使用到本书的所有主题。本书也能用作需要学生使用C的其他计算机科学课程的教材。
交互式环境
本书可用于交互式环境。通过键盘和屏幕的实验完全受到鼓励。对PC机而言有很多厂商提供了交互式C/C++系统,例如Borland、IBM、Metroworks、Microsoft和Symantec。
作为专业程序员的教材
虽然本书是为初级编程员准备的,但对于有经验的程序员来说,本书也是对C语言较好的介绍。结合Al Kelley和Ira Pohl所著的《A Book on C, Fourth Edition》(Addison Wesley Longman, Inc., Reading, MA 1998, ISDN 0-201-18399-4),计算机专业人员会获得对该语言的全面理解,包括在MS-DOS和UNIX下有关使用它的关键之处。作为一种结合,这两本书提供了对C编程语言的完整分析以及在别处难以获得的用法。此外,本书与Ira Pohl所著的《C++ for C Programmers,Third Edition》和Ira Pohl所著的《Object-Oriented Programming Using C++, Second Edition》(Addison Wesley Longman, Inc., Reading, MA 1997, ISDN 0-201-89550-1)相结合,还向学生或专业人员提供了对面向对象语言C++的完整分析。
ANSI C标准
ANSI 是美国国家标准协会(American National Standards Institute)的英文首写字母的缩写,该协会致力于包括编程语言在内的多种标准的制订。特别是ANSI委员会X3J11负责制订编程语言C的标准。在20世纪80年代后期,该委员会创建了称为“ANSI C”或“标准C”的标准草案。到1990年,该委员会完成了这项标准,国际标准化组织(International Standardization Organization,ISO)也批准了这项标准。因而,ANSI C或ANSI/ISO C标准在国际上获得承认。
ANSI C标准规定了用C编写的程序的格式,并确定了如何解释这些程序。该标准的目的是促进C语言程序在各种机器上的可移植性、可靠性、可维护性和有效执行。所有主要的C编译器都遵循ANSI C标准。
Al Kelley
Ira Pohl
University of California, Santa Cruz

译者简介

麻志毅:暂无简介

图书目录

第1章  编写ASNI C程序 1
1.1  准备编程 1
1.2  第一个程序 2
1.3  变量、表达式和赋值 5
1.4  初始化 8
1.5  #define和#include的用法 8
1.6  printf()和scanf()的用法 9
1.6.1  printf()的用法 10
1.6.2  scanf()的用法 11
1.7  while语句 13
1.8  问题求解:计算总和 14
1.9  风格 15
1.10  常见的编程错误 16
1.11  系统考虑 17
1.11.1  编写和运行C程序 17
1.11.2  中断程序 18
1.11.3  输入文件尾标识 18
1.11.4  输入和输出的重定向 18
1.12  转向C++ 19
小结 20
练习 20
第2章  词法元素、运算符和C系统 26
2.1  字符和词法元素 27
2.2  注释 28
2.3  关键字 29
2.4  标识符 29
2.5  常量 30
2.6  串常量 31
2.7  运算符和标点符号 31
2.8  运算符的优先级和结合性 32
2.9  增量运算符和减量运算符 33
2.10  赋值运算符 34
2.11  例子:计算2的幂 36
2.12  C系统 36
2.12.1  预处理器 37
2.12.2  标准库 37
2.13  风格 39
2.14  常见的编程错误 40
2.15  系统考虑 41
2.16  转向C++ 42
小结 42
练习 43
第3章  控制流 48
3.1  关系、等式和逻辑运算符 48
3.2  关系运算符和表达式 49
3.3  等式运算符和表达式 50
3.4  逻辑运算符和表达式 50
3.5  复合语句 53
3.6  空语句 53
3.7  if和if-else语句 53
3.8  while语句 56
3.9  问题求解:找最大值 57
3.10  for语句 58
3.11  问题求解:组合数学 59
3.12  问题求解:布尔变量 61
3.13  逗号运算符 61
3.14  do语句 62
3.15  goto语句 63
3.16  break和continue语句 64
3.17  switch语句 65
3.18  嵌套的控制流 65
3.19  条件运算符 66
3.20  风格 67
3.21  常见的编程错误 68
3.22  系统考虑 70
3.23  转向C++ 71
小结 71
练习 72
第4章  函数和结构化编程 78
4.1  函数调用 78
4.2  函数定义 78
4.3  return语句 80
4.4  函数原型 82
4.5  自顶向下设计 83
4.6  程序的正确性:assert()宏 86
4.7  从编译器的角度来看函数声明 87
4.8  问题求解:随机数 88
4.9  函数定义次序的可选风格 89
4.10  开发一个大程序 90
4.11  模拟:正反面游戏 93
4.12  调用和按值调用 95
4.13  递归 96
4.14  风格 97
4.15  常见的编程错误 97
4.16  系统考虑 99
4.17  转向C++ 100
小结 102
练习 103
第5章  字符处理 110
5.1  数据类型char 110
5.2  getchar()和putchar()的用法 112
5.3  例子:大写 115
5.4  ctype.h中的宏 117
5.5  问题求解:重复字符 117
5.6  问题求解:对单词计数 118
5.7  风格 120
5.8  常见的编程错误 121
5.9  系统考虑 122
5.10  转向C++ 123
小结 125
练习 125
第6章  基本数据类型 128
6.1  声明和表达式 128
6.2  基本数据类型 128
6.3  字符和数据类型char 129
6.4  数据类型int 130
6.5  整数类型short、long和unsigned 131
6.6  浮点类型 132
6.7  sizeof运算符 134
6.8  数学函数 134
6.9  转换和类型转换 136
6.9.1  整型提升 136
6.9.2  常用的算术转换 136
6.9.3  类型转换 137
6.10  问题求解:计算利息 138
6.11  风格 141
6.12  常见的编程错误 142
6.13  系统考虑 143
6.14  转向C++ 143
小结 144
练习 145
第7章  枚举类型和typedef 151
7.1  枚举类型 151
7.2  typedef的用法 152
7.3  例子:石头、剪刀、布游戏 154
7.4  风格 158
7.5  常见的编程错误 159
7.6  系统考虑 160
7.7  转向C++ 160
小结 160
练习 161
第8章  函数、指针和存储类型 165
8.1  指针声明和赋值 165
8.2  地址和间接访问 166
8.3  指向void的指针 169
8.4  引用调用 170
8.5  作用域规则 171
8.6  存储类型 172
8.6.1  存储类型auto 172
8.6.2  存储类型extern 172
8.6.3  存储类型register 174
8.6.4  存储类型static 174
8.7  静态外部变量 175
8.8  缺省的初始化 176
8.9  例子:字符处理 176
8.10  函数声明和函数定义 179
8.11  类型限定符const和volatile 179
8.12  风格 180
8.13  常见的编程错误 181
8.14  系统考虑 182
8.15  转向C++ 183
小结 184
练习 185
第9章  数组和指针 190
9.1  一维数组 190
9.1.1  初始化 191
9.1.2  下标 192
9.2  例子:分别对每个字母计数 192
9.3  数组和指针间的关系 194
9.4  指针运算和元素尺寸 195
9.5  把数组传递给函数 195
9.6  排序算法:冒泡排序 196
9.7  二维数组 197
9.8  多维数组 199
9.9  动态内存分配 200
9.10  风格 201
9.11  常见的编程错误 203
9.12  系统考虑 203
9.13  转向C++ 204
小结 205
练习 206
第10章  串和指针 211
10.1  串结束标志 211
10.2  串的初始化 212
10.3  例子:心情愉快 212
10.4  用指针处理串 214
10.5  问题求解:单词计数 217
10.6  把参数传递给main() 218
10.7  标准库中的串处理函数 218
10.8  风格 220
10.9  常见的编程错误 220
10.10  系统考虑 221
10.11  转向C++ 221
小结 221
练习 222
第11章  递归 225
11.1  递归问题求解 225
11.2  例子:在屏幕上绘制图案 228
11.3  用递归处理串 229
11.4  分而治之方法 230
11.5  例子:汉诺塔 231
11.6  风格 237
11.7  常见的编程错误 238
11.8  系统考虑 239
11.9  转向C++ 239
小结 240
练习 240
第12章  结构和抽象数据类型 245
12.1  声明结构 245
12.2  访问成员 246
12.3  运算符的优先级和结合性:总结 248
12.4  结构、函数和赋值 249
12.5  问题求解:学生记录 251
12.6  结构的初始化 253
12.7  typedef的用法 253
12.8  自引用结构 254
12.9  线性链表 255
12.10  对链表的操作 256
12.11  计数和查找 257
12.12  插入和删除 258
12.13  风格 259
12.14  常见的编程错误 260
12.15  系统考虑 260
12.16  转向C++ 261
小结 266
练习 266
第13章  输入/输出和文件 269
13.1  输出函数printf() 269
13.2  输入函数scanf() 272
13.2.1  控制串中的指示 273
13.2.2  普通字符 273
13.2.3  空白字符 273
13.2.4  转换说明 273
13.2.5  输入流中的浮点数 275
13.2.6  使用扫描集 275
13.2.7  返回值 276
13.2.8  一个scanf()的例子 276
13.3  函数sprintf()和sscanf() 277
13.4  函数fprintf()和fscanf() 277
13.5  访问文件 278
13.6  例子:对文件行距加倍 279
13.7  使用临时文件和得体的函数 281
13.8  随机地访问文件 283
13.9  风格 284
13.10  常见的编程错误 285
13.11  系统考虑 286
13.12  转向C++ 287
小结 289
练习 290
第14章  软件工具 295
14.1  在C程序中执行命令 295
14.2  环境变量 296
14.3  C编译器 297
14.4  创建库 299
14.5  使用profiler 300
14.6  关于时间的编码 303
14.7  dbx的用法 305
14.8  make的用法 306
14.9  touch的用法 309
14.10  其他有用的工具 309
14.11  风格 310
14.12  常见的编程错误 310
14.13  系统考虑 311
小结 311
练习 312
第15章  从C到C++ 315
15.1  为什么转到C++ 315
15.2  类和抽象数据类型 317
15.3  重载 318
15.4  构造器和析构器 320
15.5  继承 321
15.6  多态性 322
15.7  模板 324
15.8  C++中的异常 325
15.9  面向对象编程的益处 325
15.10  风格 325
15.11  常见的编程错误 326
15.12  系统考虑 326
小结 326
练习 327
附录A  标准库 329
附录B  预处理器 354
附录C  位运算符 363
附录D  ANSI  C与传统C的比较 375
附录E  ASCII字符编码表 380
附录F  运算符的优先级和结合性 381
索引 382

教学资源推荐
作者: [美]罗伯特·哈珀(Robert Harper) 著
作者: Patrick Henry Winston, Sundar Narasimhan
作者: [丹]弗莱明·尼尔森(Flemming Nielson),[丹]汉内·里斯·尼尔森(Hanne Riis Nielson),[英]克里斯·汉金(Chris Hankin) 著
参考读物推荐
作者: 兰小伟 著
作者: (美) Mark Lutz 著
作者: [智]巴勃罗·里瓦斯(Pablo Rivas) 著