问题求解与程序设计

出版时间:2011-3  出版社:清华大学  作者:(美)弗雷德曼//科夫曼|译者:张长富//金名  页数:608  
Tag标签:无  

内容概要

  通过采用经典的软件开发方法,《问题求解与程序设计(C++语言版)(第6版)》在强调软件工程原理和使用C++语言实现面向对象编成的同时,提供了坚实的程序设计基础。它十分清晰地阐述了C++程序设计。本书首先从简单的、易于理解的过程编程开始,逐渐拓展加深,直到最终完成动态数据结构的介绍为止。  《问题求解与程序设计(C++语言版)(第6版)》的两位作者都是Temple大学计算机与信息科学教授。Elliot B. Koffman是美国最著名的计算机科学教育家之一,也是ACM任务组初级程序设计方法课程的前主席。他与其他作者合著了多部问题求教与面向对象方面的著作。Frank L. Friedman同时也是Temple大学计算机与信息科学系的主任。除了合著本书之外,他还编著了使用FORTRAN和BASIC编程的其他教材。他当前的研究方向是软件工程。  《问题求解与程序设计(C++语言版)(第6版)》的编写目标是教材。《问题求解与程序设计(C++语言版)(第6版)》由14章组成,它们对于学生学习和掌握软件编程的思路、方法、技巧提供了有效的帮助。  《问题求解与程序设计(C++语言版)(第6版)》结构清晰,取舍得当,读者易于使用本书给出的示例体验和体会数据结构的概念与实现技巧,更深入地掌握C++的核心内容。

作者简介

作者:(美国)弗雷德曼(Frank L.Friedman) (美国)科夫曼(Elliot B.Koffman) 译者:张长富 金名 等

书籍目录

