本书译自经典计算机教程《C How to Program》的最新版,在美国,数十万学生通过本书学习C语言。\r\n作者Deitel & Deitel父子俩从事编程和教学工作几十年,积累了丰富的经验,通过本书讲述了C语言、C++以及Java语言的基本概念及编程方法。本书重在强调程序的清晰性与实用性,书中给出大量的相关提示信息,可以引导读者养成良好的编程习惯,提高程序性能和可移植性。\r\n本书适用于只有很少甚至没有编程经验的大专院校学生,可以作为计算机编程方面的入门级教材,同时也可作为初中级程序员的参考用书。
第1章 计算机、Internet和万维网入门 1\r\n1.1 简介 1\r\n1.2 计算机是什么 3\r\n1.3 计算机的组织 3\r\n1.4 操作系统的演变 4\r\n1.5 个人计算、分布计算和客户/服务器\r\n计算 5\r\n1.6 机器语言、汇编语言和高级语言 5\r\n1.7 C语言的历史 7\r\n1.8 C语言的标准库 8\r\n1.9 重要的软件发展趋势:面向对象的\r\n技术 8\r\n1.10 C++语言以及C++编程 10\r\n1.11 Java语言以及Java编程 11\r\n1.12 其他高级语言 11\r\n1.13 结构化编程 12\r\n1.14 C程序开发环境基础 12\r\n1.15 硬件趋势 15\r\n1.16 Internet的历史 15\r\n1.17 万维网的历史 17\r\n1.18 C语言及本书的注意事项 17\r\n自测练习 18\r\n练习 19\r\n第2章 C程序设计入门 21\r\n2.1 简介 21\r\n2.2 一个简单的C程序:显示一行文本 21\r\n2.3 另一个简单的C程序:两个整数相加 25\r\n2.4 内存的概念 29\r\n2.5 C的算术运算 30\r\n2.6 判断:等式和关系运算符 34\r\n自测练习 37\r\n练习 41\r\n第3章 C语言结构化程序开发 46\r\n3.1 简介 46\r\n3.2 算法 46\r\n3.3 伪代码 47\r\n3.4 控制结构 47\r\n3.5 if 选择结构 49\r\n3.6 if/else选择结构 51\r\n3.7 while循环结构 55\r\n3.8 表述算法:案例研究1(计数器控制\r\n的循环) 56\r\n3.9 使用自顶向下、逐步求精方法表述\r\n算法:案例研究2(标记控制循环) 58\r\n3.10 使用自顶向下、逐步求精方法表述\r\n算法:案例研究3(嵌套控制结构) 64\r\n3.11 赋值运算符 68\r\n3.12 递增运算符和递减运算符 68\r\n自测练习 71\r\n练习 75\r\n第4章 C程序控制 85\r\n4.1 简介 85\r\n4.2 循环的本质 85\r\n4.3 计数器控制的循环 86\r\n4.4 for循环结构 88\r\n4.5 for结构:说明和观察 90\r\n4.6 使用for结构的示例 91\r\n4.7 switch多重选择结构 95\r\n4.8 do/while循环结构 100\r\n4.9 break和continue语句 102\r\n4.10 逻辑运算符 103\r\n4.11 相等运算符(==)和赋值运算符\r\n(=) 106\r\n4.12 结构化编程小结 108\r\n自测练习 113\r\n练习 116\r\n第5章 C函数 123\r\n5.1 简介 123\r\n5.2 C语言的程序模块 123\r\n5.3 数学库函数 124\r\n5.4 函数 126\r\n5.5 函数的定义 126\r\n5.6 函数原型 130\r\n5.7 头文件 133\r\n5.8 调用函数:按值调用和按引用调用 134\r\n5.9 随机数的生成 134\r\n5.10 示例:运气游戏 139\r\n5.11 存储类别 142\r\n5.12 作用域的规则 144\r\n5.13 递归 147\r\n5.14 递归实例:斐波纳契数列 150\r\n5.15 递归与迭代 154\r\n自测练习 156\r\n练习 161\r\n第6章 C数组 171\r\n6.1 简介 171\r\n6.2 数组 171\r\n6.3 声明数组 173\r\n6.4 数组使用示例 173\r\n6.5 数组传递给函数 185\r\n6.6 排序数组 190\r\n6.7 案例研究:用数组计算平均值、中值\r\n和最频值 192\r\n6.8 查找数组 196\r\n6.9 多维数组 201\r\n自测练习 207\r\n练习 210\r\n第7章 C指针 222\r\n7.1 简介 222\r\n7.2 指针变量声明和初始化 222\r\n7.3 指针运算符 223\r\n7.4 按引用调用函数 226\r\n7.5 使用指针的const限定符 229\r\n7.6 使用按引用调用的冒泡排序 235\r\n7.7 指针表达式和指针算法 240\r\n7.8 指针和数组的关系 243\r\n7.9 指针数组 247\r\n7.10 案例研究:洗牌和发牌模拟 248\r\n7.11 函数指针 253\r\n自测练习 257\r\n练习 260\r\n第8章 C字符和字符串 275\r\n8.1 简介 275\r\n8.2 字符串和字符的基本知识 275\r\n8.3 字符处理库 277\r\n8.4 字符串转换函数 282\r\n8.5 标准输入/输出库函数 287\r\n8.6 字符串处理库的字符串处理函数 291\r\n8.7 字符处理库的比较函数 293\r\n8.8 字符串处理库的查找函数 295\r\n8.9 字符串处理库的内存函数 301\r\n8.10 字符串处理库的其他函数 305\r\n自测练习 306\r\n练习 309\r\n第9章 C格式化的输入/输出 316\r\n9.1 简介 316\r\n9.2 流 316\r\n9.3 用printf格式化输出 316\r\n9.4 打印整数 317\r\n9.5 打印浮点数 318\r\n9.6 打印字符串和字符 320\r\n9.7 其他转换说明符 321\r\n9.8 用字段宽度和精度打印 323\r\n9.9 在printf格式控制字符串中使用标记 325\r\n9.10 打印字面量和转义序列 328\r\n9.11 用scanf格式化输入 329\r\n自测练习 335\r\n练习 337\r\n第10章 C结构、联合、位操作和枚举 340\r\n10.1 简介 340\r\n10.2 结构定义 340\r\n10.3 初始化结构 343\r\n10.4 访问结构成员 343\r\n10.5 在函数中使用结构 345\r\n10.6 typedef 345\r\n10.7 示例:高性能洗牌和发牌仿真程序 346\r\n10.8 联合 349\r\n10.9 位运算符 351\r\n10.10 位字段 359\r\n10.11 枚举常量 362\r\n自测练习 363\r\n练习 366\r\n第11章 C文件处理 370\r\n11.1 简介 370\r\n11.2 数据层次结构 370\r\n11.3 文件和流 372\r\n11.4 创建顺序存取文件 373\r\n11.5 从顺序存取文件中读取数据 377\r\n11.6 随机存取文件 382\r\n11.7 创建随机存取文件 383\r\n11.8 随机向随机存取文件中写入数据 385\r\n11.9 随机从随机存取文件中读取数据 387\r\n11.10 案例研究:事务处理程序 389\r\n自测练习 394\r\n练习 396\r\n第12章 C数据结构 401\r\n12.1 简介 401\r\n12.2 自引用结构 402\r\n12.3 动态内存分配 402\r\n12.4 链表 403\r\n12.5 堆栈 412\r\n12.6 队列 417\r\n12.7 树 424\r\n自测练习 429\r\n练习 432\r\n第13章 C预处理器 452\r\n13.1 简介 452\r\n13.2 #include预处理器伪指令 452\r\n13.3 #define预处理器伪指令:符号常量 453\r\n13.4 #define预处理器伪指令:宏 453\r\n13.5 条件编译 455\r\n13.6 #error和#pragma预处理器伪指令 456\r\n13.7 #和##运算符 456\r\n13.8 行号 457\r\n13.9 预定义符号常量 457\r\n13.10 断言 458\r\n自测练习 458\r\n练习 460\r\n第14章 C语言高级技术 461\r\n14.1 简介 461\r\n14.2 在UNIX和DOS系统上重定向\r\n输入/输出 461\r\n14.3 变长参数列表 462\r\n14.4 使用命令行参数 464\r\n14.5 编译多个源文件程序的注释 465\r\n14.6 使用exit和atexit终止程序 467\r\n14.7 volatile类型限定符 469\r\n14.8 整数和浮点常量的前缀 469\r\n14.9 其他文件问题 469\r\n14.10 信号处理 471\r\n14.11 动态内存分配:函数calloc和\r\nrealloc 474\r\n14.12 无条件分支:goto 474\r\n自测练习 476\r\n练习 476\r\n \r\n第2部分 C++编程\r\n \r\n第15章 C的增强版本C++ 479\r\n15.1 简介 479\r\n15.2 C++ 479\r\n15.3 简单的程序:两个整数相加 480\r\n15.4 C++标准库 483\r\n15.5 头文件 483\r\n15.6 嵌入函数 485\r\n15.7 引用和引用参数 487\r\n15.8 默认参数和空参数列表 491\r\n15.9 一元作用域解析运算符 493\r\n15.10 函数重载 495\r\n15.11 函数模板 497\r\n自测练习 499\r\n练习 500\r\n第16章 C++类和数据抽象 502\r\n16.1 简介 502\r\n16.2 用类实现时间抽象数据类型 503\r\n16.3 类作用域和访问类成员 509\r\n16.4 从实现中分离接口 511\r\n16.5 控制访问成员 515\r\n16.6 访问函数和实用函数 517\r\n16.7 初始化类对象:构造函数 520\r\n16.8 通过构造函数使用默认参数 521\r\n16.9 使用析构函数 525\r\n16.10 何时调用构造函数和析构函数 526\r\n16.11 使用数据成员和成员函数 529\r\n16.12 微妙的陷阱:返回private数据\r\n成员的引用 534\r\n16.13 使用默认的按成员复制来赋值 536\r\n16.14 软件重用性 538\r\n自测练习 538\r\n练习 539\r\n第17章 C++类:第二部分 542\r\n17.1 简介 542\r\n17.2 const(常量)对象和const成员函数 542\r\n17.3 复合:作为类成员的对象 551\r\n17.4 friend函数和friend类 556\r\n17.5 使用this指针 560\r\n17.6 使用运算符new和delete动态\r\n分配内存 565\r\n17.7 static类成员 566\r\n17.8 数据抽象和信息隐藏 572\r\n17.8.1 示例:数组抽象数据类型 573\r\n17.8.2 示例:字符串抽象数据类型 574\r\n17.8.3 示例:队列抽象数据类型 574\r\n17.9 容器类和迭代器 575\r\n自测练习 575\r\n练习 576\r\n第18章 C++运算符重载 578\r\n18.1 简介 578\r\n18.2 运算符重载的基础知识 579\r\n18.3 运算符重载的限制 580\r\n18.4 作为类成员和友元函数的运算符函数 581\r\n18.5 重载流插入和流提取运算符 582\r\n18.6 重载一元运算符 585\r\n18.7 重载二元运算符 586\r\n18.8 案例研究:数组类 587\r\n18.9 类型转换 600\r\n18.10 重载++和?? 601\r\n自测练习 602\r\n练习 603\r\n第19章 C++继承 607\r\n19.1 简介 607\r\n19.2 继承:基类和派生类 608\r\n19.3 Protected 成员 610\r\n19.4 基类指针转换为派生类指针 611\r\n19.5 使用成员函数 616\r\n19.6 在派生类中覆盖基类成员 617\r\n19.7 公共、受保护和私有继承 621\r\n19.8 直接基类和间接基类 622\r\n19.9 在派生类中使用构造函数和析构\r\n函数 622\r\n19.10 隐含派生类对象到基类对象的\r\n转换 626\r\n19.11 使用继承的软件工程 627\r\n19.12 复合与继承 628\r\n19.13 “使用一个”和“了解一个”\r\n的关系 628\r\n19.14 案例研究:点、圆和圆柱 629\r\n自测练习 637\r\n练习 637\r\n第20章 C++虚拟函数和多态性 639\r\n20.1 简介 639\r\n20.2 类型字段和switch语句 639\r\n20.3 虚拟函数 640\r\n20.4 抽象基类和具体类 640\r\n20.5 多态性 641\r\n20.6 新类和动态绑定 643\r\n20.7 虚拟析构函数 643\r\n20.8 案例研究:继承接口和实现 644\r\n20.9 多态性、虚拟函数和动态绑定内幕 652\r\n自测练习 655\r\n练习 655\r\n第21章 C++流输入/输出 657\r\n21.1 简介 657\r\n21.2 流 658\r\n21.2.1 iostream库头文件 658\r\n21.2.2 流输出/输入类和对象 658\r\n21.3 流输出 660\r\n21.3.1 流插入运算符 660\r\n21.3.2 级联流插入/提取运算符 662\r\n21.3.3 char *变量的输出 663\r\n21.3.4 用成员函数put输出字符:\r\n级联多个put 664\r\n21.4 流输入 664\r\n21.4.1 流提取运算符 664\r\n21.4.2 get和getline成员函数 667\r\n21.4.3 istream成员函数peek、\r\nputback和ignore 670\r\n21.4.4 类型安全的输入/输出 670\r\n21.5 用read、gcount和write的非格式\r\n化输入/输出 670\r\n21.6 流操纵符 671\r\n21.6.1 整数流基数:dec、oct、hex\r\n和setbase 672\r\n21.6.2 浮点精度(precision,\r\nsetprecision) 673\r\n21.6.3 字段宽度(setw, width) 674\r\n21.6.4 用户定义操纵符 676\r\n21.7 流格式状态 677\r\n21.7.1 格式状态标记 677\r\n21.7.2 尾部0和小数点\r\n(ios::showpoint) 678\r\n21.7.3 对齐(ios::left,ios::right,\r\nios::internal) 679\r\n21.7.4 填充(fill, setfill) 681\r\n21.7.5 整数流基数(ios::dec,ios::oct,\r\nios::hex,ios::showbase) 682\r\n21.7.6 浮点数:科学记数法\r\n(ios::scientific, ios::fixed) 683\r\n21.7.7 大写/小写控制\r\n(ios::uppercase) 684\r\n21.7.8 设置和重新设置状态标记\r\n(flags, setiosflags,\r\nresetiosflags) 685\r\n21.8 流错误状态 687\r\n21.9 将输出流转移到输入流 689\r\n自测练习 689\r\n练习 694\r\n第22章 C++模板 697\r\n22.1 简介 697\r\n22.2 类模板 697\r\n22.3 类模板与非类型参数 703\r\n22.4 模板与继承 704\r\n22.5 模板与友元 704\r\n22.6 模板与static成员 706\r\n自测练习 706\r\n练习 707\r\n第23章 C++异常处理 708\r\n23.1 简介 708\r\n23.2 何时使用异常处理 710\r\n23.3 其他错误处理技术 710\r\n23.4 C++异常处理基础知识:\r\n\r\ntry、throw、catch 711\r\n23.5 异常处理的简单例子:零除 712\r\n23.6 引发异常 714\r\n23.7 捕获异常 715\r\n23.8 重新引发异常 718\r\n23.9 异常规约 720\r\n23.10 处理无法预料的异常 720\r\n23.11 堆栈展开 721\r\n23.12 构造函数、析构函数与异常处理 722\r\n23.13 异常与继承 723\r\n23.14 处理new错误 723\r\n23.15 auto_ptr类与动态内存分配 727\r\n23.16 标准库异常层次 729\r\n自测练习 730\r\n练习 731\r\n \r\n第3部分 Java编程\r\n \r\n第24章 Java应用程序与小程序入门 733\r\n24.1 简介 733\r\n24.2 典型的Java环境基础 734\r\n24.3 Java和本书的总说明 737\r\n24.4 简单的程序:打印文本行 738\r\n24.5 另一个Java应用程序:整数相加 745\r\n24.6 Java 2 SDK的小程序示例 751\r\n24.6.1 TicTacToe小程序 751\r\n24.6.2 DrawTest小程序 754\r\n24.6.3 Java2D小程序 755\r\n24.7 一个简单的Java小程序:绘制\r\n字符串 756\r\n24.8 另外两个示例:绘制字符串与线 762\r\n24.9 另一个Java小程序:整数相加 764\r\n自测练习题 771\r\n练习 773\r\n第25章 独特的Java运算符、\r\n方法与数组 775\r\n25.1 简介 775\r\n25.2 基本数据类型与关键字 775\r\n25.3 逻辑运算符 777\r\n25.4 方法定义 782\r\n25.5 Java API 包 787\r\n25.6 随机数生成 791\r\n25.7 示例:运气游戏 794\r\n25.8 JApplet类的方法 802\r\n25.9 数组的声明与分配 804\r\n25.10 数组应用示例 804\r\n25.11 引用和引用参数 815\r\n25.12 多维数组 815\r\n自测练习 819\r\n练习 821\r\n第26章 基于对象的Java编程 826\r\n26.1 简介 826\r\n26.2 用类实现时间抽象数据类型 827\r\n26.3 类的作用域 834\r\n26.4 创建包 835\r\n26.5 类对象的初始化:构造函数 839\r\n26.6 使用Set和Get方法 840\r\n26.7 使用this引用 847\r\n26.8 结束函数 850\r\n26.9 静态类成员 850\r\n自测练习 854\r\n练习 855\r\n第27章 面向对象的Java编程 859\r\n27.1 简介 859\r\n27.2 超类和子类 861\r\n27.3 protected成员 863\r\n27.4 超类对象和子类对象的关系 863\r\n27.5 子类对象向超类对象的隐式转换 870\r\n27.6 具有继承的软件工程 871\r\n27.7 复合与继承的比较 872\r\n27.8 多态简介 872\r\n27.9 类型字段和switch语句 872\r\n27.10 动态方法绑定 873\r\n27.11 final方法和类 873\r\n27.12 抽象超类和具体类 874\r\n27.13 多态示例 875\r\n27.14 新类和动态绑定 876\r\n27.15 案例研究:继承接口和实现 877\r\n27.16 案例研究:创建和使用接口 883\r\n27.17 内部类定义 889\r\n27.18 内部类定义的说明 900\r\n27.19 基本类型的类型包装类 900\r\n自测练习 901\r\n练习 901\r\n第28章 Java图形和Java2D 904\r\n28.1 简介 904\r\n28.2 图形环境和图形对象 906\r\n28.3 颜色控制 907\r\n28.4 字体控制 914\r\n28.5 绘制直线、矩形和椭圆 920\r\n28.6 绘制弧 923\r\n28.7 绘制多边形和折线 926\r\n28.8 Java2D API 929\r\n28.9 Java2D形状 929\r\n自测练习 937\r\n练习 938\r\n第29章 Java GUI组件 941\r\n29.1 简介 941\r\n29.2 Swing概述 942\r\n29.3 JLabel 944\r\n29.4 事件处理模型 948\r\n29.5 JTextField和JPasswordField 950\r\n29.6 JTextArea 956\r\n29.7 JButton 959\r\n29.8 JCheckBox 963\r\n29.9 JComboBox 966\r\n29.10 鼠标事件处理 969\r\n29.11 布局管理器 974\r\n29.11.1 FlowLayout 974\r\n29.11.2 BorderLayout 977\r\n29.11.3 GridLayout 980\r\n29.12 面板 983\r\n29.13 创建自包含的Jpanel子类 984\r\n29.14 窗口 990\r\n29.15 使用有边框的菜单 992\r\n自测练习 999\r\n练习 1001\r\n第30章 Java多媒体:图像、\r\n动画及音频 1004\r\n30.1 简介 1004\r\n30.2 加载、显示和缩放图像 1005\r\n30.3 加载和播放音频剪辑 1008\r\n30.4 使一系列图像动起来 1011\r\n30.5 动画问题 1016\r\n30.6 通过param HTML标记自定义\r\n小程序 1017\r\n30.7 图像映射 1022\r\n30.8 Java插件 1025\r\n30.9 Internet和万维网资源 1027\r\n自测练习 1027\r\n练习 1028\r\n \r\n第4部分 附 录\r\n \r\n附录A Internet与Web资源 1031\r\nA.1 C/C++资源 1031\r\nA.2 C++教程 1033\r\nA.3 C/C++ FAQ 1034\r\nA.4 Visual C++ 1034\r\nA.5 comp.lang.c++ 1035\r\nA.6 C/C++编译程序 1037\r\nA.7 C++开发工具 1039\r\nA.8 Java资源 1039\r\nA.9 Java产品 1041\r\nA.10 Java FAQ 1042\r\nA.11 Java教程 1042\r\nA.12 Java期刊 1043\r\nA.13 Java 小程序 1043\r\nA.14 多媒体 1044\r\nA.15 Java 新闻组 1045\r\n附录B C99 Internet与Web资源 1047\r\n附录C 运算符优先级 1050\r\n附录D ASCII字符集 1055\r\n附录E 数制系统 1056\r\nE.1 简介 1056\r\nE.2 将二进制数缩写为八进制和\r\n十六进制数 1059\r\nE.3 将八进制数和十六进制数\r\n转换成二进制数 1060\r\nE.4 从二进制、八进制、十六进制\r\n转换成十进制 1060\r\nE.5 从十进制转换为八进制、十六进制\r\n或二进制 1061\r\nE.6 负二进制数:补码记数法 1063\r\n自测练习 1064\r\n练习 1066