本书是C语言的经典教材。与同类图书相比,本书的最大特色在于,不仅深入浅出地讲述了实际开发最需要的C语言基础知识以及动态数据结构和多进程等高级内容,而且在此过程中同时阐述程序设计思想,注重提高学生的问题解决能力和实际编程能力,使学生能够了解和初步掌握当前软件行业公认的程序设计风格和编程实践。书中对指针的处理 非常合理,有效地降低了这一难点的学习门槛。此外,本书有丰富的教学辅助内容,配有各种层次的习题和示例,而且每一章都有一个或多个来自实际生活的实例研究。\r\n 本书可以作为计算机科学专业及其他专业本科生C语言程序设计课程的教材;对已有C语言编程经验的技术人员,本书也是不可多得的参考书。
第1章 计算机与程序设计概述 \r\n 1.1 电子计算机的过去和现在 \r\n 1.2 计算机硬件 \r\n 1.2.1 存储器 \r\n 1.2.2 中央处理器 \r\n 1.2.3 输入/输出设备 \r\n 1.2.4 计算机网络 \r\n 1.3 计算机软件 \r\n 1.3.1 操作系统\r\n 1.3.2 应用软件\r\n 1.3.3 计算机语言 \r\n 1.3.4 执行程序\r\n 1.4 软件开发方法\r\n 1.4.1 软件开发方法 \r\n 1.4.2 注意:失败是编程过程的一部分 \r\n 1.5 应用软件开发方法\r\n 实例研究:英里到公里的转换\r\n 复习 \r\n 快速测试 \r\n 快速测试答案\r\n 复习题 \r\n第2章 C概述\r\n 2.1 C语言要素 \r\n 2.1.1 预处理指令\r\n 2.1.2 预处理指令的语法展示 \r\n 2.1.3 main函数 \r\n 2.1.4 保留字\r\n 2.1.5 标准标识符\r\n 2.1.6 用户定义的标识符\r\n 2.1.7 大写和小写字母\r\n 2.1.8 程序风格:选择标识符名称 \r\n 2.2 变量声明和数据类型 \r\n 2.2.1 变量声明 \r\n 2.2.2 数据类型 \r\n 2.3 可执行语句 \r\n 2.3.1 内存中的程序 \r\n 2.3.2 赋值语句 \r\n 2.3.3 输入/输出操作和函数 \r\n 2.3.4 printf函数 \r\n 2.3.5 scanf函数\r\n 2.3.6 return语句 \r\n 2.4 C程序的一般形式 \r\n 2.4.1 程序风格:程序中的空格 \r\n 2.4.2 程序的注释\r\n 2.4.3 程序风格:使用注释\r\n 2.5 算术表达式 \r\n 2.5.1 运算符/和% \r\n 2.5.2 表达式的数据类型 \r\n 2.5.3 混合类型赋值语句 \r\n 2.5.4 强制类型转换 \r\n 2.5.5 具有多个运算符的表达式\r\n 2.5.6 用C语言编写数学公式 \r\n 实例研究:对收集的硬币求值 \r\n 2.6 在程序输出中格式化数值 \r\n 2.6.1 格式化int型值 \r\n 2.6.2 格式化double型值 \r\n 2.6.3 程序风格:消除前导空白\r\n 2.7 交互模式、批处理模式和数据文件\r\n 2.7.1 输入重定向\r\n 2.7.2 程序风格:回显与提示符 \r\n 2.7.3 输出重定向 \r\n 2.7.4 程序控制的输入和输出文件\r\n 2.8 常见编程错误\r\n 2.8.1 语法错误 \r\n 2.8.2 运行时错误\r\n 2.8.3 未检测到的错误\r\n 2.8.4 逻辑错误\r\n 复习 \r\n 快速测试\r\n 快速测试答案\r\n 复习题 \r\n 程序设计项目\r\n第3章 函数的自顶向下设计 \r\n 3.1 利用已有信息编程 \r\n 实例研究:求圆的面积和周长\r\n 实例研究:计算一批平垫圈的重量\r\n 3.2 库函数 \r\n 3.2.1 预定义函数和代码复用 \r\n 3.2.2 使用灰色区分新结构\r\n 3.2.3 C库函数\r\n 3.2.4 本节目标 \r\n 3.3 自顶向下设计和结构图 \r\n 实例研究:画简单的图 \r\n 3.4 无参函数 \r\n 3.4.1 函数原型\r\n 3.4.2 函数定义\r\n 3.4.3 程序中函数的位置 \r\n 3.4.4 程序风格:在含有函数的程序中使用注释 \r\n 3.4.5 子函数和主函数的执行顺序 \r\n 3.4.6 使用子函数的优点 \r\n 3.4.7 显示用户指令 \r\n 3.5 带输入参数的函数\r\n 3.5.1 带输入参数的void函数\r\n 3.5.2 带输入参数和单一结果的函数 \r\n 3.5.3 程序风格:函数接口注释 \r\n 3.5.4 带多个参数的函数 \r\n 3.5.5 参数表一致性 \r\n 3.5.6 函数数据域\r\n 3.5.7 使用驱动测试函数 \r\n 3.6 常见编程错误 \r\n 复习 \r\n 快速测试\r\n 快速测试答案\r\n 复习题 \r\n 程序设计项目\r\n第4章 选择结构:if语句和switch语句\r\n 4.1 控制结构\r\n 4.2 条件\r\n 4.2.1 关系运算符和判等运算符\r\n 4.2.2 逻辑运算符\r\n 4.2.3 运算符优先级 \r\n 4.2.4 短路求值法\r\n 4.2.5 用C语言表示条件\r\n 4.2.6 比较字符\r\n 4.2.7 逻辑赋值 \r\n 4.2.8 条件取反\r\n 4.2.9 德摩根定理 \r\n 4.3 if语句 \r\n 4.3.1 有两个选项的if语句\r\n 4.3.2 只有一个选项的if语句\r\n 4.3.3 比较一个选项的if语句和两个选项的if语句 \r\n 4.3.4 程序风格:if语句格式\r\n 4.4 具有复合语句的if语句\r\n 4.4.1 程序风格:编写具有复合语句的if语句 \r\n 4.4.2 跟踪if语句 \r\n 4.5 算法中的决策步骤 \r\n 实例研究:水费问题\r\n 4.5.1 程序风格:在函数中使用一致的名称 \r\n 4.5.2 程序风格:内聚函数\r\n 4.5.3 程序风格:使用常量宏来增强可读性和易维护性\r\n 4.6 解决更多问题 \r\n 4.6.1 结构图中的数据流信息 \r\n 4.6.2 使用子函数修改程序 \r\n 实例研究:具有节约需求的水费问题 \r\n 4.7 嵌套if语句和多选项决策\r\n 4.7.1 比较嵌套if和if序列 \r\n 4.7.2 嵌套if的多选项决策形式 \r\n 4.7.3 多选项决策中条件的顺序\r\n 4.7.4 程序风格:确认变量的值\r\n 4.7.5 具有多个变量的嵌套if语句 \r\n 4.8 switch语句\r\n 4.9 常见编程错误 \r\n 复习 \r\n 快速测试 \r\n 快速测试答案 \r\n 复习题 \r\n 程序设计项目\r\n第5章 重复和循环语句\r\n第6章 模块化编程 \r\n第7章 简单数据类型\r\n第8章 数组\r\n第9章 字符串\r\n第10章 递归 \r\n第11章 结构体与共用体类型\r\n第12章 文本文件和二进制文件的处理\r\n第13章 大型程序设计\r\n第14章 动态数据结构\r\n第15章 使用进程和线程的多进程 \r\n第16章 关于C++\r\n附录A 字符集\r\n附录B ANSI C标准库 \r\n附录C C运算符 \r\n附录D 关于指针的更多信息 \r\n附录E ANSI C保留字 \r\n附录F ANSI C结构的参照指南 \r\n词汇表(图灵网站下载)\r\n索引(图灵网站下载)\r\n自测练习奇数题答案(图灵网站下载)
本书教给读者怎样用训练有素的方法来解决问题,并应用广为接受的软件工程方法将程序解决方案设计为内聚的、可读的、可重用的模块。本书将ANSI C的一个子集作为这些模块的实现工具进行介绍,ANSI C是一种标准化的、具有工业强度的编程语言,功能强大,可移植性好。本书可以用于程序设计方法的第一门课程,因为它不要求计算机和程序设计的预备知识;此外,本书选择的大量实例研究和练习使得教师可以用本书为计算机科学专业或其他专业的学生开设一门介绍性的C语言程序设计课程。
本版的更新
第15章“使用进程和线程的多进程”是全新的一章,讲授了多进程基本概念。这一章向学生介绍了理解事件驱动和中断驱动编程所必需的概念,包括父进程和子进程以及进程间通信、线程、互斥锁机制和避免死锁的技术。这一章教会学生如何使用C函数来支持这些概念。
用C来教授程序开发
本书的两个目标(讲授程序设计以及讲授C)在某些人看来可能是矛盾的。很多人认为C语言应该在学习过用其他更加友好的语言进行编程之后再学习。C语言之所以被认为非常困难,可以追溯到它的历史。C语言是作为在UNIX操作系统下编程的工具而设计的,它的最初的使用者就是理解操作系统和底层机器复杂性的程序员,这些使用者认为在其程序中利用这些知识很自然。所以,司空见惯的是,许多讲授C语言的教材展示给学生的程序示例都需要理解机器概念,尽管这些概念并没有出现在标准的初级程序设计课程的大纲中。
使用本书既能够讲授程序开发的正确方法又可以讲授ANSI C语言,而且本书选择前者作为最主要的目标。有人可能会担心这种选择会弱化对ANSI C的阐述。事实正相反,我们发现将程序设计的概念和这些概念在C中的实现相结合,能够清晰地展示C作为一种高级编程语言所具备的威力,而这一点在那些以介绍所有ANSI C内容为主的教科书中往往是很模糊的。虽然与讨论C语言特征相比我们更强调程序设计的方法,但本书仍然全面讲述了C的基本结构。
指针与本书的组织
书中C语言主题出现的顺序由初级编程者的需要来决定,而不是由C语言的结构来决定。读者会惊奇地发现没有标题为“指针”的章节。这是因为我们将C当作一种高级语言来讨论,而并不是忽视了指针在C语言中的重要作用。
尽管其他高级语言在输出参数和数组方面具有独立的语言结构,但C语言将这些概念包装在它的指针概念中,这明显增加了学习这种语言的难度。本书在相应的位置分散地讨论指针,从而简化了学习过程,这使得学生能够每次吸收一点指针用法的精髓。本书的方法使得用传统的高级语言术语(输出参数、数组、数组下标和字符串)来表示基本概念成为可能,并使得没有汇编语言背景的学生掌握指针的多种用法变得更加容易。
因此,本书不是用1章而是用4章来强调指针。第6章讨论了指针作为输出和输入/输出参数的用法,第8章讨论了数组,第9章讲述了字符串和指针数组,第14章在回顾了以前讨论的指针用法后描述了动态内存分配。此外,第2章和第12章讨论了文件指针。
软件工程概念
本书涉及了软件工程的许多方面,其中有一些是明确讨论的,而另外一些则是通过例子给出的。良好的问题解决技巧和有效的软件开发之间的联系在第1章讨论问题解决的科学和艺术时就已经建立。第1章给出的5步软件开发方法用于解决第一个实例研究,并贯彻于本书的其他实例研究中。重要的程序风格用特定方式突出显示,而且示例中使用的编码风格符合软件行业的规范要求。有几章的小节还讨论了算法跟踪、程序调试和测试。
第3章通过介绍部分C库函数、无参数void函数以及接受输入参数并返回值的函数介绍了过程抽象。第4章和第5章包括了更多的函数示例,第6章完成了具有简单参数的函数研究,还讨论了使用指针表示输出和输入/输出参数,而且第7章介绍了怎样把函数作为参数使用。
第6章、第8章和第11章的实例研究和示例程序介绍了数据抽象的概念以及数据类型和运算符封装的概念。第13章给出了在个人库中规范过程和数据抽象的C工具,这些个人库由单独的头文件和实现文件定义。第16章介绍了C++实现的面向对象设计概念。
整本书中强调了可视函数接口的使用。直到第13章才提到使用全局变量的可能性,然后仔细地描述了使用全局变量的优点和危害。
教学辅助内容
本书使用了以下教学辅助内容来增强本书作为学习工具的实用性。
小节末尾的练习。大部分小节结尾都有自测练习,分为需要分析程序段的练习和简短的编程练习。本书还配有部分自测练习的答案 。
示例和实例研究。本书包含了各种各样的编程示例。只要可能,示例就给出了完整的程序或函数而不是未完成的程序片段。每一章都包含了一个或多个具有实际意义的实例研究,而且都遵循软件开发方法来解决。大量实例研究让学生看到了计算的重要应用,包括数据库查询、用于记账和销售分析的商业应用、文字处理以及诸如辐射等级监测和节约用水等有关环境的应用。
语法展示框。语法展示框描述了语法和新的C特性的语义并给出了例子。
程序风格展示。程序风格展示并讨论了良好的编程风格。
错误讨论和每章复习。每一章都有一小节讨论常见编程错误。每章复习经常以表格形式给出本章介绍的新的C语言结构。
章末练习。每一章复习之后是附有答案的快速测试练习。同时还有复习题。
章末项目。每一章末尾是程序设计项目。
附录
附录A给出了字符集表。由于本书只讨论了ANSI C的一个子集,其余的附录对提升本书作为参考书的价值非常重要。附录B是ANSI C的标准库函数的表格,它们按字母排序。附录C中给出了所有C运算符的优先级和结合性的表格,而且给出了前面没有讨论过的运算符的解释。整本书中数组引用都通过下标进行。附录D讨论了指针运算。附录E列出了所有的C保留字。ANSI C结构的参照表在本书附录F中给出。
补充
本书的所有读者都可以从www.aw.com/cssupport得到以下补充材料 :
源代码。
已知的勘误表。
致谢
许多人参与了这本书的出版过程。我们感谢WaveRules公司的Jeff Warsaw,他对本书的新章节做出了重要贡献。加利福尼亚理工大学喷气推动实验室的Joan C.Horvath提供了几个程序设计练习。我们也感激那些在过去几年中帮助验证编程示例,并提供练习答案的Temple大学和怀俄明大学的学生,包括Mark Thoney、Lynne Doherty、Andrew Wrobel、Steve Babiak、Donna Chrupcala、Masoud Kermani、Thayne Routh和Paul Onakoya。
在此过程中很高兴和Addison-Wesley团队一起合作。策划编辑Michael Hirsch和编辑助理Lindsey Triebel在原稿修订的各个阶段提供了指导和鼓励。Marilyn Lloyd负责了本书的生产,而Michelle Brown和Dana Lopreato负责了市场运作。
作 者
无封面