第0章 作为一种职业途径的计算机科学 1 概述 2 0.1 为什么计算机科学或许是适合你的正确领域 2 0.1.1 选择计算机科学专业的理由 2 0.1.2 计算机科学家的特质 3 0.2 大学经验:可选择的计算机学科和专业 4 0.2.1 计算机科学 4 0.2.2 计算机工程 5 0.2.2 信息系统 5 0.2.3 信息技术 5 0.2.4 软件工程 6 0.2.5 多学科专业 6 0.3 工作机会 7 0.3.1 在美国和世界上的需求 8 0.3.2 对代表性不足群体的需求 8 0.3.3 依然在地平线上的新职业 8 第1章 计算机、问题求解和编程引论 10 1.1 计算机概述 11 1.1.1 早期的计算机 11 1.1.2 计算机分类 12 1.1.3 共享计算机资源 12 本节练习 13 1.2 计算机硬件 13 1.2.1 存储器 14 1.2.2 主存储器 15 1.2.3 辅助存储器 15 1.2.4 中央处理器 16 1.2.5 输入/输出设备 17 1.2.6 计算机网络 17 1.2.7 万维网 18 本节练习 19 1.3 计算机软件 19 1.3.1 操作系统 19 1.3.2 应用软件 21 1.3.3 编程语言 21 1.3.4 面向对象编程 22 本节练习 23 1.4 处理高级语言程序 24 1.4.1 执行程序 25 本节练习 26 1.5 软件开发方法 26 本节练习 28 1.6 应用软件开发方法 28 案例研究——将英里转换为千米 28 本节练习 31 1.7 计算机程序员的职业道德 31 1.7.1 隐私与数据滥用 31 1.7.2 计算机黑客 31 1.7.3 抄袭和盗版软件 32 1.7.4 计算机资源的滥用 32 本节练习 32 本章复习 33 快速自测练习 33 复习题 34 快速自测练习答案 35 第2章 c++概述 36 2.1 c++语言元素 37 2.1.1 注释 37 2.1.2 编译器指令:#include 38 2.1.3 名称空间std 39 2.1.4 函数main 39 2.1.5 声明语句 40 2.1.6 可运行语句 40 本节练习 41 2.2 保留字和标识符 42 2.2.1 保留字 42 2.2.2 标识符 42 2.2.3 大写和小写字母 43 本节练习 44 2.3 数据类型和声明 44 2.3.1 数据类型 44 2.3.2 string类 46 2.3.3 数据类型的目的 47 2.3.4 声明 47 2.3.5 常量声明 48 本节练习 49 2.4 可运行语句 50 2.4.1 内存中的程序 50 2.4.2 赋值语句 50 2.4.3 输入/输出操作 51 2.4.5 输入语句 52 2.4.6 程序提示 53 2.4.7 return语句 55 本节练习 55 2.5 c++程序的通用格式 56 2.5.1 程序中的注释 57 本节练习 58 2.6 算术表达式 58 2.6.1 操作符/和% 59 2.6.2 混合类型表达式的数据类型 60 2.6.3 混合类型赋值语句 61 2.6.4 使用多个操作符的表达式 61 2.6.5 在c++中编写数学公式 64 案例研究——超市硬币处理器 64 本节练习 67 2.7 交互模式、批模式和数据文件 69 2.7.1 输入重定向 69 2.7.2 输出重定向 70 本节练习 71 2.8 常见编程错误 71 2.8.1 语法错误 72 2.8.2 运行时错误 73 2.8.3 未检测到的错误 73 2.8.4 逻辑错误 74 本章复习 74 快速自测练习 76 复习题 76 编程项目 77 快速自测练习答案 80 第3章 使用函数和类做自顶向下设计 81 3.1 依据现有信息构造程序 82 案例研究——计算圆的面积和周长 83 案例研究——计算一批平面垫圈的重量 85 本节练习 88 3.2 库函数 89 c++ 库函数 90 展望未来 92 本节练习 92 3.3 自顶向下设计和结构图 93 案例研究——画简单图形 93 本节练习 94 3.4 无参数函数 94 3.4.1 函数原型 95 3.4.2 函数定义 96 3.4.3 程序中函数的位置 97 3.4.4 函数执行顺序 97 3.4.5 使用函数子程序的优点 99 本节练习 100 3.5 带输入参数的函数 101 3.5.1 带输入参数的无返回值函数 102 3.5.2 带输入参数和单返回值的函数 103 3.5.3 带有多个参数的函数 106 3.5.4 参数/参量列表对应关系 107 3.5.5 函数数据区 107 3.5.6 使用驱动模块测试函数 108 本节练习 108 3.6 名称的作用域 109 本节练习 110 3.7 借助类扩展c++:使用类string 111 3.7.1 string类 111 3.7.2 声明string对象 112 3.7.3 读取和显示string对象 112 3.7.4 字符串赋值和拼接 113 3.7.5 操作符重载 113 3.7.6 点表示法:调用函数length和at 113 3.7.7 用于单词处理操作的成员函数 114 3.7.8 将子字符串赋值给string对象 114 本节练习 115 3.8 计算机图形简介(选读) 116 3.8.1 窗口的组成 116 3.8.2 绘制矩形 119 3.8.3 绘制圆、椭圆和弧线 120 3.8.4 饼图和填充椭圆 124 3.8.5 在绘图上添加文本 126 本节练习 127 3.9 常见编程错误 127 分别测试函数子程序 129 本章复习 129 快速自测练习 131 复习题 131 编程项目 132 快速自测练习答案 135 第4章 选择结构:if和switch语句 137 4.1 控制结构 138 4.2 逻辑表达式 138 4.2.1 使用关系和相等操作符的逻辑表达式 139 4.2.2 使用逻辑操作符的逻辑表达式 140 4.2.3 操作符优先级 141 4.2.4 在c++中编写条件 143 4.2.5 比较字符和字符串 144 4.2.6 布尔赋值 144 4.2.7 书写bool值 145 4.2.8 使用整数表示逻辑值 145 本节练习 146 4.3 if控制语句简介 147 4.3.1 带有两个备选方案的if语句 147 4.3.2 带有从属语句的if语句 147 4.3.3 使用字符和字符串的if语句条件 148 4.3.4 if语句的格式 149 本节练习 150 4.4 使用复合备选语句的if语句 151 4.4.1 跟踪if语句 152 本节练习 153 4.5 算法中的决策步骤 154 案例研究——使用函数解决工资发放问题 154 4.5.1 有关标识符作用域的提醒 160 4.5.2 在结构图中添加数据流信息 160 4.5.3 述评——软件开发方法 160 本节练习 161 4.6 检查算法的正确性 161 本节练习 162 4.7 嵌套if语句和多项备选抉择 162 4.7.1 嵌套if语句和一系列if语句的比较 163 4.7.2 编写嵌套if作为多个备选抉择 164 4.7.3 条件的顺序 165 4.7.4 逻辑表达式的短路计算 167 本节练习 168 4.8 switch控制语句 169 4.8.1 适宜地使用break 171 4.8.2 嵌套if语句与switch语句的比较 171 4.8.3 使用switch语句选择备选函数 171 本节练习 172 4.9 常见编程错误 173 本章复习 174 快速自测练习 176 复习题 177 编程项目 178 快速自测练习答案 182 第5章 重复和循环语句 184 5.1 计数循环和while语句 185 5.1.1 while语句 186 5.1.2 while语句语法 187 本节练习 188 5.2 使用循环累加和与乘积 189 5.2.1 数字连乘 191 5.2.2 复合赋值运算符 192 本节练习 192 5.3 for语句 193 5.3.1 增量和减量操作符 195 5.3.2 异于一的增量和减量 197 5.3.3 显示值表 198 本节练习 198 5.4 条件循环 200 5.4.1 使用减量控制变量的循环 200 案例研究——监视石油供应 201 5.4.2 零迭代循环 203 5.4.3 更通用的条件循环 204 本节练习 205 5.5 循环设计和循环模式 205 5.5.1 哨兵控制循环 206 5.5.2 计算平均值 209 5.5.3 标志控制循环 209 本节练习 210 5.6 do-while语句 211 本节练习 214 5.7 while、for、do-while循环复习 215 本节练习 216 5.8 嵌套循环 217 本节练习 218 5.9 调试和测试程序 220 5.9.1 使用调试器 221 5.9.2 无调试器的调试 221 5.9.3 差一错误 222 5.9.4 测试 222 本节练习 222 5.10 图形程序中的循环(选读) 223 5.10.1 动画 224 本节练习 227 5.11 常见编程错误 227 本章复习 229 快速自测练习 232 复习题 233 编程项目 234 快速自测练习答案 239 第6章 模块化编程 240 6.1 值参和引用参数 241 6.1.1 传值调用和引用调用参数 243 6.1.2 void函数能够返回结果 244 6.1.3 什么时候使用引用参数或值参 244 6.1.4 值参与引用参数的对比 245 6.1.5 值参提供的保护 245 6.1.6 再谈参量/参数列表的对应关系 245 本节练习 247 6.2 使用输出和输入参数的函数 248 本节练习 253 6.3 函数的逐步设计 254 案例研究——通用和与平均值问题 254 6.3.1 程序中标识符的多次声明 260 本节练习 261 6.4 与函数一起使用对象 261 本节练习 263 6.5 调试和测试程序系统 263 6.5.1 自顶向下测试和桩模块 263 6.5.2 自底向上测试和驱动程序 263 6.5.3 程序系统调试技巧 264 6.5.4 标识符作用域和观察窗口变量 265 6.5.5 黑盒与白盒测试 265 本节练习 266 6.6 递归函数(选读) 266 本节练习 268 6.7 常见编程错误 269 本章复习 269 快速自测练习 270 复习题 271 编程项目 272 快速自测练习答案 278 第7章 简单数据类型 279 7.1 常量再探讨 280 7.1.1 #define编译器指令 280 本节练习 281 7.2 数值数据类型的内部表示 281 7.2.1 定点和浮点数据类型 281 7.2.2 整数类型 282 7.2.3 浮点类型 282 7.2.4 数值文字量的类型 282 7.2.5 整数类型和浮点类型的取值范围 282 7.2.6 数值的不精确性 283 7.2.7 混合类型:提升 284 7.2.8 类型转换 284 7.2.9 类型强制转换 284 本节练习 285 7.3 字符数据和函数 286 7.3.1 一些有用的字符函数 287 本节练习 289 7.4 bool类型数据和逻辑表达式 289 7.4.1 求逻辑表达式的反 289 7.4.2 bool类型函数 290 7.4.3 bool类型数据的输入和输出 291 本节练习 292 7.5 枚举类型 293 7.5.1 字符与枚举成员值 294 7.5.2 包含枚举类型的比较 294 7.5.3 整数类型之间的区别 295 7.5.4 读和写枚举类型值 295 7.5.5 枚举类型声明的位置 297 7.5.6 作为强制转换操作符的枚举类型 297 本节练习 298 7.6 迭代逼近 299 7.6.1 函数参数 299 案例研究——求解根的二分法 300 本节练习 304 7.7 使用char类型数据控制图形程序(选读) 305 7.7.1 生成随机数 307 7.7.2 为随机数生成器提供种子 307 本节练习 308 7.8 常见编程错误 308 本章复习 310 快速自测练习 310 复习题 311 编程项目 312 快速自测练习答案 318 第8章 流和文件 319 8.1 标准输入/输出流 320 8.1.1 一次读取一个字符 325 本节练习 325 8.2 外部文件 326 8.2.1 交互式处理与批处理 326 8.2.2 外部文件的目录名称 326 8.2.3 将流附加到外部文件上 327 8.2.4 函数copyline 329 8.2.5 换行字符细解 329 8.2.6 在文件流中使用getline 330 本节练习 331 8.3 将外部文件用于程序间的通信 332 案例研究——准备工资单文件 332 本节练习 336 8.4 深入探讨读取字符串数据 336 8.4.1 使用ignore跳过换行字符 337 本节练习 338 8.5 输入/输出操作算子 339 本节练习 340 8.6 常见编程错误 341 本章复习 342 快速自测练习 343 复习题 343 编程项目 344 快速自测练习答案 349 第9章 数据结构:数组和结构 350 9.1 数组数据类型 351 9.1.1 数组声明 351 9.1.2 数组初始化 353 9.1.3 数组下标 354 本节练习 356 9.2 顺序访问数组元素 356 9.2.1 字符串和字符数组 359 本节练习 360 9.3 数组参数 361 9.3.1 数组元素作参数 361 9.3.2 传递数组参数 362 本节练习 364 9.4 读取部分数组 365 本节练习 367 9.5 搜索和排序数组 367 9.5.1 找到数组中的最小值 367 9.5.2 数组搜索 369 9.5.3 以升序排序数组 370 本节练习 371 9.6 分析算法:大o表示法 372 9.6.1 搜索算法分析 373 9.6.2 排序算法分析 373 本节练习 374 9.7 多维数组 374 9.7.1 声明二维数组 375 9.7.2 初始化二维数组 376 9.7.3 处理二维数组的嵌套循环 376 9.7.4 二维数组用作函数参数 376 9.7.5 拥有多个维的数组 377 本节练习 378 9.8 结构数据类型 379 9.8.1 声明结构类型和结构 类型变量 379 9.8.2 访问结构成员 380 本节练习 381 9.9 作操作数和参数使用的结构 382 9.9.1 结构复制或赋值 382 9.9.2 作为参数传递结构 382 9.9.3 读取结构 383 9.9.4 结构用作函数结果 384 9.9.5 引用参数的效率 384 本节练习 384 9.10 结构数组 385 本节练习 387 9.11 作为字符数组的字符串(选读) 388 9.11.1 声明和初始化字符数组 388 9.11.2 读取和写入字符数组 388 9.11.3 用于字符数组的一些有用函数 389 本节练习 390 9.12 使用数组的图形程序(选读) 390 9.12.1 绘制多边形 390 9.12.2 绘制网格 392 本节练习 395 9.13 常见编程错误 396 本章复习 397 快速自测练习 398 复习题 399 编程项目 401 快速自测练习答案 405 第10章 用户自定义类 408 10.1 类定义和使用 409 10.1.1 counter类 409 10.1.2 counter类的类定义 410 10.1.3 文件counter.h 中的编译器指令 412 10.1.4 使用counter类 412 10.1.5 文件countertest.cpp中的编译器指令 413 本节练习 414 10.2 类的实现 415 10.2.1 构造函数 416 10.2.2 访问器和修改器函数 416 10.2.3 文件counter.cpp中的编译器指令 417 本节练习 417 10.3 类和对象使用规则小结 418 10.3.1 对象是类的实例 418 10.3.2 公有与私有访问的对比 418 10.3.3 类和成员函数定义语法 418 10.3.4 结构和类的比较 420 10.3.5 项目文件和单独编译 420 10.3.6 数据、结构和类的结合 421 10.3.7 函数重载和多态 421 本节练习 421 10.4 类用作操作数和参数 422 本节练习 423 10.5 分数类 424 10.5.1 fraction类的设计 424 10.5.2 使用类fraction 425 10.5.3 类fraction的实现文件 426 本节练习 428 10.6 circle 类 429 10.6.1 设计circle类 429 10.6.2 使用circle类 431 10.6.3 类circle 的实现文件 431 本节练习 433 10.7 一个简单的字符串类 433 10.7.1 类simplestring的设计 433 10.7.2 类simplestring 的定义 434 10.7.3 测试类simplestring的成员函数 435 10.7.4 类simplestring的实现文件 436 本节练习 438 10.8 一个存款账户类 439 案例研究——使用存款账户类 439 本节练习 444 10.9 常见编程错误 444 本章复习 446 快速自测练习 447 习题 447 编程项目 448 快速自测练习答案 451 第11章 数据抽象与面向对象设计 452 11.1 模版类 453 11.1.1 模版类的定义 453 11.1.2 模版类的实现 456 11.1.3 支持单独编译的编译器指令 458 本节练习 458 11.2 索引列表 458 11.2.1 索引列表类的需要 458 11.2.2 索引列表类的分析与设计 459 11.2.3 使用indexlist类 461 本节练习 463 11.3 实现索引列表类 464 本节练习 468 11.4 面向对象设计 469 11.4.1 面向对象设计方法论 469 案例研究——e-mail提供商的地址簿 469 本节练习 480 11.5 操作符重载与友元 481 11.5.1 操作符重载 481 11.5.2 友元 482 本节练习 483 11.6 vector类 484 11.6.1 向量与数组 485 11.6.2 向量函数 485 11.6.3 通过迭代器访问向量 486 11.6.4 标准算法 487 11.6.5 在e-mail地址簿案例中使用向量 487 本节练习 490 11.7 常见编程错误 491 本章复习 492 快速自测练习 492 复习题 493 编程项目 494 快速自测练习答案 497 第12章 递归 499 12.1 递归的本质 500 12.1.1 递归问题与解答的性质 501 本节练习 501 12.2 跟踪递归函数 502 12.2.1 跟踪一个递归函数 502 12.2.2 以反序显示字符 503 12.2.3 用于函数调用的栈 505 12.2.4 c++中的参数栈实现 507 本节练习 507 12.3 递归的数学函数 507 本节练习 511 12.4 以数组为参数的递归函数 512 案例研究——二叉搜索 513 本节练习 516 12.5 问题的递归求解 516 案例研究——汉诺塔 516 12.5.1 迭代函数与递归函数的比较 520 本节练习 521 12.6 常见编程错误 521 本章复习 522 快速自测练习 522 复习题 522 编程项目 523 快速自测练习答案 524 第13章 指针与动态数据结构 526 13.1 指针与new操作符 527 13.1.1 用指针来访问数据 528 13.1.2 指针操作 529 13.1.3 数组指针 529 13.1.4 指向结构体的指针 530 本节练习 532 13.2 操纵堆 532 13.2.1 作用于堆上的new操纵结果 532 13.2.2 把内存单元返回给堆 533 本节练习 534 13.3 链表与list类 534 13.3.1 结点声明 534 13.3.2 结点连接 535 13.3.3 在链表中插入结点 535 13.3.4 在链表头插头结点 536 13.3.5 在链表尾插入结点 537 13.3.6 删除结点 537 13.3.7 遍历链表 537 13.3.8 环形链表与双向链表(可选) 539 13.3.9 list类 539 本节练习 541 13.4 抽象数据类型——栈 542 13.4.1 c++的stack类 542 13.4.2 实现stack模版类 544 13.4.3 实现栈操作 546 13.4.4 测试栈 547 本节练习 548 13.5 抽象数据类型——队列 548 13.5.1 c++的queue类 549 13.5.2 实现队列 549 本节练习 553 13.6 二叉树 553 13.6.1 二叉搜索树 554 13.6.2 搜索二叉搜索树 554 13.6.3 构建二叉搜索树 555 13.6.4 显示二叉搜索树 556 本节练习 557 13.7 二叉搜索树抽象数据结构 557 13.7.1 二叉树类的设计 557 13.7.2 二叉树类的实现 559 本节练习 562 13.8 二叉搜索树的效率 563 本节练习 564 13.9 常见编程错误 564 本章复习 565 快速自测练习 565 复习题 567 编程项目 568 快速自测练习答案 570 第14章 使用进程和线程的多处理 572 14.1 多任务处理 573 14.1.1 线性与并行编程 573 14.1.2 共享时间的多任务处理 574 14.1.3 抢占多任务处理 574 14.1.4 时间片与并行性 575 14.1.5 并发编程 576 本节练习 576 14.2 进程 576 14.2.1 创建一个进程 577 14.2.2 等待进程 579 14.2.3 从一个进程中运行另一个程序 579 本节练习 581 14.3 进程间通信与管道 581 14.3.1 管道 581 14.3.2 使用管道 582 14.3.3 使用标准输入进行进程间通信 583 14.3.4 演示父进程与子进程之间的通信 584 本节练习 587 14.4 线程 587 14.4.1 创建一个线程 587 14.4.2 线程同步化 589 14.4.3 互斥锁 590 14.4.4 死锁 593 本节练习 595 案例研究——线程演示 595 14.5 常见编程错误 604 本章复习 605 快速自测练习 606 复习题 607 编程项目 607 快速自测练习答案 608

