C语言科学与艺术
作 者: (美)罗伯茨(Roberts,E.S) 著,翁惠玉 等译
出 版 社: 机械工业出版社
出版时间: 2005-3-1 字 数: 版 次: 1 页 数: 498 印刷时间: 2005-3-1 开 本: 印 次: 纸 张: 胶版纸 I S B N : 9787111159711 包 装: 平装
当当购买:http://union.语言的科学和艺术
编辑推荐
本书是一本计算机科学的经典教材,强调软件工程和优秀的程序设计风格。此外,学生还可以从书中学习到ANSI C的基础知识,这些内容已经成为计算机行业的标准。作者的写作风格使得书中深奥的概念变得易于理解和引人入胜。
本书集中讨论库和抽象的用法,这是当代程序设计技术中最基本的知识。作者使用库来隐藏C语言的复杂性,更加突出主题,使学生可以较好地掌握每一个主题的精髓。然后,进一步给出每个库的底层实现,较好地展示了自身的抽象威力。
本书从基础开始讲起,是C语言的入门教材。本书已经被美国斯坦福大学、哥伦比亚大学等多所大学和学院成功采用,在国内已被上海交通大学采用,是一本适合高等院校计算机及相关专业使用的优秀教材。
译者序
随着计算机产业的迅速发展,对计算机专业人才的需求也日益迫切。而程序设计是所有计算机专业人才必备的基础知识和技能。俗话说“万事开头难”,如何使学生顺利地进入程序设计的大门,如何熟悉和精通程序设计,也是计算机专业教学的难题。
本书是一本计算机科学的经典教材,是作者二十多年来从事计算机教学的经验的总结,它提供了丰富的计算机科学的基础知识和程序设计的专门知识。本书具有鲜明的特色。首先,用ANSI C作为教学语言。C语言是目前使用最广泛的教学语言,选用C语言可以使学生毕业后很快就能投入实际工作,并为学习C++和面向对象的语言铺平了道路。第二,采用了基于库函数的方法,强调抽象的原则。本书相当详细地介绍了库和模块化开发,介绍了如何通过库隐藏程序的复杂性,这些是现代程序设计的基本概念。第三,在程序设计中最重要的是从陈述问题过渡到解决问题,本书以通俗易懂的方式讲述了这一过程,使学生能轻松而有趣地学习程序设计。
程序设计既是一门科学,也是一门艺术。学习良好的程序设计需要掌握很多知识,而不只是记住一组规则。必须通过实践以及阅读其他程序来学习。本书包括大量的程序实例,这些实例说明了如何用C语句建立一个完整的程序,如何培养良好的程序设计风格。每章都用丰富的复习题作为知识点的总结,并包含大量的程序设计练习让读者自己动手做更多的程序设计项目。
正是因为本书具有的上述优点,我们认为把本书译成中文能让更多的学生从中获益,从而打下扎实的程序设计的基础。
参加本书翻译工作的有翁惠玉、张冬茉、杨鑫和蒋文新,由翁惠玉对全书进行审校。本书也是上海交通大学《程序设计》课程所选用的教材。在翻译过程中得到了整个课程小组十多位教师的大力帮助,在此表示衷心的感谢。由于时间和水平的限制,书中难免有错漏之处,敬请读者指正。
内容简介
本书是计算机科学的经典教材,介绍了计算机科学的基础知识和程序设计的专门知识。本书以介绍ANSI C为主线,不仅涵盖C语言的基本知识,而且介绍了软件工程技术以及如何应用良好的程序设计风格进行开发等内容。本书采用了库函数的方法,强调抽象的原则,详细阐述了库和模块化开发。此外,本书还利用大量实例讲述解决问题的全过程,对开发过程中常见的错误也给出了解决和避免的方法。本书既可作为高等院校计算机科学入门课程及C语言入门课程的教材,也是C语言开发人员的极佳参考书。
作者简介
Eric S. Roberts,美国斯坦福大学计算机科学系教授,主管教学的系副主任。他由于教学改革的成就获得Charles Simonyi荣誉教授。Roberts于1980年获哈佛大学应用数学博士学位,其后他创建了威尔斯利学院的计算机科学系,并担任系主任。后来,他在加州Palo Alto的DEC公司系统研究中心工作了5年。
目录
第1章 概述
1.1 计算简史
1.2 什么是计算机科学
1.3 计算机硬件简介
1.3.1 CPU
1.3.2 内存
1.3.3 辅助存储器
1.3.4 I/O设备
1.4 算法
1.5 程序设计语言和编译
1.6 编程错误和调试
1.7 软件维护
1.8 软件工程的重要性
1.9 关于C程序设计语言的一些思考
小结
复习题
第一部分 C语言程序设计基础
第2章 通过例子学习
2.1 “Hello world”程序
2.1.1 注释
2.1.2 库包含
2.1.3 主程序
2.2 两个数的加法程序
2.2.1 输入阶段
2.2.2 计算阶段
2.2.3 输出阶段
2.3 有关程序设计过程的观点
2.4 数据类型
2.4.1 浮点型数据
2.4.2 字符串类型的数据
2.5 表达式
2.5.1 常量
2.5.2 变量
2.5.3 赋值语句
2.5.4 运算符和操作数
2.5.5 整型数和浮点型数的结合
2.5.6 整数除法和求余运算符
2.5.7 优先级
2.5.8 优先级法则的应用
2.5.9 类型转换
小结
复习题
程序设计练习
第3章 问题求解
3.1 程序设计习语和范例
3.1.1 复合赋值习语
3.1.2 自增和自减运算符
3.2 解决规模稍大的问题
3.3 控制语句
3.3.1 重复N次习语
3.3.2 迭代和循环
3.3.3 下标变量
3.3.4 初始化的重要性
3.3.5 读入-直到-标志习语
3.3.6 创造一个更实用的应用程序
3.3.7 条件执行和if语句
3.4 一个调试练习
3.5 格式化输出
3.5.1 printf的格式码
3.5.2 控制空格、对齐方式和精度
3.6 构思一个程序
3.6.1 程序设计风格
3.6.2 设计时考虑将来的修改
3.6.3 #define机制
小结
复习题
程序设计练习
第4章 语句形式
4.1 简单语句
4.1.1 赋值的嵌套
4.1.2 多重赋值
4.1.3 程序块
4.2 控制语句
4.3 布尔型数据
4.3.1 关系运算符
4.3.2 逻辑运算符
4.3.3 简化求值
4.3.4 标志
4.3.5 避免布尔表达式中的冗余
4.3.6 布尔计算示例
4.4 if语句
4.4.1 单行if语句
4.4.2 多行if语句
4.4.3 if/else语句
4.4.4 级联if语句
4.4.5 ?: 运算符(可选的)
4.5 switch语句
4.6 while语句
4.6.1 while循环的应用
4.6.2 无限循环
4.6.3 解决半途退出问题
4.7 for语句
4.7.1 嵌套的for循环
4.7.2 for和while的关系
4.7.3 for语句中浮点型数据的使用问题
小结
复习题
程序设计练习
第5章 函数
5.1 使用库函数
5.2 函数声明
5.3 自己编写函数
5.3.1 return语句
5.3.2 将函数与主程序放在一起
5.3.3 包含内部控制结构的函数
5.3.4 返回非数字值的函数
5.3.5 谓词函数
5.3.6 测试字符串是否相等的谓词函数
5.4 函数调用过程机制
5.4.1 参数传递
5.4.2 在其他函数中调用函数
5.5 过程
5.6 逐步精化
5.6.1 从顶开始
5.6.2 实现PrintCalendar
5.6.3 实现PrintCalendarMonth
5.6.4 完成最后的片段
小结
复习题
程序设计练习
第6章 算法
6.1 测试素数
6.1.1 一个IsPrime的简单版本
6.1.2 验证一个策略是否表示一个算法
6.1.3 说明IsPrime算法的正确性
6.1.4 改进算法的效率
6.1.5 在各个可选方案中选择
6.2 计算最大公约数
6.2.1 brute-force算法
6.2.2 欧几里德算法
6.2.3 欧几里德算法的正确性说明(可选)
6.2.4 比较GCD算法的效率
6.3 数值算法
6.3.1 连续逼近
6.3.2 报告错误
6.4 级数展开
6.4.1 Zeno悖论
6.4.2 用级数展开法设计平方根函数
6.4.3 估计平方根的泰勒级数展开(可选)
6.4.4 泰勒级数近似的实现
6.4.5 停留在收敛半径之内
6.5 指定数值类型的大小
6.5.1 整数类型
6.5.2 无符号类型
6.5.3 浮点类型
小结
复习题
程序设计练习
第二部分 库和模块化开发
……
第三部分 复合数据类型
附录