C程序设计软件工程环境(原书第3版)
作者 : Behrouz A. Forouzan;Richard F. Gilberg
译者 : 黄林鹏 伍建 徐小辉
丛书名 : 计算机科学丛书
出版日期 : 2008-06-04
ISBN : 7-111-23769-3
定价 : 89.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 712
开本 : 16开
原书名 : Computer Science:A Structured Programming Approach Using C Third Edition
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书根据ACM CS1课程框架讲授程序设计的基本原理,同时讲解C语言的基本结构。本书基于软件工程环境阐述了基本的程序设计概念和基于C的结构化程序设计方法。
  本书内容丰富,讲解透彻,可作为高等院校计算机及相关专业程序设计语言等课程的教材和教学参考书。

本书特点:
  ●和C99标准完全相符,包含了复数算术运算和Unicode的讨论。
  ●加强了图形的视觉效果,给出的程序示例可以直接作为编译器的输入。
  ●给出了创新的形象化的表示方法,包括大量图形、表格和程序。
  ●给出了大量的例子,从代码片段到完整的包含数个函数的程序实现,为学生学习程序设计和实践编程提供了广泛的技术指导。
  ●每章结尾包括大量的教学资料,其中有小结、关键术语、要点和常见错误,以及内容丰富的习题集。

图书特色

图书前言

本书主要目标有二:其一,按照ACM CS1课程框架讲授程序设计的基本原则;其二,介绍C语言的基本结构。本书将这两个目标放在作者开创的已在工业界和学术界发展了30余年的优良的软件工程概念环境中进行。
  第3版的主要改动
  本版对第2版做了若干改动。除了表示方法和内容素材上的主要改动外,还将使用的语言更新为ISO/IEC 9899(1999),即通常所称的C99。
  尽管进行了大量的改动,但上面所叙述的主要目标未变。本书的宗旨仍是在软件工程环境下对计算机程序设计技术进行综合性的介绍。
