出版时间:2010-3 出版社:人民邮电出版社 作者:Jeri R.Hanly,Elliot B.Koffman 页数:572 译者:潘蓉,孟广兰,郑海红,万波
Tag标签:无
前言
本书教给读者怎样用训练有素的方法来解决问题,并应用广为接受的软件工程方法将程序解决方案设计为内聚的、可读的、可复用的模块。本书将ANSIC的一个子集作为这些模块的实现工具进行介绍,ANSIC是一种标准化的、在行业中广泛使用的编程语言,功能强大,可移植性好。本书可以用于程序设计方法的第一门课程,因为它不要求计算机和程序设计的预备知识;此外,书中选择了大量实例研究和练习,教师完全可以用本书为计算机科学专业或其他专业的学生开设一门导论性的C语言程序设计课程。本版的更新本版中增加了新的第0章,这一章向刚入门的学生介绍了计算机领域的构成和各方向的发展机会。我们希望这一章引导学生展望未来世界,激励他们认真考虑选修计算机方向。另外,第1章中硬件方面的内容已经有了重大的更新,涵盖了自上一版以来的技术最新发展。最后,我还修订和增强了实例研究和章末项目中的许多地方,以便给读者一个全新的感受。用C来教授程序开发本书有两个目标,讲授程序设计以及讲授c,这在某些人看来可能是矛盾的。很多人认为应该先用其他更加友好的语言学习编程基础之后再学习C语言。c语言之所以被认为非常难,可以追溯到它的历史。C语言是作为编写UNIX操作系统的工具而设计的,它最初的使用者就是理解操作系统和底层机器复杂性的程序员,这些使用者认为在其程序中利用这些底层知识很自然。所以,许多讲授c语言的教材展示给学生的程序示例都需要理解机器概念就不足为奇了,尽管这些概念并没有出现在标准的导论性程序设计课程的大纲中。本书之所以能既讲授程序开发的正确方法又讲授ANSIC语言,是因为我们选择前者作为最主要的目标。有人可能会担心这种选择会弱化对ANSIC的阐述。事实正相反,我们发现将程序设计的概念和这些概念在C中的实现相结合,能够清晰地展示C作为一种高级编程语言所具备的威力,而这一点在那些以介绍ANSIC所有内容为主的教科书中往往是很模糊的。虽然与讨论C语言特征相比我们更强调程序设计的方法,但本书仍然全面讲述了C的基本结构。指针与本书的组织书中C语言各主题出现的顺序是按照我们理解的初级编程者的需要确定的,而不是由C语言的结构决定的。读者会惊奇地发现没有标题为“指针”的章节。这是因为我们将C当作一种高级语言来讨论,而并不是忽视了指针在C语言中的重要作用。其他高级语言在输出参数和数组方面具有独立的语言结构,但c语言将这些概念包装在它的指针概念中,这明显增加了学习的难度。本书在涉及的地方分散地讨论指针,从而简化了学习过程,使得学生能够每次吸收一点指针用法的精髓。这种方法便于用传统的高级语言术语(输出参数、数组、数组下标和字符串)来表示基本概念,方便了没有汇编语言背景的学生掌握指针的多种用法。
内容概要
本书是C语言的经典教材。它不仅深入浅出地讲述了实际开发中最需要的C语言基础知识,还充分介绍了动态数据结构和多进程等高级内容,而且同时阐述了程序设计思想。本书着眼于提高读者的问题解决能力和实际编程能力,使其初步掌握当前软件行业公认的程序设计风格和编程实践。书中对指针的讲解通俗易懂,降低了这一难点的学习门槛。此外,本书配有各种层次的习题和示例,而且每一章都有一个或多个来自实际生活的实例研究。 本书适合作为计算机科学等专业本科生C语言程序设计课程的教材,对已有一定经验的技术人员也是不可多得的参考书。
作者简介
作者:(美国)汉利(Jeri R.Hanly) (美国)科夫曼(Elliot B.Koffman) 译者:潘蓉 郑海红 孟广兰 等Jeri R.Hanly世界知名的计算机科学教育家。曾多年任教于怀俄明大学和霍华德大学计算机科学系。她出版过多部著作,并被译为多种文字,其读者遍及全世界。Elliot B.Koffman美国一流的计算机科学教育家。坦普尔大学计算机和信息科学系教授,有近40年的教学经验。他曾经担任.ACM’task Force的主席。已出版著作数十部,其中包括多种非常成功的编程语言教材。译者简介:潘蓉,西安电子科技大学计算机学院讲师、博士。研究方向为图形图像处理、数字水印技术等,主要教授面向对象程序设计和网络应用程序设计等课程,在核心期刊及会议上已发表100余篇论文。郑海红,西安电子科技大学计算机学院副教授、博士。研究方向为计算机图形图像处理,曾参与武器装备预研基金、陕西省自然科学基金等项目,并在核心期刊、国际会议上发表论文10余篇。承担的教学课程有离散数学、人工智能等。孟广兰,西安电子科技大学人文学院讲师。研究方向为外国语言学与应用语言学,对科技英语写作和翻译有较深入的研究。万波,西安电子科技大学计算机学院副教授、博士。研究方向为计算机系统结构、图形图像处理,曾参与及主持多项武器装备预研基金、陕西省自然科学基金等项目。目前为计算机学院程序设计课程组组长,承担的教学课程有图形学、Java程序设计、C++程序设计、网络应用程序设计等,其中c++程序设计是陕西省精品课程。
书籍目录
第0章 计算机科学的职业之路 引言 1.1 为什么选择计算机科学领域 1.1.1 将计算机科学作为专业的理由 1.1.2 计算机科学家的特质 1.2 大学经历:可选的计算机学科和专业 1.2.1 计算机科学 1.2.2 计算机工程 1.2.3 信息系统 1.2.4 信息技术 1.2.5 软件工程 1.2.6 交叉学科 1.3 就业机会 1.3.1 美国和全世界的需求 1.3.2 非代表性群体的需求 1.3.3 新职业持续出现 第1章 计算机与程序设计概述 1.1 电子计算机的过去和现在 1.2 计算机硬件 1.2.1 存储器 1.2.2 中央处理器 1.2.3 输入/输出设备 1.2.4 计算机网络 1.3 计算机软件 1.3.1 操作系统 1.3.2 应用软件 1.3.3 计算机语言 1.3.4 执行程序 1.4 软件开发方法 1.4.1 软件开发方法 1.4.2 注意:失败是编程过程的一部分 1.5 应用软件开发方法 实例研究 英里到公里的转换 复习 快速测试 快速测试答案 复习题 第2章 C概述 2.1 C语言要素 2.1.1 预处理指令 2.1.2 预处理指令的语法展示 2.1.3 main函数 2.1.4 保留字 2.1.5 标准标识符 2.1.6 用户定义的标识符 2.1.7 大写字母和小写字母 2.1.8 程序风格之选择标识符名称 2.2 变量声明和数据类型 2.2.1 变量声明 2.2.2 数据类型 2.3 可执行语句 2.3.1 内存中的程序 2.3.2 赋值语句 2.3.3 输入/输出操作和函数 2.3.4 printf函数 2.3.5 scanf函数 2.3.6 return语句 2.4 C程序的一般形式 2.4.1 程序风格之程序中的空格 2.4.2 程序的注释 2.4.3 程序风格之使用注释 2.5 算术表达式 2.5.1 运算符/和% 2.5.2 表达式的数据类型 2.5.3 混合类型赋值语句 2.5.4 强制类型转换 2.5.5 具有多个运算符的表达式 2.5.6 用C语言编写数学公式 实例研究 超市硬币处理机 2.6 在程序输出中格式化数值 2.6.1 格式化int型值 2.6.2 格式化double型值 2.6.3 程序风格之消除前导空白 2.7 交互模式、批处理模式和数据文件 2.7.1 输入重定向 2.7.2 程序风格之回显与提示符 2.7.3 输出重定向 2.7.4 程序控制的输入和输出文件 2.8 常见编程错误 2.8.1 语法错误 2.8.2 运行时错误 2.8.3 未检测到的错误 2.8.4 逻辑错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第3章 函数的自顶向下设计 3.1 利用已有信息编程 实例研究 求圆的面积和周长 实例研究 计算一批垫圈的重量 3.2 库函数 3.2.1 预定义函数和代码复用 3.2.2 使用灰色区分新结构 3.2.3 C库函数 3.2.4 本节目标 3.3 自顶向下设计和结构图 实例研究 画简单的图形 3.4 无参函数 3.4.1 函数原型 3.4.2 函数定义 3.4.3 程序中函数的位置 3.4.4 程序风格之在含有函数的程序中使用注释 3.4.5 函数子程序和主函数的执行顺序 3.4.6 使用函数子程序的优点 3.4.7 显示用户指令 3.5 带输入参数的函数 3.5.1 带输入参数的void函数 3.5.2 带输入参数和单一结果的函数 3.5.3 程序风格之函数接口注释 3.5.4 带多个参数的函数 3.5.5 参数表一致性 3.5.6 函数数据区 3.5.7 使用驱动测试函数 3.6 常见编程错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第4章 选择结构:if语句和switch语句 4.1 控制结构 4.2 条件 4.2.1 关系运算符和判等运算符 4.2.2 逻辑运算符 4.2.3 运算符优先级 4.2.4 短路求值 4.2.5 用C语言表示条件 4.2.6 比较字符 4.2.7 逻辑赋值 4.2.8 条件取反 4.3 if语句 4.3.1 有两个选项的if语句 4.3.2 只有一个选项的if语句 4.3.3 比较一个选项的if语句和两个选项的if语句 4.3.4 程序风格之if语句的格式 4.4 具有复合语句的if语句 4.4.1 程序风格之编写具有复合语句的if语句 4.4.2 跟踪if语句 4.5 算法中的决策步骤 实例研究 水费问题 4.5.1 程序风格之在函数中使用一致的名称 4.5.2 程序风格之内聚函数 4.5.3 程序风格之使用常量宏来增强可读性和易维护性 4.6 解决更多问题 4.6.1 结构图中的数据流信息 4.6.2 使用函数子程序修改程序 实例研究 具有节约需求的水费问题 4.7 嵌套if语句和多选项决策 4.7.1 比较嵌套if和if序列 4.7.2 嵌套if的多选项决策形式 4.7.3 多选项决策中条件的顺序 4.7.4 程序风格之确认变量的值 4.7.5 具有多个变量的嵌套if语句 4.8 switch语句 4.9 常见编程错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第5章 重复和循环语句 5.1 程序中的重复 5.2 计数循环和while语句 5.3 在循环中计算和或者乘积 5.3.1 程序风格之编写通用循环 5.3.2 计算一列数的乘积 5.3.3 复合赋值运算符 5.4 for语句 5.4.1 程序风格之格式化for语句 5.4.2 自增和自减运算符 5.4.3 步长非1的自增和自减 5.4.4 显示值构成的表格 5.5 条件循环 5.6 循环设计 5.6.1 标记控制循环 5.6.2 使用for语句实现标记循环 5.6.3 文件结束控制循环 5.6.4 错误数据上的无限循环 5.7 嵌套循环 5.8 do-while语句和标志控制循环 5.9 问题求解示例 实例研究 太阳能加热房的采暖面积 5.10 如何调试和测试程序 5.10.1 使用调试器程序 5.10.2 不使用调试器进行调试 5.10.3 循环次数差1的错误 5.10.4 测试 5.11 常见编程错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第6章 模块化编程 6.1 带简单输出参数的函数 6.2 带输入输出参数函数的多次调用 6.3 名字的作用域 6.4 输出形参作为实参变量 6.5 由多个函数构成的程序 实例研究 简分数的算术运算 6.6 程序系统的调试与测试 6.7 常见编程错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第7章 简单数据类型 7.1 数值类型的表示与转换 7.1.1 数值类型的差异 7.1.2 数值的不精确性 7.1.3 数据类型的自动转换 7.1.4 数据类型的显式转换 7.2 字符类型的表示与转换 7.3 枚举类型 7.4 迭代近似 实例研究 求根的二分方法 7.5 常见编程错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第8章 数组 8.1 声明和引用数组 8.2 数组下标 8.3 使用循环顺序存取 8.3.1 使用数组进行统计计算 8.3.2 程序风格之使用循环控制变量作为数组下标 8.4 将数组元素作为函数参数使用 8.5 数组参数 8.5.1 形参数组 8.5.2 和形参数组对应的实参 8.5.3 数组作为输入参数 8.5.4 返回数组结果 8.5.5 部分填充数组 8.5.6 栈 8.6 数组搜索和排序 8.6.1 数组搜索 8.6.2 数组排序 8.7 多维数组 8.7.1 多维数组的初始化 8.7.2 多维数组 8.8 数组处理示例 实例研究 医院收入汇总 8.9 常见编程错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第9章 字符串 9.1 字符串基础 9.1.1 声明并初始化字符串变量 9.1.2 字符串数组 9.1.3 使用printf和scanf进行输入/输出 9.2 字符串库函数:赋值和子串 9.2.1 字符串赋值 9.2.2 子串 9.3 较长的字符串:拼接和整行输入 9.3.1 拼接 9.3.2 字符和字符串的区别 9.3.3 扫描一个完整的行 9.4 字符串比较 9.5 指针数组 9.6 字符操作 9.6.1 字符输入/输出 9.6.2 字符分析和转换 9.7 字符串到数值和数值到字符串的转换.290 9.8 字符串处理示例 实例研究 文本编辑器 9.9 常见编程错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第10章 递归 10.1 递归的本质 10.2 跟踪递归函数 10.2.1 带返回值的递归函数的跟踪 10.2.2 void类型递归函数的跟踪 10.2.3 参数与局部变量栈 10.2.4 C中参数栈的实现 10.2.5 何时、如何跟踪递归函数 10.3 递归数学函数 10.4 带数组和字符串参数的递归函数 实例研究 找出字符串中的大写字母 实例研究 递归选择排序 10.5 用递归解决问题 实例研究 集合运算 10.6 递归的经典实例研究:汉诺塔 10.7 常见编程错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第11章 结构与联合类型 11.1 用户自定义结构类型 11.1.1 结构类型定义 11.1.2 操作结构化数据对象的单个成员 11.1.3 运算符优先级回顾 11.1.4 操作结构整体 11.1.5 程序风格之类型命名约定 11.2 结构类型数据作为输入/输出参数 11.3 返回值为结构类型的函数 11.4 用结构类型解决问题 实例研究 用于复数的用户自定义类型 11.5 并行数组和结构的数组 11.5.1 并行数组 11.5.2 结构数组的声明 实例研究 通用计量转换 11.6 联合类型(可选) 11.7 常见编程错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第12章 文本文件和二进制文件的处理 12.1 输入/输出文件:回顾与进一步研究 12.1.1 键盘和屏幕作为文本流 12.1.2 换行与EOF 12.1.3 转义序列 12.1.4 用printf实现格式化输出 12.1.5 文件指针变量 12.1.6 获取文件指针参数的函数 12.1.7 关闭文件 12.2 二进制文件 12.3 数据库查询 实例研究 数据库查询 12.4 常见编程错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第13章 大型程序设计 13.1 使用抽象处理复杂问题 13.1.1 过程抽象 13.1.2 数据抽象 13.1.3 信息隐藏 13.1.4 可复用代码 13.2 个人库:头文件 13.2.1 头文件 13.2.2 头文件设计的忠告 13.3 个人库:实现文件 13.4 存储类型 13.4.1 全局变量 13.4.2 static和register存储类型 13.5 库中包含函数的修改 13.6 条件编译 13.7 函数main的参数 13.8 定义带参数的宏 13.8.1 在宏体中使用括号 13.8.2 在两行以上扩展宏 13.9 常见编程错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第14章 动态数据结构 14.1 指针 14.1.1 作为函数参数的指针 14.1.2 表示数组和字符串的指针 14.1.3 指向结构的指针 14.1.4 指针使用的小结 14.2 动态内存分配 14.2.1 访问动态分配的结构成员 14.2.2 使用calloc动态分配数组 14.2.3 返回堆单元 14.3 链表 14.3.1 带指针成员的结构 14.3.2 连接结点 14.3.3 链表的优点 14.4 链表运算符 14.4.1 遍历链表 14.4.2 获得输入表 14.4.3 在表中查询目标 14.4.4 避免跟踪NULL指针 14.5 用链表表示栈 14.6 用链表表示队列 14.7 有序表 实例研究 维护一个整数有序表 14.8 二叉树 14.8.1 二叉查找树 14.8.2 搜索二叉查找树 14.8.3 建立二叉查找树 14.8.4 显示二叉查找树 14.9 常见编程错误 复习 快速测试 快速测试答案 复习题 程序设计项目 第15章 使用进程和线程的多进程 15.1 多任务 15.1.1 线性程序设计和并行程序设计 15.1.2 分时多任务 15.1.3 抢占式多任务 15.1.4 时间片和并行 15.1.5 并发程序设计 15.2 进程 15.2.1 进程创建 15.2.2 进程等待 15.2.3 从进程中执行另一个程序 15.3 进程间通信和管道 15.3.1 管道 15.3.2 管道的用法 15.3.3 使用标准输入的进程间通信 15.3.4 父进程和子进程间通信举例 15.4 线程 15.4.1 线程的创建 15.4.2 线程的同步 15.4.3 互斥锁 15.4.4 死锁 15.5 线程举例 实例研究 生产者/消费者模型 15.6 常见编程错误 复习 C语言结构的复习 快速测试 快速测试答案 复习题 程序设计项目 第16章 关于C++ 16.1 C++控制结构、输入/输出以及函数 16.1.1 使用名字空间std 16.1.2 C++标准输入/输出 16.1.3 引用参数 16.1.4 输出格式化 16.2 C++对面向对象编程的支持 16.2.1 头文件complexh 16.2.2 类名和构造函数 16.2.3 成员函数和运算符 16.2.4 实现文件complex.cpp 16.2.5 数据成员 16.2.6 输入/输出运算符重载 复习 快速测试 快速测试答案 复习题 程序设计项目 附录A 关于指针的更多信息 附录B ANSI C标准库 附录C C运算符 附录D 字符集 附录E ANSI C保留字 附录F ANSI C结构参照表 词汇表 索引
章节摘录
插图:第0章 计算机科学的职业之路引言为了选择一门课程并最终选定希望从事的职业,需要思考很多重要的问题。为什么要选择这一领域?我们对此是否擅长?在完成学业时能否就业?是否喜欢这样的工作?本章将就这些问题为那些想在计算机科学或相关领域获得学位的人们给出一些建议。0.1 为什么选择计算机科学领域0.1.1 将计算机科学作为专业的理由我们所做的每一件事情几乎都受计算机的影响,如今被称为“千禧世代”的新一代大学生并不会对此感到惊讶。他们的成长伴随着计算机、互联网、即时通信和电玩,他们推崇新技术,并期望它能做各种奇妙的事情。千禧世代1982年以后出生的人,据说很自信,爱好社交并具有团队精神,对成功充满了自豪感,喜欢利用分析技巧作出决策,并坚决追求自我安全、稳定和平衡。但是,上一代人并不乐意接受技术,他们在解决问题时并不总是首先想到技术。很多在职的人抵制技术带来的改变,他们通常让年轻员工接管技术问题,并依靠他们对导致重要结果的事情作出选择。不同时代的人之间的这种差异为那些聪明且专注的学生选择计算机科学或相关领域作为专业创造了很好的环境。计算机行业是经济增长最快的行业之一,而且在将来有望继续快速增长。一个公司要想有竞争力,必须不断雇用训练有素的专业人员,不仅能在现阶段生产出高质量的产品,也可为将来具有创造性的科学和工程进步作好准备。从事计算机行业的人有广泛的领域选择空间,其中有很多有趣并具挑战性的问题需要解决。获得计算机科学学位的人,除了首选从事商务和通信领域的工作外,还能解决生活中方方面面的问题。快速浏览技术文章会发现这么一些领域:为全国选举或州选举而开发的电子投票系统;利用无线设备信号统计车辆和行人的行进时间,为合理控制红绿灯或管理施工街区作最优决策;通过超级计算机运行的“虚拟地震”,研究如何利用真实地理位置和破坏场景的3D模型的预警系统。计算机专家在医学领域从事的一些研究包括:通过模拟大脑的刺激模式来了解人脑是如何工作的,这主要是为了帮助那些患有孤独症或类似妄想型精神分裂症的人;为身体受伤的人定制大量的辅助设备,包括可编程的机器人假肢和数字“眼”等;从移植的起搏器上搜集信息,以便在出现危险时及时作出决策;通过实时分析人脸,开发能够识别人类感情状态的计算机系统;开发仅凭人的手势驱动计算机来操纵实际对象的人机界面。
媒体关注与评论
“我连续几个学期使用本书作为教材,教授程序设计课程。学生都认为它可读性很强。……我认为本书极好地介绍了如何编程以及如何使用C语言。……我强烈推荐这本教材,无论是课堂教学还是个人自学,都十分合适。” ——Dan Grecu,伍斯特理工学院“如果你想学习编程,用C作为实现语言,那么本书将是最好的选择之一。” ——Francis Glassborow,ACCU(C/C++用户协会)前主席
编辑推荐
《C语言详解(第6版)》是C语言经典教程,历经多次改版,为世界各国众多大学采用,迄今为止全球已有近10万读者通过《C语言详解(第6版)》掌握了C语言。《C语言详解(第6版)》的最大特色是程序设计思想的介绍和C语言语法的讲述并重,不仅细致入微地讲述C语言知识,而且更多地强调学生解决实际问题和动手编程的能力。与国内众多C语言教材相比,书中突出了良好的程序风格和软件工程概念的重要性,并力求使学生比较早地建立软件开发的大局观。书中将教学难点——指针分散在多个章节分别讨论,使学生能够从实际运用中逐渐吸收指针用法的精髓,充分体现了作者丰富的教学经验。此外,《C语言详解(第6版)》的内容也非常新颖,讲授了用抽象管理复杂性、多进程和多线程、动态数据结构等知识。大量的案例、示例、习题和程序设计项目,以及常见编程错误提示,使《C语言详解(第6版)》成为课堂教学和自学参考皆宜的理想学习工具。《C语言详解(第6版)》为最新的第6版,其中为初学者新增加了第0章,介绍了计算领域的职业发展机会。此外,第1章中硬件方面的内容根据当前技术发展有了重大的更新。最后,《C语言详解(第6版)》对实例研究和章末项目中的许多地方也做了大幅修订,使内容与时俱进,给读者全新的感受。提高解题能力,掌握编程艺术,应用软件工程思想和方法,养成良好的编程风格。
图书封面
图书标签Tags
无
评论、评分、阅读与下载