本书是全球畅销的C语言教程之一。全书系统地介绍了4种当今流行的程序设计方法——面向过程、基于对象、面向对象以及泛型编程,内容全面、生动、易懂,作者由浅入深地介绍了结构化编程及软件工程的基本概念,从简单的概念到*终的完整的语言描述,清晰、准确、透彻、详细地讲解了C语言,尤其注重程序设计思想和方法的介绍。相对于上一版,这一版在内容方面新增加了C安全程序设计、"更上一层楼”练习集,更新了C 和面向对象程序设计、基于Allegro的游戏编程、C99标准介绍等内容。
Paul Deitel和Harvey Deitel是全球畅销的编程语言教材和专业图书作家,“How to Program”系列是其负盛名的一套计算机编程教材,已经销售近40年,并被翻译成中文在内的十几种语言。他们成立的Deitel & Associates公司是一家国际知名的企业培训和写作公司, 专门进行计算机编程语言、对象技术、移动应用开发及Internet和Web软件技术方面的培训和写作,出版了一流的编程专业的大学教材、 专业图书以及LiveLessons视频课程。
苏小红,哈尔滨工业大学计算机学院博士生导师,计算机应用技术专家,研究领域主要是色彩匹配,信息融合,空间计算,人工神经网络,进化算法,计算机图形学,灰色预测,彩色图像处理等。
目录
- 第1章 计算机、因特网和万维网导论 1
- 1.1 引言 2
- 1.2 计算机硬件和软件 2
- 1.2.1 摩尔定律 2
- 1.2.2 计算机组成 3
- 1.3 数据的层次结构 3
- 1.4 机器语言、汇编语言和高级语言 5
- 1.5 C程序设计语言 6
- 1.6 C标准库 7
- 1.7 C 和其他基于C的程序设计语言 8
- 1.8 对象技术 8
- 1.8.1 对象——以汽车为例 9
- 1.8.2 方法与类 9
- 1.8.3 实例化 9
- 1.8.4 软件重用 9
- 1.8.5 消息与方法调用 9
- 1.8.6 属性与实例变量 9
- 1.8.7 封装与信息隐藏 10
- 1.8.8 继承 10
- 1.9 典型的C程序开发环境 10
- 1.9.1 第1步:创建一个C程序 11
- 1.9.2 第2步和第3步:预处理及编译一个C程序 11
- 1.9.3 第4步:链接 11
- 1.9.4 第5步:装载 11
- 1.9.5 第6步:执行 12
- 1.9.6 程序运行时可能会出现的问题 12
- 1.9.7 标准输入、标准输出和标准错误流 12
- 1.10 在Windows、Linux和Mac OS X上测试并运行一个C应用程序 12
- 1.10.1 在Windows命令提示符下运行一个C应用程序 13
- 1.10.2 使用Linux中的GNU C来运行一个C应用程序 15
- 1.10.3 使用Mac OS X终端来运行一个C应用程序 17
- 1.11 操作系统 19
- 1.11.1 Windows —— 一个专有的操作系统 19
- 1.11.2 Linux —— 一个开源的操作系统 19
- 1.11.3 苹果公司的Mac OS X;面向iPhone、iPad 和iPod Touch的iOS操作系统 20
- 1.11.4 谷歌公司的Android操作系统 20
- 1.12 因特网和万维网 20
- 1.12.1 因特网:计算机网络的网络 21
- 1.12.2 万维网:让因特网对用户更友好 21
- 1.12.3 万维网服务 21
- 1.12.4 Ajax 23
- 1.12.5 物联网 23
- 1.13 一些重要的软件技术 23
- 1.14 跟上信息技术的发展 24
- 第2章 C语言程序设计入门 28
- 2.1 引言 28
- 2.2 一个简单的C程序:打印一行文字 28
- 2.3 另一个简单的C程序:两个整数求和 31
- 2.4 存储单元的基本概念 35
- 2.5 C语言中的算术运算 35
- 2.6 做出决策:相等和关系运算符 38
- 2.7 安全的C程序设计 41
- 第3章 结构化的C程序设计 51
- 3.1 引言 51
- 3.2 算法 51
- 3.3 伪代码 52
- 3.4 控制结构 52
- 3.5 if条件语句 54
- 3.6 if…else条件语句 54
- 3.7 while循环语句 57
- 3.8 算法设计案例1:计数控制的循环 58
- 3.9 自顶向下、逐步求精的算法设计案例2:标记控制的循环 60
- 3.10 自顶向下、逐步求精的算法设计案例3:嵌套控制结构 65
- 3.11 赋值运算符 67
- 3.12 增1和减1运算符 68
- 3.13 安全的C程序设计 70
- 第4章 C程序控制 84
- 4.1 引言 84
- 4.2 循环的基本原理 84
- 4.3 计数控制的循环 85
- 4.4 for循环语句 86
- 4.5 for语句:注意事项 88
- 4.6 使用 for语句的例子 89
- 4.7 switch多重选择语句 91
- 4.8 do…while循环语句 96
- 4.9 break和continue语句 97
- 4.10 逻辑运算符 98
- 4.11 区分相等运算符(= =)和赋值运算符(=) 100
- 4.12 结构化程序设计小结 101
- 4.13 安全的C程序设计 105
- 第5章 C函数 117
- 5.1 引言 117
- 5.2 C语言中的程序模块 117
- 5.3 数学库函数 118
- 5.4 函数 119
- 5.5 函数定义 120
- 5.5.1 square函数 120
- 5.5.2 maximum函数 123
- 5.6 函数原型:一个深入的剖析 123
- 5.7 函数调用堆栈及活动记录堆栈帧 125
- 5.8 头文件 128
- 5.9 按值或按引用传递参数 129
- 5.10 随机数的生成 129
- 5.11 案例分析:运气游戏;引入enum 133
- 5.12 存储类型 135
- 5.13 作用域的规定 137
- 5.14 递归 139
- 5.15 递归应用案例:斐波那契数列 142
- 5.16 递归与迭代 144
- 5.17 安全的C程序设计 146
- 第6章 C数组 161
- 6.1 引言 162
- 6.2 数组 162
- 6.3 数组定义 163
- 6.4 数组实例 163
- 6.4.1 定义一个数组并用循环结构来设置数组元素值 163
- 6.4.2 在定义语句中用一个初始值列表来初始化一个数组 164
- 6.4.3 用符号常量来定义数组的大小并通过计算来初始化数组元素 165
- 6.4.4 数组元素值求和 166
- 6.4.5 用数组来统计民意调查的结果 166
- 6.4.6 用直方图来展示数组元素值 168
- 6.4.7 用数组来统计投掷骰子60 000 000次的结果 169
- 6.5 用字符数组来存储和处理字符串 170
- 6.5.1 定义一个字符串来初始化一个字符数组 170
- 6.5.2 用一个字符初始化列表来初始化一个字符数组 170
- 6.5.3 访问一个字符串中的字符 170
- 6.5.4 针对一个字符数组的输入 170
- 6.5.5 将一个代表字符串的字符数组输出 171
- 6.5.6 字符数组的演示 171
- 6.6 静态局部数组和自动局部数组 171
- 6.7 将数组传递给函数 173
- 6.8 数组排序 176
- 6.9 案例分析:用数组来计算平均值、中值和众数 178
- 6.10 数组查找 181
- 6.10.1 线性查找数组元素 181
- 6.10.2 折半查找数组元素 182
- 6.11 多下标数组 185
- 6.11.1 双下标数组概述 185
- 6.11.2 双下标数组的初始化 186
- 6.11.3 设置某行元素的元素值 187
- 6.11.4 计算双下标数组中所有元素值的总和 187
- 6.11.5 对双下标数组的处理 188
- 6.12 可变长数组 190
- 6.13 安全的C程序设计 192
- 第7章 C指针 207
- 7.1 引言 207
- 7.2 指针变量的定义和初始化 208
- 7.3 指针运算符 208
- 7.4 按引用向函数传递实参 210
- 7.5 对指针使用const限定符 213
- 7.5.1 用指向可变数据的可变指针将字符串中的字符改成大写 214
- 7.5.2 用指向常量数据的可变指针逐个打印字符串中的字符 215
- 7.5.3 试图修改指向可变数据的常量指针 217
- 7.5.4 试图修改指向常量数据的常量指针 217
- 7.6 采用按引用传递的冒泡排序 218
- 7.7 sizeof运算符 220
- 7.8 指针表达式和指针算术运算 222
- 7.8.1 指针算术运算中可使用的运算符 222
- 7.8.2 将指针对准一个数组 222
- 7.8.3 给指针加上一个整数 222
- 7.8.4 给指针减去一个整数 223
- 7.8.5 指针增1或减1 223
- 7.8.6 从一个指针中减去另一个指针 223
- 7.8.7 将一个指针赋予另一个指针 223
- 7.8.8 指向void的指针 224
- 7.8.9 指针的比较 224
- 7.9 指针和数组的关系 224
- 7.9.1 指针/偏移量表示法 224
- 7.9.2 指针/下标表示法 225
- 7.9.3 不能用指针算术运算来修改数组名 225
- 7.9.4 指针下标和指针偏移量的使用演示 225
- 7.9.5 用数组和指针实现字符串的复制 226
- 7.10 指针数组 227
- 7.11 案例研究:模拟扑克牌的洗牌和发牌 228
- 7.12 指向函数的指针 232
- 7.12.1 按升序或降序进行排序 232
- 7.12.2 使用函数指针来创建一个菜单驱动的系统 234
- 7.13 安全的C程序设计 236
- 第8章 C字符和字符串 252
- 8.1 引言 252
- 8.2 字符串和字符基础 253
- 8.3 字符处理函数库 254
- 8.3.1 函数isdigit,isalpha,isalnum和isxdigit 255
- 8.3.2 函数islower,isupper,tolower和toupper 256
- 8.3.3 函数isspace,iscntrl,ispunct,isprint和isgraph 257
- 8.4 字符串转换函数 258
- 8.4.1 函数strtod 258
- 8.4.2 函数strtol 259
- 8.4.3 函数strtoul 260
- 8.5 标准输入/输出库函数 260
- 8.5.1 函数fgets和putchar 261
- 8.5.2 函数getchar 261
- 8.5.3 函数sprintf 262
- 8.5.4 函数sscanf 263
- 8.6 字符串处理函数库中的字符串处理函数 263
- 8.6.1 函数strcpy和 strncpy 264
- 8.6.2 函数strcat和 strncat 264
- 8.7 字符串处理函数库中的比较函数 265
- 8.8 字符串处理函数库中的查找函数 266
- 8.8.1 函数strchr 267
- 8.8.2 函数strcspn 268
- 8.8.3 函数strpbrk 268
- 8.8.4 函数strrchr 268
- 8.8.5 函数strspn 269
- 8.8.6 函数strstr 269
- 8.8.7 函数strtok 270
- 8.9 字符串处理函数库中的内存处理函数 271
- 8.9.1 函数memcpy 271
- 8.9.2 函数memmove 272
- 8.9.3 函数memcmp 272
- 8.9.4 函数memchr 273
- 8.9.5 函数memset 273
- 8.10 字符串处理函数库中的其他函数 274
- 8.10.1 函数strerror 274
- 8.10.2 函数strlen 274
- 8.11 安全的C程序设计 275
- 第9章 C格式化输入/输出 285
- 9.1 引言 285
- 9.2 流 286
- 9.3 用printf函数实现格式化输出 286
- 9.4 打印整数 286
- 9.5 打印浮点数 287
- 9.5.1 转换说明符e,E或f 288
- 9.5.2 转换说明符g或G 288
- 9.5.3 浮点数转换说明符的使用演示 288
- 9.6 打印字符串或字符 289
- 9.7 其他的转换说明符 289
- 9.8 带域宽和精度的打印 290
- 9.8.1 在打印整数时指定域宽 290
- 9.8.2 在打印整数、浮点数和字符串时指定精度 291
- 9.8.3 同时指定域宽和精度 292
- 9.9 在printf函数的格式控制字符串中使用标记 292
- 9.9.1 右对齐和左对齐 292
- 9.9.2 用与不用 标记来打印正数和负数 293
- 9.9.3 使用空格标记 293
- 9.9.4 使用#标记 293
- 9.9.5 使用0标记 294
- 9.10 打印文本和转义序列 294
- 9.11 用scanf函数读取格式化的输入 294
- 9.11.1 scanf的语法 295
- 9.11.2 scanf的转换说明符 295
- 9.11.3 用scanf来读入整数 295
- 9.11.4 用scanf来读入浮点数 296
- 9.11.5 用scanf来读入字符和字符串 296
- 9.11.6 在scanf中使用扫描集 297
- 9.11.7 在scanf中指定域宽 298
- 9.11.8 在输入流中忽略掉特定字符 298
- 9.12 安全的C程序设计 299
- 第10章 结构体、共用体、位操作和枚举类型 305
- 10.1 引言 306
- 10.2 结构体的定义 306
- 10.2.1 自引用结构体 306
- 10.2.2 定义结构体类型的变量 307
- 10.2.3 结构体标记名 307
- 10.2.4 可对结构体实施的操作 307
- 10.3 结构体的初始化 308
- 10.4 用.和?>访问结构体成员 308
- 10.5 在函数中使用结构体 310
- 10.6 typ