章节摘录

版权页:插图:个人的个性和性格特征通常影响他所选择的研究领域,并最终影响他将从事的工作。具备某些能力的个人能够满足某些领域的需要。因此,考察成功成为计算机科学学科学生的人们拥有很多相同特质是件有意义的事情。阅读下面的描述,并决定它是否看起来就是你。最重要的是,你必须喜欢解决问题的挑战。计算机科学更多的是找到解决问题的方案,而不是使用现有的计算机硬件或编程语言。解决问题需要有创造性,并且“要跳出条条框框”。你必须具备尝试不同于“可接受”解决方案的解决办法的意愿。你喜欢运用技术,并且喜欢成为一位终生学习者。你喜欢难题,喜欢持续不懈地工作来找出解决方案。在你逼近问题答案的过程中,你甚至或许没有注意到时间已经悄悄地流逝。你喜欢制造东西,包括现实世界中的东西和“虚拟世界”中的东西。你能够知道如何定制一个特殊的物品,让其在特定环境中工作。你喜欢处理大型项目并看到它们的完工。你喜欢构造对人们有用、能够给他们的生活产生积极影响的东西。要想在工作上取得成功,你还必须善于沟通。你应该能够既向技术人员、又向非技术人员解释你的计划和解决方案。你必须能够清晰并准确地书写技术环境中的材料。由于绝大多数项目都有众多人员参与,因此在群体中良好工作十分重要。如果你打算成为一名经理或运营自己的公司,那么能够与不同的人一起工作就十分重要。FrederickP.Brooks,以领导开发了用于IBMSystem/360操作系统的小组而知名,他于1970年编著了一本标题为《人月神话——软件工程随笔》的著作。即使在他编著本书之后计算世界已经发生了巨大变化,他的随笔依然于今天的世界十分相关。他将“职业的快乐(JoysoftheCraft)”列举如下:第一点是造出自己设计物品的纯粹快乐。第二点是造出对其他人有用并且受到其他人尊敬的物品带来的愉悦。第三点是将迷宫一样复杂的实体塑造为正确工作系统的喜悦。第四点是由于工作的无重复本质而一直学习的乐趣。最后一点,是在十分易于驾驭环境中工作的快乐。程序员能够在他的想象中创造,并能够稳定地生产出可以被测试以及易于修改与重新加工的产品。难道雕塑家或土木工程师不喜欢这样的易于驾驭的环境吗!

编辑推荐

《问题求解与程序设计(C++语言版)(第6版)》:世界著名计算机教材精选

图书封面

图书标签Tags

评论、评分、阅读与下载


    问题求解与程序设计 PDF格式下载


用户评论 (总计0条)

 
 

 

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7