新版本的主要改变如下。
  标准C (1999)
  本书将明确讨论以下主题:
  ·布尔类型
  ·字符集扩展(包括Unicode和宽字符(wide character))
  ·复数算术运算
  ·扩展的数学库
  ·for语句声明
  ·整数类型扩充
  ·行注释
  扩充的章节材料
  除了为包含新的C99扩充所进行的更改外,下面一些章节也做了修改或重组。
  ·第4章包含了新的一节,“函数间通信”,更好地解释了函数间的通信。
  ·从第4章开始使用一个例子说明“增量式程序开发”概念,并在第5章对该例子进行扩展。第8章使用第2个例子终结该概念的讨论。
  ·重写了关于文本和二进制文件的讨论,以便将相关材料以更合逻辑、更简练的方式表达出来。
  ·改变了结构类型的表示,以和C99标准和通常的使用方式相符。
  ·第14章扩充了“位运算符”并包含了更多的例子。特别增加了和因特网以及网络程序设计相关的一些例子。
  ·第15章对“列表”结构进行了扩充,概述了数据结构的基本元素,涉及栈、队列、列表、树和图的介绍性讨论。
  ·全书使用了大量的流程图和结构图,它们更好地解释了一些较复杂例子的设计思路。
  ·扩充了附录D“计数系统”的材料内容。
  ·扩充了附录I“void指针和函数指针”的内容,包括了使用指向void类型的指针的讨论。
  ·附录K“程序开发”是新增的内容,讨论了程序开发的相关概念。
  ·附录L“理解复杂声明”,包含了如何阅读复杂的声明的一些讨论,这是从原来的第10章移去的内容。
  C语言透视
  C语言是一种复杂而专业的语言,但使用本书先前版本的课堂经验表明,初学者能轻松理解所讲内容。我们认为如果将语言放在一个透视图中,学生由此能理解它的设计,这样C就不是一种难懂的语言。
  C语言和其他大多数语言的区别有两点:表达式和指针。C语言使用表达式的概念是独特的。本书前半部分的目的就是建立理解表达式的坚实基础,我们只在需要时才引入指针,如将指针传递给函数(第4章)和数组(第8章)。经验表明,只要牢固地掌握了表达式的概念,C语言的许多神秘之处就将烟消云散。
  第9章起逐步展开指针概念的介绍,第10章进一步强化。第11章讨论了C语言中字符串的处理方法。最后,第14章广泛讨论了位运算符,该主题使本书内容更加完整。
  最后一章是数据结构的简单介绍。尽管有些课程的课时不允许详细介绍本章内容,但其内容是学生进行数据结构学习的开端。被激发出学习兴趣的学生会发现学期结束时他们已在数据结构主题上领先一步。
  本书的附录包括了丰富的了解完整C语言所需的参考资料,这对于那些要继续选读其他C语言课程的学生是有用的。
  本书特征
  本书的一些独特特征使学生更容易理解课本的内容。
  结构和风格
  基本宗旨是尽早形成好的习惯。坏习惯是很难克服的。因此我们自始至终强调结构化程序设计和软件工程方法。每章都会使用代码片段或程序来展示这些技术。
  通常出现在每章最后一节的完整程序,都是以一致的、良好文档化的方式编写。分析程序时我们将进一步解释程序的风格和基于的标准。尽管我们承认有多种其他良好的程序风格,但经验表明,一旦学生接触并接受了其中一种,他们就能更好地适应其他良好的程序设计风格。
  先理论后实践
  只要有可能,我们总是在介绍语言实现之前给出原理性的理论介绍。例如,在第5章,我们首先引入布尔数据和选择的概念,然后再介绍if...else和switch语句。这种方法使我们可以在介绍语言的微妙之处之前让学生理解“选择”的含义。
  形象化的方法
  简单浏览一下本书就可以发现我们所使用的方法是形象化的。本书包含400多个图、70余张表格以及180多段的程序代码。虽然包含这些材料会使本书的篇幅增加,但使用这种形象化的方法会使学生易于学习。
  例子
  尽管本书涉及的程序示例复杂性各异,但风格是一致的。和持续运行10到20年的生产性程序打交道的经验使我们确信,可读的和可理解的程序比那些简洁但含义模糊的程序更容易工作。基于这个原因,同时考虑到对语言结构的强调,我们用章节序号标记函数并给出注释。我们始终如一遵循每行仅包含一条声明、一个定义或一条语句的风格。
  这些程序的代码均可在Thomson课程技术网站获得(参阅前言后面的“网站资料”一节)。学生可以运行这些程序,通过修改和编程实验探索相关的主题。
  编码技术
  贯穿本书,我们介绍了可使程序可读性更好、效率更高的编程技术。例如在程序5-4的分析之中,你会发现这样的论述:
  在哪里检查“大于”关系?答案是我们缺省假定在外层的else中“大于”关系成立……当编码一条有两个分支的选择语句时,先尝试对最有可能成立的条件分支进行编码;对于嵌套的选择语句,可先考虑可能性最大的分支,最后再考虑可能性最小的分支。
  这些技术皆来源于广泛的工业实践和课堂经验。
  软件工程
  每章结尾都有软件工程原理的讨论。本书的目的并不是代替独立的软件工程课程,但我们坚信,将基本的软件工程原理引入早期学习,学生能更好地为以后正式参与项目开发做好准备。更重要的是,一开始就编写具有良好工程特性的程序,学生就不需要在以后被强迫忘却坏习惯和重新学习。他们能在以后的课程中更好地理解关于软件的讨论。
  尽管软件工程一节出现于每章的末尾,但最好是每章一开始就先介绍,然后再在每章结束时对课程讲授中所展示的软件工程原理进行小结。
  事实上,该节的内容和每章的其余章节的内容是有区别的。它们被设置成独立的原因是:首先,它们整体可以被看成是包含于本书的一本小册子,尽管这些小节包含了非常重要的材料,但去掉它们本书还是完整的。因此,对于这些软件工程章节,你可以决定是作为正式的讲授主题还是作为每章的内容之一而非正式地涉及,你也可以决定指派给学生作为额外的阅读资料,也可完全排斥在课程之外。
  通常,软件工程小节的内容直接或间接地和每章内容相关。如果不是的话,那就是讨论软件工程的一般主题,如内聚、耦合和质量等。
  教学材料
  每章提供的材料都是为了满足两个教学目标:其一,帮助学生复习和总结所学的知识;其二,测试学生对章节内容掌握的程度。
  复习材料
  ·“要点和常见错误”给出帮助性的提示,指出问题可能发生的地方。
  ·“关键术语”给出本章所引入的重要术语。
  ·“本章小结”包含了本章的关键要点,以帮助学生更好地理解每章内容。
  习题集
  ·“复习题”包含了一些类似于试题库中问题的多选题。编号为奇数的题目的答案包含在课程技术网站提供的材料之中。
  ·“练习”是涉及章节内容的简答题。编号为奇数的题目的答案也包含在课程技术网站所提供的材料之中。
  ·“问题”是简短的编程题,一般应使编写的程序可运行于计算机上。通常可在2~3个小时之内完成。编号为奇数的题目的答案也可在课程技术网站找到。
  ·“项目”是大型的,也是主要的课程作业,一般学生需要化费6~9个小时进行开发。
  附录与插页内容
  附录意在提供一些快速参考材料,如Unicode字符集,同时给出一些在一般的计算机课程中常常涉及的材料,如计数系统等。
  插页则包括两种本书自始至终一直使用的重要的参考资料:优先级表和格式化I/O代码表。
  网站资料
  包含在Thomson课程技术网站(http://www.course.com)的材料有两套:面向授课教师的和面向学生的。
  教师材料
  教师材料包括对所有复习题、练习和问题的解答。因为项目是较复杂的且没有标准答案的作业,故没有提供此类习题的答案。
  除了答案外,网站还有3套其他材料:
  (1)课本中所有程序的拷贝,它们至少在两台运行不同操作系统的计算机上进行过详尽的测试,所有的代码都符合C99标准。
  (2)覆盖了课程目标、图、程序、关键点和每章小结的PowerPoint材料。PowerPoint材料可自行编辑以适合课堂需要。该机动性允许教师将他们自己的材料补充进课本内容,也允许他们按照他们自己的需要和风格重新安排材料。
  (3)第3版可以使用软件ExamView。这是一种基于对象的测试生成器,允许教师从专门为本书设计的测试题库中创建出纸质的、LAN或基于Web的测试集。使用QuickTest Wizard,可以容易并快速地创建包括判断题和多项选择题的测试试卷,也可以加入与教师自行提供的辅助材料相关的习题。
  学生材料
  学生材料包括对编号为奇数的复习题、练习和问题的解答。也提供了本书使用的程序的拷贝。
  致谢
  本领域中还没有一本书籍能离开许多人的帮助而出版。
  评审
  评审意见的价值如何赞美也不过分。那些站在幕后并从整体纵览全书的评审们的意见的重要性是不可估量的。这里特别感谢所有对3个版本的图书作出评价的人士。
  课程技术人员
  感谢本书的编辑,高级产品经理Alyssa Pratt和高级采编Mary Franz,他们一起制作了本书。感谢本书的质量保障人员,他们怀着愉快的心情对本书的内容和程序进行了两趟审查。要感谢的还有Burt LaFountain、Serge Palladino和Chris Scriver等人士。
  还要感谢GEX的出版服务人员,特别是Sandra Mitchell,他在本书出版过程中呈现了非常高超的组织能力。
  Behrouz A. Forouzan
  Richard F. Gilberg

封底文字

本书根据ACM CS1课程框架讲授程序设计的基本原理,同时讲解C语言的基本结构。本书基于软件工程环境阐述了基本的程序设计概念和基于C的结构化程序设计方法。 本书内容丰富,讲解透彻,可作为高等院校计算机及相关专业程序设计语言等课程的教材和教学参考书。 本书特点: ●和C99标准完全相符,包含了复数算术运算和Unicode的讨论。 ●加强了图形的视觉效果,给出的程序示例可以直接作为编译器的输入。 ●给出了创新的形象化的表示方法,包括大量图形、表格和程序。 ●给出了大量的例子,从代码片段到完整的包含数个函数的程序实现,为学生学习程序设计和实践编程提供了广泛的技术指导。 ●每章结尾包括大量的教学资料,其中有小结、关键术语、要点和常见错误,以及内容丰富的习题集。

作者简介

Behrouz A. Forouzan;Richard F. Gilberg:Behrouz A. Forouzan: Behrouz A. Forouzan 毕业于加州大学艾尔温分校,现在是迪安那大学教授,从事计算机信息系统专业的课程设置。此外,他还是多家公司的系统开发咨询顾问。除本书外,Forouzan还著有多部成功的编程与网络方面的书,包括《TCP/IP Protocol Suite》和《Local Area Networks》等。
Richard F. Gilberg: Richard F. Gilberg 在工业界与教育界有40年计算机科学方面的经验,包括大型应用系统开发、数据库管理、系统测试。他现在是迪安那大学计算机科学教授。

译者简介

黄林鹏 伍建 徐小辉:暂无简介

译者序

计算机和数学被看成是各个学科最重要的工具,编程和算术一样也成为一种基本的技能。对程序员来说,编程就是一种有益的情感流露和发泄的方式。程序语言是程序员间、程序员和机器间交互的媒介。随着程序越来越复杂,程序必须遵循某种准则开发才能更好地被他人、其他程序或机器更好地理解,才能更好地演化为符合某种特定目标的软件。本书就是按照结构化程序设计准则来介绍基于C语言的程序设计方法的。
  本书的目的是在CC2001框架下讲述程序设计的原理。CC2001的前身CC1991是IEEE计算机协会与ACM为了规范和促进大学计算机学科教育于1991年制定的教学体系。随着学科的发展演化,CC2001于2001年发布,CC2001的指导思想是计算机学科的课程应由四个部分即计算机科学、计算机工程、软件工程和信息技术交织组成。作为计算机科学的第一门课程,CS101程序设计基础,其要求是介绍过程式程序设计的基本概念,内容包括数据类型、控制结构、函数、队列、文件、运行机制、测试和调试;讨论计算的历史和社会背景,并对计算机科学作为一门学科进行了概述。但程序设计作为一门基础课程,其扮演的角色与以前略有不同,如软件工程下的第一门计算课程,SE101软件工程和计算导论,要求学生在掌握程序设计之前激发学生的软件工程兴趣,因此建议课程可采取两个并行的流程,一个讲授软件工程问题,另一个讲授程序设计。而本书就是通过C语言来讲述程序设计,并将程序编写和软件工程原理的阐述有机地贯穿在一起,起到了事半功倍的效果。
  本书的另外一个特色是使用的语言和C99标准完全相符,并采用丰富的例子、图示、表格来讲解结构化程序设计的概念。
  本书可作为计算引论、程序设计技术、C语言等课程的教科书,适合大学计算机系一年级学生,网络学院、成人继续教育学院、高等和中等专科院校计算机科学与技术专业的学生及计算机程序设计爱好者阅读。
  本书的翻译工作由黄林鹏负责并与徐小辉、伍建共同完成,其中附录由杨欢翻译,参加翻译的还有王德俊、张仕、王欣、张迎春、许赵云、彭冲、冯志宇,本书由黄林鹏统稿和审校,林海源整理。在此向所有为本书翻译和出版提供帮助的人表示感谢。由于我们水平有限,对翻译中出现的不妥和错误之处敬请读者谅解,并将意见寄lphuang@sjtu.edu.cn,不胜感激。

  译 者
  2008年2月12日

图书目录

译者序
前言

第1章  计算机导论 1
1.1  计算机系统 1
1.1.1  计算机硬件 1
1.1.2  计算机软件 2
1.2  计算环境 3
1.2.1  个人计算环境 3
1.2.2  分时环境 3
1.2.3  客户机/服务器环境 4
1.2.4  分布式计算 4
1.3  计算机语言 4
1.3.1  机器语言 4
1.3.2  符号语言 5
1.3.3  高级语言 6
1.4  创建和运行程序 6
1.4.1  编写和编辑程序 7
1.4.2  编译程序 7
1.4.3  连接程序 7
1.4.4  执行程序 8
1.5  系统开发 8
1.5.1  系统开发生命周期 8
1.5.2  程序开发 9
1.6  软件工程 13
1.7  要点和常见错误 14
1.8  关键术语 14
1.9  习题 15
复习题 15
练习 16
问题 16
第2章  C语言介绍 17
2.1  背景 17
2.2  C程序 18
2.2.1  C语言程序结构 18
2.2.2  第一个C语言程序 19
2.2.3  注释 20
2.2.4  问候程序 21
2.3  标识符 21
2.4  类型 22
2.4.1  void类型 23
2.4.2  整型数据 23
2.4.3  浮点型 24
2.4.4  类型小结 25
2.5  变量 25
2.5.1  变量声明 25
2.5.2  变量初始化 26
2.6  常量 28
2.6.1  常量表示 28
2.6.2  代码常量 30
2.7  输入/输出 32
2.7.1  流 32
2.7.2  输入/输出格式 32
2.8  程序示例 41
2.9  软件工程 47
2.9.1  程序文档 47
2.9.2  数据命名 48
2.9.3  数据隐藏 49
2.10  要点和常见错误 49
2.11  关键术语 50
2.12  习题 51
复习题 51
练习 52
问题 54
项目 54
第3章  C程序结构 56
3.1  表达式 56
3.1.1  基本表达式 57
3.1.2  后缀表达式 57
3.1.3  前缀表达式 58
3.1.4  单目表达式 59
3.1.5  二目表达式 60
3.2  优先级和结合性 64
3.2.1  优先级 64
3.2.2  结合性 65
3.3  副作用 66
3.4  表达式求值 66
3.4.1  不带副作用的表达式 66
3.4.2  带副作用的表达式 67
3.4.3  警告 68
3.5  类型转换 68
3.5.1  隐式类型转换 68
3.5.2  显式类型转换 71
3.6  语句 73
3.6.1  语句类型 73
3.6.2  分号的作用 75
3.6.3  语句和预定义常量 75
3.7  示例程序 75
3.8  软件工程 83
3.8.1  保持简短 83
3.8.2  括号 83
3.8.3  用户交流 83
3.9  要点和常见错误 84
3.10  关键术语 85
3.11  习题 85
复习题 85
练习 86
问题 87
项目 88
第4章  函数 90
4.1  结构化程序设计 90
4.2  C语言函数 91
4.3  用户自定义函数 94
4.3.1  基本函数设计 94
4.3.2  函数定义 98
4.3.3  函数声明 100
4.3.4  函数调用 100
4.3.5  函数示例 101
4.4  函数间通信 107
4.4.1  基本概念 107
4.4.2  C语言实现 108
4.5  标准函数 114
4.5.1  数学函数 115
4.5.2  随机数 117
4.6  作用域 122
4.6.1  全局作用域 123
4.6.2  局部作用域 123
4.7  编程举例—增量式开发 123
4.7.1  首次增量:main和getData 124
4.7.2  第二步增量:add 125
4.7.3  最终增量:打印结果 126
4.8  软件工程 127
4.8.1  结构图 127
4.8.2  结构图的规则和符号 128
4.8.3  函数聚合 130
4.8.4  自顶向下开发 131
4.9  要点和常见错误 132
4.10  关键术语 133
4.11  习题 133
复习题 133
练习 135
问题 138
项目 138
第5章  选择—作出决定 141
5.1  逻辑数据和运算符 141
5.1.1  C中的逻辑数据 141
5.1.2  逻辑操作符 142
5.1.3  计算逻辑表达式 142
5.1.4  比较运算符 144
5.2  两路选择 145
5.2.1  if...else 145
5.2.2  else空语句 146
5.2.3  嵌套的if语句 148
5.2.4  悬空的else问题 149
5.2.5  简化if语句 150
5.2.6  条件表达式 150
5.2.7  两路选择的例子 151
5.3  多路选择 156
5.3.1  switch语句 156
5.3.2  else-if 160
5.4  更多的标准函数 162
5.4.1  标准字符函数 162
5.4.2  分类程序 164
5.4.3  处理主要错误 164
5.5  增量式开发II 165
5.5.1  计算器设计 165
5.5.2  计算器增量设计 165
5.6  软件工程 173
5.6.1  依赖语句 173
5.6.2  负逻辑 174
5.6.3  选择语句的规则 174
5.6.4  选择语句结构图 175
5.7  要点和常见错误 175
5.8  关键术语 176
5.9  习题 177
复习题 177
练习 178
程序 180
项目 181
第6章  循环 186
6.1  循环的概念 186
6.2  先判断和后判断循环 186
6.3  初始化和更新 187
6.3.1  循环初始化 187
6.3.2  循环更新 188
6.4  事件与计数器循环控制 188
6.4.1  事件控制循环 188
6.4.2  计数器控制循环 189
6.4.3  循环对照 189
6.5  C中的循环 189
6.5.1  while循环 189
6.5.2  for循环 193
6.5.3  do...while循环 196
6.5.4  逗号表达式 198
6.6  循环示例 200
6.7  循环相关的其他语句 209
6.8  循环的应用 211
6.8.1  求和 212
6.8.2  幂运算 212
6.8.3  最大和最小 213
6.8.4  查询 214
6.9  递归 217
6.9.1  迭代定义 217
6.9.2  递归定义 217
6.9.3  迭代解法 217
6.9.4  递归解法 218
6.9.5  设计递归函数 218
6.9.6  斐波那契数 220
6.9.7  递归的局限性 222
6.9.8  汉诺塔问题 222
6.9.9  汉诺塔的递归解法 223
6.10  程序设计例子—计算器 225
6.11  软件工程 227
6.11.1  结构图中的循环 227
6.11.2  测定算法效率 228
6.11.3  线性循环 228
6.11.4  对数循环 229
6.11.5  嵌套循环 230
6.11.6  大O表示法 231
6.11.7  标准效率尺度 231
6.12  要点和常见错误 232
6.13  关键术语 233
6.14  习题 233
复习题 233
练习 234
问题 238
项目 240
第7章  文本输入/输出 244
7.1  文件 244
7.1.1  文件名 245
7.1.2  文件信息表 245
7.2  流 245
7.2.1  文本流和二进制流 245
7.2.2  流-文件处理 245
7.2.3  系统创建的流 246
7.3  标准输入/输出函数 246
7.4  格式化输入/输出函数 250
7.4.1  流指针 250
7.4.2  格式控制字符串 251
7.4.3  输入格式(scanf与fscanf) 252
7.4.4  输出格式(printf和fprintf) 259
7.4.5  文件示例程序 264
7.5  字符输入/输出函数 270
7.5.1  终端字符I/O 270
7.5.2  终端和文件字符I/O 271
7.5.3  字符输入/输出示例 272
7.6  软件工程 276
7.6.1  测试文件 276
7.6.2  数据术语 278
7.7  要点和常见错误 279
7.8  关键术语 280
7.9  习题 280
复习题 280
练习 282
问题 283
项目 284
第8章  数组 286
8.1  基本概念 286
8.2  在C语言中使用数组 288
8.2.1  数组声明和定义 289
8.2.2  访问数组元素 289
8.2.3  数组存储 289
8.2.4  数组引用优先级 293
8.2.5  索引边界检测 293
8.3  函数间交互 295
8.3.1  传递单个元素 296
8.3.2  传递整个数组 296
8.4  数组应用 301
8.4.1  频率数组 301
8.4.2  直方图 302
8.4.3  随机数排列 305
8.5  排序 308
8.5.1  选择排序 308
8.5.2  冒泡排序 310
8.5.3  插入排序 312
8.5.4  排序算法测试 314
8.5.5  排序算法比较 314
8.5.6  排序小结 315
8.6  查找 315
8.6.1  顺序查找 316
8.6.2  折半查找 318
8.7  二维数组 321
8.7.1  声明 321
8.7.2  传递二维数组 325
8.8  多维数组 327
8.9  编程示例—计算平均数 329
8.9.1  第一步增量:main 330
8.9.2  第二步增量:获取数据 330
8.9.3  第三步增量:计算行平均数 331
8.9.4  第四步增量:计算列平均数 333
8.9.5  第五步增量:输出表 333
8.10  软件工程 335
8.10.1  排序测试 335
8.10.2  查找测试 336
8.10.3  排序算法分析 336
8.10.4  查找算法分析 338
8.11  要点和常见错误 339
8.12  关键术语 339
8.13  习题 340
复习题 340
练习 341
问题 343
项目 345
第9章  指针 350
9.1  引言 350
9.1.1  指针常量 350
9.1.2  指针值 351
9.1.3  指针变量 352
9.1.4  通过指针访问变量 353
9.1.5  指针声明和定义 354
9.1.6  声明与重定向 355
9.1.7  初始化指针变量 355
9.2  程序间指针交互 360
9.2.1  传递地址 360
9.2.2  返回指针的函数 361
9.3  指向指针的指针 362
9.4  兼容性 364
9.4.1  指针大小兼容 364
9.4.2  间接引用类型兼容 365
9.4.3  间接引用的层次兼容 366
9.5  左值和右值 367
9.6  软件工程 373
9.6.1  质量定义 373
9.6.2  质量因素 374
9.6.3  质量周期 376
9.6.4  软件工程小结 377
9.7  要点和常见错误 377
9.8  关键术语 378
9.9  习题 378
复习题 378
练习 379
问题 382
项目 382
第10章  指针应用 384
10.1  数组和指针 384
10.2  指针运算和数组 386
10.2.1  指针和一维数组 386
10.2.2  指针算术运算 388
10.2.3  指针运算的使用 388
10.2.4  指针和二维数组 390
10.3  将数组传递给函数 391
10.4  存储分配函数 394
10.4.1  存储器使用 394
10.4.2  静态存储分配 395
10.4.3  动态存储分配 395
10.4.4  存储分配函数 395
10.4.5  存储再分配(realloc) 397
10.4.6  释放存储(free) 397
10.5  指针数组 398
10.6  编程应用 398
10.6.1  重返选择排序 398
10.6.2  动态数组 402
10.7  软件工程 406
10.7.1  指针和函数调用 406
10.7.2  指针和数组 407
10.7.3  数组索引可交换性 407
10.7.4  动态存储:理论与实践 407
10.8  要点和常见错误 408
10.9  关键术语 409
10.10  习题 409
复习题 409
练习 410
问题 414
项目 415
第11章  字符串 418
11.1  字符串的概念 418
11.1.1  定长字符串 418
11.1.2  可变长字符串 419
11.2  C语言字符串 419
11.2.1  字符串存储 419
11.2.2  字符串分隔符 420
11.2.3  字符串字面量 420
11.2.4  字符串和字符 420
11.2.5  声明字符串 421
11.2.6  初始化字符串 422
11.2.7  字符串与赋值操作符 422
11.2.8  读写字符串 423
11.3  字符串输入/输出函数 423
11.3.1  格式化的字符串输入/输出 423
11.3.2  字符串输入/输出 429
11.3.3  示例 431
11.4  字符串数组 434
11.5  字符串操作函数 435
11.5.1  字符串长度 435
11.5.2  字符串拷贝 436
11.5.3  字符串的比较 440
11.5.4  字符串连接 442
11.5.5  字符串中的字符 443
11.5.6  在字符串中寻找子串 443
11.5.7  寻找字符集中的字符 444
11.5.8  字符串搜索—指针 444
11.5.9  字符串标志 444
11.5.10  将字符串转换为数字 445
11.5.11  字符串例子 447
11.6  字符串/数据转换 451
11.6.1  字符串到数据的转换 451
11.6.2  数据到字符串的转换 452
11.7  一个编程实例—Morse编码 455
11.8  软件工程 462
11.8.1  程序设计概念 462
11.8.2  信息隐藏 462
11.8.3  内聚性 463
11.8.4  软件工程小结 465
11.9  要点和常见错误 465
11.10  关键术语 466
11.11  习题 466
复习题 466
练习 467
问题 469
项目 470
第12章  枚举、结构及联合类型 472
12.1  类型定义 472
12.2  枚举类型 473
12.2.1  声明枚举类型 473
12.2.2  枚举类型的操作 473
12.2.3  枚举类型的转化 474
12.2.4  初始化枚举常量 475
12.2.5  匿名枚举类型:常量 475
12.2.6  输入和输出操作 476
12.3  结构 477
12.3.1  声明结构类型 477
12.3.2  初始化 478
12.3.3  访问结构 479
12.3.4  结构类型操作 481
12.3.5  复杂结构 485
12.3.6  结构与函数 492
12.3.7  传递整个结构 492
12.3.8  以指针的方式传递结构 495
12.4  联合 497
12.4.1  引用联合 497
12.4.2  初始化 497
12.4.3  联合和结构 498
12.4.4  Internet地址 501
12.5  编程实践 502
12.6  软件工程 510
12.6.1  耦合 510
12.6.2  数据隐藏 512
12.6.3  软件工程小结 512
12.7  要点和常见错误 513
12.8  关键术语 514
12.9  习题 514
复习 514
练习 515
问题 517
项目 519
第13章  二进制输入/输出 521
13.1  文本流与二进制流 521
13.1.1  文本文件和二进制文件 521
13.1.2  文本文件与二进制文件的不同 522
13.1.3  文件的状态 523
13.1.4  打开二进制文件 524
13.1.5  关闭二进制文件 525
13.2  文件的标准库函数 525
13.2.1  块输入/输出函数 525
13.2.2  文件状态函数 528
13.2.3  定位函数 529
13.2.4  系统文件操作 534
13.3  转换文件类型 535
13.3.1  由一个文本文件创建二进制文件 535
13.3.2  由一个二进制文件创建文本文件 538
13.4  文件编程示例 541
13.5  软件工程 547
13.5.1  文件更新 547
13.5.2  顺序文件更新 548
13.5.3  更新程序设计 548
13.5.4  错误更新 549
13.5.5  结构图表更新 550
13.5.6  更新逻辑 550
13.5.7  软件工程小结 551
13.6  要点和常见错误 551
13.7  关键术语 552
13.8  习题 553
复习题 553
练习 554
问题 558
项目 558
第14章  位运算符 561
14.1  确定大小的整数类型 561
14.2  逻辑位运算符 561
14.2.1  按位与运算符 562
14.2.2  按位或运算符 562
14.2.3  按位异或运算符 563
14.2.4  按位取反运算符 564
14.3  移位运算符 566
14.3.1  右移位运算符 566
14.3.2  除2运算 568
14.3.3  左移位运算符 568
14.3.4  乘2运算 569
14.3.5  旋转 569
14.4  掩码 571
14.4.1  创建掩码 571
14.4.2  掩码的使用 572
14.5  软件工程 578
14.5.1  工资单案例研究 578
14.5.2  程序设计步骤 579
14.5.3  设计结构图 579
14.6  要点和常见错误 583
14.7  关键术语 583
14.8  习题 584
复习题 584
练习 584
问题 586
项目 586
第15章  列表 589
15.1  列表的实现 589
15.1.1  数组实现 589
15.1.2  链表实现 589
15.2  一般线性表 591
15.2.1  插入节点 591
15.2.2  删除节点 594
15.2.3  定位线性表中的数据 596
15.2.4  遍历线性表 598
15.2.5  构建线性表 600
15.2.6  构建列表 600
15.2.7  删除节点 601
15.2.8  线性表测试驱动程序 602
15.3  栈 604
15.3.1  栈结构 605
15.3.2  栈算法 606
15.3.3  栈示例 608
15.4  队列 610
15.4.1  队列操作 611
15.4.2  队列的链表实现 611
15.4.3  队列函数 612
15.4.4  队列示例 614
15.5  树 616
15.5.1  树的基本概念 617
15.5.2  术语 617
15.5.3  二叉树 618
15.5.4  二叉查找树 622
15.5.5  二叉查找树示例 624
15.6  图 626
15.7  软件工程 629
15.7.1  原子数据和复合数据 629
15.7.2  数据结构 630
15.7.3  抽象数据类型 630
15.7.4  抽象数据类型模型 631
15.7.5  ADT数据结构 632
15.8  要点和常见错误 632
15.9  关键术语 633
15.10  习题 633
复习题 633
练习 634
问题 637
项目 638
附录A  字符集 639
附录B  关键字 646
附录C  流程图 647
附录D  计数系统 654
附录E  整数和浮点数库 667
附录F  函数库 669
附录G  预处理器命令 677
附录H  命令行参数 689
附录I  void指针和函数指针 691
附录J  存储类和类型限定词 696
附录K  程序开发 704
附录L  理解复杂声明 711

教学资源推荐
作者: [美] 罗伯特·W. 塞巴斯塔(Robert W. Sebesta) 著
作者: 刘海燕 荆涛 主编 王子强 武卉明 杨健康 周睿 编著
参考读物推荐
作者: (美)Henry S. Warren, Jr. 著
作者: (美)Zain Naboulsi; Sara Ford 著
作者: 陈丹丹 李银龙 等编著