C语言程序设计:问题解答和实例解析方法
作者 : [美]H. H. 塔恩(H.H.Tan),T. B. 多拉齐奥(T.B.D'Orazio)[香港]柯兆恒(S. H. Or),玛丽安 M. Y. 周(Marian M. Y. Choy) 著
译者 : 赵岩 译
丛书名 : 计算机科学丛书
出版日期 : 2016-07-28
ISBN : 978-7-111-54334-3
定价 : 79.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 406
开本 : 16
原书名 : C Programming: a Q & A Approach
原出版社: McGraw-Hill
属性分类: 教材
包含CD :
绝版 :
图书简介

本书以C作为工具语言,通过大量实例,详细介绍了基本程序设计的思想和技术。全书语言简练,图示有助于理解,围绕着学生常常关注的问题进行讲解,强调问题的分析和讨论,意在帮助读者认识程序设计的实质,理解从问题到程序的思考过程。
本书适合作为高等院校计算机及相关专业第一门程序设计课程的教材,也可供其他学习C程序设计的读者自学使用。

图书特色

本书是一本优秀的C语言程序设计教材。作者通过问题-解答方式来介绍C语言,内容包括编程基础,变量、算术表示和输入/输出,C语言基础——数学函数和字符文件输入/输出,选择结构和循环,函数,数组,字符串和指针,结构和大型程序设计。书中既详细介绍了C语言程序设计的基础知识,又结合实际应用,给出了应用程序。应用程序包含问题描述、算法、源代码、注释和修改练习等。
本书特色
每一课都从一个示例程序开始,通过了解代码的细节,加深读者对C语言的理解。
以问题-解答方式清晰阐释示例程序,便于读者轻松掌握C语言的要点。
使用大量图片形象而生动地解释编程概念,有助于读者快速理解和掌握C语言编程。
通过应用程序来说明C语言在求解工程问题和计算机科学问题方面的用处。
大部分章后都提供应用练习,便于读者进一步实践和巩固所学知识。

作者简介
H. H. 塔恩(H. H. Tan) 目前供职于Morrison Knudsen 公司。
T. B. 多拉齐奥(T. B. D'Orazio) 目前是旧金山州立大学土木工程专业负责人。
柯兆恒(S. H. Or) 香港中文大学计算机科学与工程系电脑游戏技术中心创始人和项目主管。他于1998年获得香港大学博士学位,讲授程序设计课程20余年。他的研究兴趣是计算机图形学、计算机视觉、多媒体和游戏开发。他是IEEE和ACM会员。
玛丽安 M. Y. 周(Marian M. Y. Choy) 香港大学工程学院教学顾问。她热爱教学并且积极参与教学活动,拥有新南威尔士大学博士学位,研究兴趣是计算机教育、自适应技术和图像处理。

图书前言

新生经常发现阅读计算机语言书很困难,书写本书的目的就是为了解决这个困难。如果能使学生深入到书本中,激发他们的兴趣,并使得他们思考C语言的用法和含义,那么我们就可以把学习的过程变得简单且有趣。为此,我们使用了Q&A的方式。在这个过程中,学生经常问的问题也会激发读者的思考。通过直接并清晰地回答这些问题,我们把读者的注意力集中到C编程中重要的概念上。
我们也观察到很多计算机语言书很少有图。因为可视化的图形在教学中非常有用,所以我们努力使图示既准确又容易理解。对于程序执行的操作,这些图有利于澄清概念,加强学生对概念的理解。特别地,我们用三维的图来描述循环和判断结构,从而让学生可以很快地掌握程序的流程。我们相信这些图是对标准流程图的加强。我们也意识到对于很多学生来说,指针是最困难的部分。指针图示建立在包含变量名字、类型、地址和值的表格的基础之上,并且表格出现在文本解释的前面。本书中,我们使用表格来说明一个内存单元的信息是如何与另一个内存单元的信息联系起来的。
很多书包含大量的代码,但是并没有给出充分的解释,大部分新生不能也不愿意在没有解释的情况下独立地理解哪怕是很简单的代码。本书在代码中引导学生了解操作以及生成代码的过程,目的就是使学生意识到哪些地方需要额外的想法,以及掌握正确细节的重要性。
这种独特的方式已经受到用过本书草稿的学生的热烈欢迎。本书也被推荐给其他学生并询问他们的意见。当和其他书比较时,学生会优先选择我们的书。我们相信你在教学和学习过程中也会发现本书的价值。
本书组织
第1章介绍编程基础,假设学生除了会使用计算机进行简单的文字处理以外,没有其他的计算机知识。第1章介绍了编程语言的概念,描述了硬件、信息在内存中的存储方法、计算机语言、编译器和软件工程。本章的目标是使学生了解计算机的工作方式和软件设计背后的概念。
第2章到第4章讨论了过程语言的基本概念、基本语法和控制结构,也介绍了C库函数和它们的用法。第5章介绍了用户定义函数,强调了模块化和可重用代码的概念,简单介绍了指针,并将它用在一个传递地址的函数中。本章最后,介绍了使用C语言用户定义函数的效果。
第6章关注数值型数组。
第7章描述了字符串和指针。由于字符串使用地址进行管理,这一章也非常适合用来解释如何利用指针修改内存。第8章覆盖了C语言中的结构及其在生成链表、堆栈、队列及二叉树中的用法。另外,本章也介绍了大型程序设计,因为工程问题通常都很大。使用C特性来处理大型程序是公司招聘学生开发商用软件产品时的一项重要考量。
第9章是关于C++语言的介绍。因为已经介绍过C,所以更多地介绍C++中面向对象编程的核心概念。我们用简单的术语介绍了类、封装和多态。这一章有很多演示,简单的语言和丰富的演示为学生提供了很多使用C++基本特性的背景知识。
大部分章节被分为两个部分——课程和应用程序。课程部分学习语法、格式和基本构造,应用程序部分演示课程中教授的知识如何用于解决实际问题,演示了开发的流程,目标是使学生能遵循结构化方法来开发自己的程序。
特点
1)本书使用简单的问答方式,学生会发现这种方式比讲解的方式更加友好、更易于理解。这种方法式下,作者能够发现学生经常问的问题并能简洁地回答这些问题。
2)每一课都以一个样例程序开始:源代码并附有一些指示。学生根据指示观察代码的细节,从而了解C语言。下一步给出输出以及解释。解释环节给出一系列的问答以解释源代码做了什么。
3)应用程序部分演示了C语言如何用于解决工程和计算机科学中的问题。我们详细地解释了它们。例子主要涉及程序设计、软件工程、模块化和生成可重用代码。
4)给出大量的图来演示编程的概念。很多图都是独一无二的,能让学生快速地掌握概念。
5)在应用程序部分描述了四步结构化方法(引入了字符串和更复杂的数据结构后变成了五步结构化方法)。方法包括生成结构流程图和数据流程图。
6)应用程序部分也包括数值方法例子,这些例子用在把编程和数值方法结合起来的课程中。
7)课程部分包含注释代码,以帮助学生理解程序的细节和流程,使学生关注代码并把代码中的重要部分高亮显示。
8)我们意识到学生一般不会主动阅读多页代码,所以应用程序部分的每一段代码都只有2到3页,并有对应的解释。
9)指针的概念很难理解。为了让学生理解指针,可视化图形是非常有用的。盒子中一个指针指向另外一个盒子,这种图是不够的。使用表格和网格状的内存草图,可以降低指针的神秘性。我们发现阅读本书后,学生能够轻松地理解指针的概念。
10)应用程序部分后的练习可以用于实验课。教师可以让学生提前阅读特定的应用程序。上实验课时,可以指导学生做一些改动练习,后续的部分可以作为家庭作业。
11)新生通常会在调试的时候遇到困难,因为他们对这个过程很陌生。新生也会感到很沮丧,因为他们必须要调试自己的第一个程序。为此,我们在第1章介绍了一个详细的调试例子。初学者也发现调试循环是很困难的,本书中关注循环并演示了循环中值是如何变化的。学生将学习如何追踪循环并发现错误。另外,初学者经常会犯的错误也在本书相应的位置指出。
12)每课后面的判断题(有答案)可以让学生快速评价自己对基础知识的掌握程度。
13)每章后面的应用练习可以作为家庭作业。
14)本书中所有的程序都可以从www.mheducation.asia/olc/cprogramming获取。学生可以修改并执行这些程序以理解它们是如何运行的。
15)第9章是有关C++的介绍,不仅讨论了基础知识,阅读完本章后,学生还将学会使用面向对象编程的很多基本功能。
16)很多应用程序介绍了数值方法。
如何使用本书
对于学生
在第1章,你会理解什么可以保存在内存中,编译器如何工作,软件工程的步骤,最重要的是,编写自己的第一个C程序。其他章讨论了C语言编程。章节的课程都以一个简短的介绍开始,指导你关注源代码中一些重要的知识点。然后你可以阅读源代码和其中的注解。你甚至可以运行代码并观察程序的行为。完成这些后,确保你理解本课中主要的概念。之后阅读解释部分并完成判断题和简答题。如果做不好练习,应重新学习本课以消除疑问。
掌握了一章的课程后,开始学习应用程序部分,其目的是演示编写程序的一般过程以及C的实际用处。你会发现,当你写程序的时候会遇到很多应用程序中遇到的问题。在这一部分,关注学习方法论及理解每一个程序的逻辑。记住,编程中逻辑流是非常重要的。一个语句可能语法上正确但逻辑上却是错误的。掌握了每一个应用程序的来龙去脉,会让你在写自己程序的时候更加自信。不要只是读,要尝试每个程序,修改并试验它。它会帮助你掌握在课程中学习过的内容,进而解释程序的不同行为。利用这些知识完成教师布置的编程作业。
对于教师
作为一学期课程,本书的目的是为学生在后续课程中掌握高级编程奠定基础,例如C编程中带有C++的介绍,推荐你按照顺序讲完所有的内容。但是,按照不同的顺序讲解本书也是可以的。例如,课程3.2(单个字符数据)可以在第7章的课程前讲述。同时,如果需要的话,课程8.7(生成头文件)、课程8.8(使用多个源文件及存储类别)、类似函数的宏和条件包含可以在第5章介绍。
你也可以将第7、8和9章的部分课程延后,时间允许再讲解它们。例如,课程7.9(指针符号与数组符号)可以延后到指针的高级话题(第8章的附加材料,指向函数的指针和返回指针的函数,通过www.mheducation.asia/olc/cprogramming获取)之前。
对于试图建立编程基础的一个学期课程,我们推荐你讲解到课程7.8,再加上课程7.10、8.1、8.2、8.3、8.4和8.5。
对于给学生一般的编程体验的短的课程,如果只讲解前6章,学生也会写出有价值且复杂的C程序。
本书提供了丰富的练习,课程部分后有判断题和简答题。学生应该独立完成这些练习。课程后的一些简单程序可以留作作业。一个星期的时间学生足可以完成一个程序。
应用程序部分后面的修改练习可以用于实验课。学生应该在实验之前学习相关的应用程序。实验中,可以指导学生完成修改练习。一些练习比较容易,而另外一些很难,难的可以留作家庭作业。
大部分章末是应用练习。它们是本书中最有挑战性的练习,所以最适合留作家庭作业。根据不同的难度,需要2~4周的时间来完成它们。
另外,本书可以用作ANSI C的参考书,参考表格分散在本书正文中。
教师辅助材料
教师可在网站www.mheducation.asia/olc/cprogramming获得以下补充材料。
解答手册
教学课件
测试库
附加练习
附加阅读材料

上架指导

计算机\程序设计

封底文字

本书是一本优秀的C语言程序设计教材。作者通过问题-解答方式来介绍C语言,内容包括编程基础,变量、算术表示和输入/输出,C语言基础——数学函数和字符文件输入/输出,选择结构和循环,函数,数组,字符串和指针,结构和大型程序设计。书中既详细介绍了C语言程序设计的基础知识,又结合实际应用,给出了应用程序。应用程序包含问题描述、算法、源代码、注释和修改练习等。

本书特色
·每一课都从一个示例程序开始,通过了解代码的细节,可以加深读者对C语言的理解。
·以问题-解答方式清晰阐释示例程序,便于读者轻松掌握C语言的要点。
·使用大量图片形象而生动地解释编程概念,有助于读者快速理解和掌握C语言编程。
·通过应用程序来说明C语言在求解工程问题和计算机科学问题方面的用处。
·大部分章后都提供应用练习,便于读者进一步实践和巩固所学知识。

作者简介

[美]H. H. 塔恩(H.H.Tan),T. B. 多拉齐奥(T.B.D'Orazio)[香港]柯兆恒(S. H. Or),玛丽安 M. Y. 周(Marian M. Y. Choy) 著:H.H. Tan  目前供职于Morrison Knudsen 公司,Timothy D'Orazio目前是旧金山州立大学土木工程专业负责人。
S.H. Or 香港中文大学计算机科学与工程系电脑游戏技术中心创始人和项目主管。他于1998年获得香港大学博士学位,讲授程序设计课程20余年。他的研究兴趣是计算机图形学、计算机视觉、多媒体和游戏开发。他是IEEE和ACM会员。
Marian M.Y. Choy 香港大学工程学院教学顾问。她热爱教学并且积极参与教学活动,拥有新南威尔士大学博士学位,研究兴趣是计算机教育、自适应技术和图像处理。


(设计注意:封底要加影印书小封面!)

译者简介

赵岩 译:暂无简介

译者序


C语言已经诞生了近半个世纪。在飞速发展的计算机领域,它完全称得上是一门古老的语言。虽然古老,但它和它的后继者C++以及Ojbective-C一起形成的C语言家族,依然是目前计算机行业最流行的开发语言之一,尤其在一些要求速度和效率的应用(如操作系统、编译器等)中,始终占据着不可动摇的统治地位。
作为计算机科学与技术相关专业的学生,全面系统地学习C语言是十分必要的。如果不能很好地掌握C语言,将在今后学习操作系统和编译原理时遇到更大的困难。但是不可否认,C语言由于在设计之初并不是一门教学语言,它的设计思想体现了很多底层的支持和对效率的考虑,如指针的概念、字符串的定义和操作、位操作等,这些内容对于刚刚接触计算机编程的学生,无论是学习还是掌握上,都具有一定的难度。
本书作者在长期的C语言教学中发现,作为一本实践性很强的学科,为了能让学生扎实地掌握C语言,必须要提供大量的编程实例,而不是在课堂上过多地讲解理论。通过实例学习编程虽好,但是当学生完成这些实例的时候,他们不可避免地会提出很多的问题。所以本书又将所有实例中经常出现的问题和解答与实例一并给出。通过实例,再配合问答,学生可以快速地掌握C语言中的重要知识点。 通过在大学里的教学实验发现,利用本书作为教材,学生反映学习的难度降低了,同时对C语言的掌握也更加扎实了。
我出版过一本C语言的书籍,也从事过两年的C语言教学工作,所以深知C语言对于计算机专业的重要性以及C语言教学的难度。当我看到这种基于实例和问答方式进行组织的C语言教材时,感觉到本书的翻译和出版将对C语言教学做出一些非常有益的探索和尝试,所以毫不犹豫地接受了翻译的任务。
我在深刻理解全书内容的基础上力求准确,对于发现的笔误和印刷错误进行了更正。在本书的翻译过程中,得到了出版社和家人的支持和帮助,出版社的编辑对译稿提出了很多中肯的意见和建议。在此一并向他们表示感谢!
限于水平,译文中疏漏和错误难免,敬请读者批评指正。如有任何建议,请发送邮件至zhaoyan.hrb@gmail.com。

译者
2016年4月

图书目录

出版者的话
译者序
前言
致谢
第1章 编程基础 1
课程1.1 编程语言 1
1.1.1 汇编语言 1
1.1.2 高级语言 1
课程1.2 软件工程 3
1.2.1 自顶向下模块化设计 3
课程1.3 C语言、ANSI C和C编译器 5
1.3.1 C和ANSI C 5
1.3.2 程序开发 5
课程1.4 利用位表示字符、符号、整型数、实型数、地址和指令 7
1.4.1 字符和符号 7
1.4.2 整型数 8
1.4.3 实型数 9
1.4.4 十六进制和八进制表示 9
课程1.5 关于本书及如何充分利用本书 10
1.5.1 课程 10
1.5.2 应用程序 11
课程1.6 基本结构 12
课程1.7 格式化输出 16
课程1.8 其他转义字符 18
课程1.9 基本调试 20
本章回顾 22
第2章 变量、算术表达式和输入输出 24
课程2.1 变量:命名、声明、赋值和打印值 24
课程2.2 算术运算符和表达式 30
课程2.3 从键盘输入数据 33
课程2.4 常量宏及打印变量值的进一步讨论 37
课程2.5 混合类型的运算、复合赋值、运算符优先级和类型转换 43
本章回顾 52
第3章 C语言基础:数学函数和字符文件输入输出 53
课程3.1 数学库函数 53
课程3.2 单个字符数据 57
课程3.3 从文件读入数据 67
课程3.4 输出到文件 72
应用程序3.1 面积计算——复合运算符和程序开发 74
应用练习 77
本章回顾 79
第4章 初级决策和循环 80
课程4.1 if 控制结构和关系表达式 80
课程4.2 简单if-else控制结构 84
课程4.3 嵌套if-else控制结构 87
课程4.4 逻辑表达式 90
课程4.5 逻辑运算符的优先级 92
课程4.6 switch和if-else-if控制结构 96
课程4.7 while 循环(1) 102
课程4.8 while循环(2) 105
课程4.9 do-while循环 107
课程4.10 简单for循环 109
课程4.11 嵌套for循环 112
应用程序4.1 梁交叉——if-else控制结构 116
应用程序4.2 面积计算——for循环 118
应用程序4.3 温度单位转换——for循环 120
应用程序4.4 温度单位转换——循环和if-else控制结构 121
应用程序4.5 仿真 123
应用程序4.6 工程经济学——嵌套for循环 124
应用程序4.7 解二次方程——if-else控制结构(数值方法例子) 126
应用练习 128
本章回顾 131
第5章 函数 132
课程5.1 不返回值的函数 134
课程5.2 返回一个值的函数 142
课程5.3 作用域和传值给函数的机制 146
课程5.4 返回多个值的函数 151
课程5.5 从函数返回多个值的
机制——地址和指针变量 153
应用程序5.1 使用带有复杂循环的函数处理网格(逻辑例子) 159
应用程序5.2 模块化程序设计:平行四边形面积和平行六面体体积(数值方法例子) 164
应用练习 167
本章回顾 172
第6章 数值数组 173
课程6.1 一维数组和打印数组元素介绍 174
课程6.2 数组初始化 178
课程6.3 基本数组输入输出 181
课程6.4 多维数组 185
课程6.5 函数和数组 192
课程6.6 冒泡排序和最大交换排序 197
应用程序6.1 将16个1位加法器组成1个16位加法器 202
应用程序6.2 浪高的平均值和中位数(数值方法例子) 205
应用程序6.3 矩阵–向量乘法(数值方法例子) 209
应用程序6.4 搜索和文件压缩 212
应用练习 215
本章回顾 219
第7章 字符串和指针 220
课程7.1 声明、初始化和输出字符串及理解内存布局 222
课程7.2 确定字符串和字符信息及使用printf 229
课程7.3 二维字符数组 234
课程7.4 从键盘和文件读入字符串 238
课程7.5 指针变量与数组变量 245
课程7.6 在声明中初始化 251
课程7.7 将字符串传入用户自定义函数 256
课程7.8 标准字符串函数 261
课程7.9 指针符号与数组符号 272
课程7.10 动态内存分配 279
应用程序7.1 管流速、检查输入数据及模块化设计 285
应用程序7.2 地震轶事报告分析、字符串操作和动态内存分配 294
应用练习 305
本章回顾 308
第8章 结构和大型程序设计 309
课程8.1 结构 310
课程8.2 结构成员 316
课程8.3 指向结构的指针 318
课程8.4 结构和函数 321
课程8.5 结构数组 322
课程8.6 带一个递归调用的函数 324
课程8.7 生成头文件 329
课程8.8 使用多个源文件及存储类别 331
课程8.9 位操作 334
应用程序8.1 排序——快速排序算法 342
本章回顾 350
第9章 C++介绍 351
课程9.1 C++注释和基本输入输出流 351
课程9.2 格式操纵符及格式化输出 354
课程9.3 函数重载 357
课程9.4 默认函数参数 360
课程9.5 内联函数和变量声明的位置 363
课程9.6 C++类和只有数据成员的对象 365
课程9.7 带有数据和函数成员的类及封装 369
课程9.8 构造函数和析构函数 375
课程9.9 继承 379
应用程序9.1 电子电路 385
应用练习 389
附录A ASCII码 391
附录B ASCII码描述 392

教学资源推荐
作者: Patrick Henry Winston, Sundar Narasimhan
作者: 王瑞民 卢红星 主编 姬波 陈静 朱真峰 柳宏川 参编
作者: Brian W.Kernighan,Dennis M.Ritchie
作者: [美] 丹尼尔·卡斯沃姆(Daniel Kusswurm) 著
参考读物推荐
作者: 马延辉 陈书美 雷葆华 著
作者: 郝亦非 编著
作者: (美)Vlada Matena Beth Stearns