词条 | C语言程序设计:现代方法:第2版 |
释义 | 基本信息原书名: C Programming: A Modern Approach, 2nd Edition 原出版社: W. W. Norton & Company作者: (美)K. N. King 译者: 吕秀锋 黄倩 丛书名: 图灵程序设计丛书 C/C++系列 出版社:人民邮电出版社 ISBN:9787115219572 上架时间:2010-3-16 出版日期:2010 年4月 开本:16开 页码:600 版次:2-1 内容简介时至今日, c语言仍然是计算机领域的通用语言之一,但今天的 c语言已经和最初的时候大不相同了。本书最主要的一个目的就是通过一种“现代方法”来介绍 c语言,书中强调标准 c,强调软件工程,不再强调“手工优化”。这一版中紧密结合了 c99标准,并与 c89标准进行对照,补充了 c99中的最新特性。本书分为 c语言的基础特性、 c语言的高级特性、 c语言标准库和参考资料 4个部分。每章末尾都有一个“问与答”小节给出一系列与该章内容相关的问题及答案,此外还包含适量的习题。 本书是为大学本科阶段的 c语言课程编写的教材,同时也非常适合作为其他课程的辅助用书。 作者K. N. King 世界知名的计算机程序设计教育家,现为佐治亚州立大学数学与计算机科学系副教授。他拥有耶鲁大学计算机科学硕士学位,加州大学伯克利分校计算机科学博士学位,曾任教于佐治亚理工学院。除本书外,他还撰写了广受欢迎的著作Modula-2: A Complete Guide 和Java Programming: From the Beginning,并在Dr.Dobb's Journal等权威杂志上发表了许多文章。业余时间,King教授还在多部电影中扮演过角色。 吕秀锋 亚洲理工大学( AIT )计算机软件硕士,现为北京理工大学软件学院教师。 目录第1章 c语言概述 1 1.1 c语言的历史 1 1.1.1 起源 1 1.1.2 标准化 1 1.1.3 基于c的语言 2 1.2 c语言的优缺点 3 1.2.1 c语言的优点 3 1.2.2 c语言的缺点 3 1.2.3 高效地使用c语言 4 问与答 5 第2章 c语言基本概念 7 2.1 编写一个简单的c程序 7 程序 显示双关语 7 2.1.1 编译和链接 8 2.1.2 集成开发环境 8 2.2 简单程序的一般形式 9 2.2.1 指令 9 2.2.2 函数 9 2.2.3 语句 10 2.2.4 显示字符串 10 .2.3 注释 11 2.4 变量和赋值 12 2.4.1 类型 12 2.4.2 声明 13 2.4.3 赋值 13 2.4.4 显示变量的值 14 程序 计算箱子的空间重量 14 2.4.5 初始化 15 2.4.6 显示表达式的值 16 2.5 读入输入 16 程序 计算箱子的空间重量(改进版) 16 2.6 定义常量的名字 17 程序 华氏温度转换为摄氏温度 17 2.7 标识符 18 2.8 c程序的书写规范 19 问与答 21 练习题 23 编程题 24 第3章 格式化输入/输出 26 3.1 printf函数 26 3.1.1 转换说明 27 程序 用printf函数格式化数 28 3.1.2 转义序列 28 3.2 scanf函数 29 3.2.1 scanf函数的工作方法 30 3.2.2 格式串中的普通字符 31 3.2.3 易混淆的printf函数和scanf 函数 32 程序 分数相加 32 问与答 33 练习题 34 编程题 35 第4章 表达式 36 4.1 算术运算符 36 程序 计算通用产品代码的校验位 38 4.2 赋值运算符 39 4.2.1 简单赋值 40 4.2.2 左值 41 4.2.3 复合赋值 41 4.3 自增运算符和自减运算符 42 4.4 表达式求值 43 4.5 表达式语句 45 问与答 45 练习题 47 编程题 49 第5章 选择语句 50 5.1 逻辑表达式 50 5.1.1 关系运算符 50 5.1.2 判等运算符 51 5.1.3 逻辑运算符 51 5.2 if语句 52 5.2.1 复合语句 53 5.2.2 else子句 53 5.2.3 级联式if语句 54 程序 计算股票经纪人的佣金 55 5.2.4 “悬空else”的问题 56 5.2.5 条件表达式 57 5.2.6 c89中的布尔值 58 5.2.7 c99中的布尔值 58 5.3 switch语句 59 程序 显示法定格式的日期 61 问与答 62 练习题 65 编程题 67 第6章 循环 69 6.1 while语句 69 程序 显示平方表 71 程序 数列求和 71 6.2 do语句 72 程序 计算整数的位数 73 6.3 for语句 73 6.3.1 for语句的惯用法 74 6.3.2 在for语句中省略表达式 75 6.3.3 c99中的for语句 75 6.3.4 逗号运算符 76 程序 显示平方表(改进版) 77 6.4 退出循环 78 6.4.1 break语句 78 6.4.2 continue语句 78 6.4.3 goto语句 79 程序 账簿结算 80 6.5 空语句 81 问与答 83 练习题 84 编程题 85 第7章 基本类型 88 7.1 整数类型 88 7.1.1 c99中的整数类型 90 7.1.2 整数常量 90 7.1.3 c99中的整数常量 91 7.1.4 整数溢出 91 7.1.5 读/写整数 91 程序 数列求和(改进版) 92 7.2 浮点类型 93 7.2.1 浮点常量 94 7.2.2 读/写浮点数 94 7.3 字符类型 94 7.3.1 字符操作 95 7.3.2 有符号字符和无符号字符 95 7.3.3 算术类型 96 7.3.4 转义序列 96 7.3.5 字符处理函数 97 7.3.6 用scanf和printf读/写字符 98 7.3.7 用getchar和putchar读/写 字符 98 程序 确定消息的长度 99 7.4 类型转换 100 7.4.1 常用算术转换 101 7.4.2 赋值过程中的转换 102 7.4.3 c99中的隐式转换 103 7.4.4 强制类型转换 103 7.5 类型定义 105 7.5.1 类型定义的优点 105 7.5.2 类型定义和可移植性 105 7.6 sizeof运算符 106 问与答 107 练习题 109 编程题 110 第8章 数组 113 8.1 一维数组 113 8.1.1 数组下标 113 程序 数列反向 115 8.1.2 数组初始化 115 8.1.3 指定初始化式 116 程序 检查数中重复出现的数字 116 8.1.4 对数组使用sizeof运算符 117 程序 计算利息 118 8.2 多维数组 119 8.2.1 多维数组初始化 120 8.2.2 常量数组 121 程序 发牌 121 8.3 c99中的变长数组 122 问与答 123 练习题 124 编程题 125 第9章 函数 129 9.1 函数的定义和调用 129 程序 计算平均值 129 程序 显示倒计数 130 程序 显示双关语(改进版) 131 9.1.1 函数定义 132 9.1.2 函数调用 133 程序 判定素数 134 9.2 函数声明 135 9.3 实际参数 136 9.3.1 实际参数的转换 137 9.3.2 数组型实际参数 138 9.3.3 变长数组形式参数 140 9.3.4 在数组参数声明中使用 static 141 9.3.5 复合字面量 141 9.4 return语句 142 9.5 程序终止 143 9.6 递归 144 程序 快速排序 146 问与答 147 练习题 150 编程题 153 第10章 程序结构 155 10.1 局部变量 155 10.1.1 静态局部变量 156 10.1.2 形式参数 156 10.2 外部变量 156 10.2.1 示例:用外部变量实现栈 156 10.2.2 外部变量的利与弊 157 程序 猜数 158 10.3 程序块 161 10.4 作用域 162 10.5 构建c程序 163 程序 给一手牌分类 163 问与答 169 练习题 169 编程题 170 第11章 指针 172 11.1 指针变量 172 11.2 取地址运算符和间接寻址运算符 173 11.2.1 取地址运算符 173 11.2.2 间接寻址运算符 174 11.3 指针赋值 174 11.4 指针作为参数 176 程序 找出数组中的最大元素和最 小元素 177 11.5 指针作为返回值 179 问与答 180 练习题 181 编程题 182 第12章 指针和数组 184 12.1 指针的算术运算 184 12.1.1 指针加上整数 185 12.1.2 指针减去整数 185 12.1.3 两个指针相减 186 12.1.4 指针比较 186 12.1.5 指向复合常量的指针 186 12.2 指针用于数组处理 186 12.3 用数组名作为指针 188 程序 数列反向(改进版) 189 12.3.1 数组型实际参数(改进版) 189 12.3.2 用指针作为数组名 191 12.4 指针和多维数组 191 12.4.1 处理多维数组的元素 191 12.4.2 处理多维数组的行 192 12.4.3 处理多维数组的列 192 12.4.4 用多维数组名作为指针 192 12.5 c99中的指针和变长数组 193 问与答 194 练习题 195 编程题 197 第13章 字符串 198 13.1 字符串字面量 198 13.1.1 字符串字面量中的转义序列 198 13.1.2 延续字符串字面量 199 13.1.3 如何存储字符串字面量 199 13.1.4 字符串字面量的操作 200 13.1.5 字符串字面量与字符常量 200 13.2 字符串变量 200 13.2.1 初始化字符串变量 201 13.2.2 字符数组与字符指针 202 13.3 字符串的读和写 203 13.3.1 用printf函数和puts函数 写字符串 203 13.3.2 用scanf函数和gets函数读 字符串 203 13.3.3 逐个字符读字符串 204 13.4 访问字符串中的字符 205 13.5 使用c语言的字符串库 206 13.5.1 strcpy函数 207 13.5.2 strlen函数 208 13.5.3 strcat函数 208 13.5.4 strcmp函数 209 程序 显示一个月的提醒列表 209 13.6 字符串惯用法 211 13.6.1 搜索字符串的结尾 211 13.6.2 复制字符串 213 13.7 字符串数组 214 程序 核对行星的名字 217 问与答 218 练习题 220 编程题 222 第14章 预处理器 225 14.1 预处理器的工作原理 225 14.2 预处理指令 227 14.3 宏定义 227 14.3.1 简单的宏 227 14.3.2 带参数的宏 229 14.3.3 #运算符 231 14.3.4 ##运算符 231 14.3.5 宏的通用属性 232 14.3.6 宏定义中的圆括号 233 14.3.7 创建较长的宏 233 14.3.8 预定义宏 234 14.3.9 c99中新增的预定义宏 235 14.3.10 空的宏参数 236 14.3.11 参数个数可变的宏 236 14.3.12 __func__标识符 237 14.4 条件编译 237 14.4.1 #if指令和#endif指令 238 14.4.2 defined运算符 238 14.4.3 #ifdef指令和#ifndef 指令 239 14.4.4 #elif指令和#else指令 239 14.4.5 使用条件编译 240 14.5 其他指令 240 14.5.1 #error指令 240 14.5.2 #line指令 241 14.5.3 #pragma指令 242 14.5.4 _pragma运算符 242 问与答 243 练习题 245 第15章 编写大型程序 248 15.1 源文件 248 15.2 头文件 249 15.2.1 #include指令 249 15.2.2 共享宏定义和类型定义 250 15.2.3 共享函数原型 251 15.2.4 共享变量声明 252 15.2.5 嵌套包含 253 15.2.6 保护头文件 253 15.2.7 头文件中的#error指令 254 15.3 把程序划分成多个文件 254 程序 文本格式化 255 15.4 构建多文件程序 260 15.4.1 makefile 260 15.4.2 链接期间的错误 262 15.4.3 重新构建程序 262 15.4.4 在程序外定义宏 264 问与答 264 练习题 265 编程题 266 第16章 结构、联合和枚举 267 16.1 结构变量 267 16.1.1 结构变量的声明 267 16.1.2 结构变量的初始化 269 16.1.3 指定初始化 269 16.1.4 对结构的操作 270 16.2 结构类型 270 16.2.1 结构标记的声明 271 16.2.2 结构类型的定义 272 16.2.3 结构作为参数和返回值 272 16.2.4 复合字面量 273 16.3 嵌套的数组和结构 274 16.3.1 嵌套的结构 274 16.3.2 结构数组 274 16.3.3 结构数组的初始化 275 程序 维护零件数据库 275 16.4 联合 281 16.4.1 用联合来节省空间 282 16.4.2 用联合来构造混合的数据 结构 284 16.4.3 为联合添加“标记字段” 284 16.5 枚举 285 16.5.1 枚举标记和类型名 286 16.5.2 枚举作为整数 286 16.5.3 用枚举声明“标记字段” 286 问与答 287 练习题 289 编程题 293 第17章 指针的高级应用 294 17.1 动态存储分配 294 17.1.1 内存分配函数 294 17.1.2 空指针 295 17.2 动态分配字符串 296 17.2.1 使用malloc函数为字符串 分配内存 296 17.2.2 在字符串函数中使用动态 存储分配 296 17.2.3 动态分配字符串的数组 297 程序 显示一个月的提醒列表 (改进版) 297 17.3 动态分配数组 299 17.3.1 使用malloc函数为数组分配 存储空间 299 17.3.2 calloc函数 300 17.3.3 realloc函数 300 17.4 释放存储空间 301 17.4.1 free函数 301 17.4.2 “悬空指针”问题 301 17.5 链表 302 17.5.1 声明结点类型 302 17.5.2 创建结点 303 17.5.3 -)运算符 303 17.5.4 在链表的开始处插入结点 304 17.5.5 搜索链表 306 17.5.6 从链表中删除结点 307 17.5.7 有序链表 308 程序 维护零件数据库(改进版) 309 17.6 指向指针的指针 313 17.7 指向函数的指针 314 17.7.1 函数指针作为参数 314 17.7.2 qsort函数 314 17.7.3 函数指针的其他用途 316 程序 列三角函数表 317 17.8 受限指针 318 17.9 灵活数组成员 319 问与答 320 练习题 323 编程题 325 第18章 声明 327 18.1 声明的语法 327 18.2 存储类型 328 18.2.1 变量的性质 328 18.2.2 auto存储类型 329 18.2.3 static存储类型 329 18.2.4 extern存储类型 330 18.2.5 register存储类型 331 18.2.6 函数的存储类型 332 18.2.7 小结 332 18.3 类型限定符 333 18.4 声明符 334 18.4.1 解释复杂声明 335 18.4.2 使用类型定义来简化声明 336 18.5 初始化式 336 18.6 内联函数 337 18.6.1 内联定义 338 18.6.2 对内联函数的限制 339 18.6.3 在gcc中使用内联函数 339 问与答 339 练习题 342 第19章 程序设计 345 19.1 模块 345 19.1.1 内聚性与耦合性 347 19.1.2 模块的类型 347 19.2 信息隐藏 347 19.3 抽象数据类型 350 19.3.1 封装 351 19.3.2 不完整类型 351 19.4 栈抽象数据类型 352 19.4.1 为栈抽象数据类型定义接口 352 19.4.2 用定长数组实现栈抽象数据 类型 353 19.4.3 改变栈抽象数据类型中数据 项的类型 354 19.4.4 用动态数组实现栈抽象数据 类型 355 19.4.5 用链表实现栈抽象数据类型 357 19.5 抽象数据类型的设计问题 359 19.5.1 命名惯例 359 19.5.2 错误处理 359 19.5.3 通用抽象数据类型 359 19.5.4 新语言中的抽象数据类型 360 问与答 360 练习题 361 编程题 362 第20章 底层程序设计 363 20.1 位运算符 363 20.1.1 移位运算符 363 20.1.2 按位求反运算符、按位与运 算符、按位异或运算符和按 位或运算符 364 20.1.3 用位运算符访问位 365 20.1.4 用位运算符访问位域 366 程序 xor加密 366 20.2 结构中的位域 367 20.3 其他底层技术 369 20.3.1 定义依赖机器的类型 369 20.3.2 用联合提供数据的多个视角 370 20.3.3 将指针作为地址使用 371 程序 查看内存单元 371 20.3.4 volatile类型限定符 373 问与答 374 练习题 374 编程题 376 第21章 标准库 377 21.1 标准库的使用 377 21.1.1 对标准库中所用名字的 限制 377 21.1.2 使用宏隐藏的函数 378 21.2 c89标准库概述 378 21.3 c99标准库更新 380 21.4 (stddef.h):常用定义 381 21.5 (stdbool.h):布尔类型和值 381 问与答 382 练习题 382 编程题 383 第22章 输入/输出 384 22.1 流 384 22.1.1 文件指针 385 22.1.2 标准流和重定向 385 22.1.3 文本文件与二进制文件 385 22.2 文件操作 386 22.2.1 打开文件 386 22.2.2 模式 387 22.2.3 关闭文件 388 22.2.4 为打开的流附加文件 389 22.2.5 从命令行获取文件名 389 程序 检查文件是否可以打开 389 22.2.6 临时文件 390 22.2.7 文件缓冲 391 22.2.8 其他文件操作 392 22.3 格式化的输入/输出 393 22.3.1 …printf函数 393 22.3.2 …printf转换说明 393 22.3.3 c99对…printf转换说明的 修改 395 22.3.4 …printf转换说明示例 396 22.3.5 …scanf函数 398 22.3.6 …scanf格式串 398 22.3.7 …scanf转换说明 398 22.3.8 c99对...scanf转换说明的 改变 400 22.3.9 scanf示例 400 22.3.10 检测文件末尾和错误条件 401 22.4 字符的输入/输出 403 22.4.1 输出函数 403 22.4.2 输入函数 403 程序 复制文件 404 22.5 行的输入/输出 405 22.5.1 输出函数 405 22.5.2 输入函数 406 22.6 块的输入/输出 406 22.7 文件定位 407 程序 修改零件记录文件 409 22.8 字符串的输入/输出 409 22.8.1 输出函数 410 22.8.2 输入函数 410 问与答 411 练习题 414 编程题 416 第23章 库对数值和字符数据的支持 419 23.1 (float.h):浮点类型的特性 419 23.2 (limits.h):整数类型的大小 421 23.3 (math.h):数学计算(c89) 422 23.3.1 错误 422 23.3.2 三角函数 422 23.3.3 双曲函数 423 23.3.4 指数函数和对数函数 423 23.3.5 幂函数 424 23.3.6 就近取整函数、绝对值函数 和取余函数 424 23.4 (math.h):数学计算(c99) 425 23.4.1 ieee浮点标准 425 23.4.2 类型 426 23.4.3 宏 426 23.4.4 错误 426 23.4.5 函数 427 23.4.6 分类宏 427 23.4.7 三角函数 428 23.4.8 双曲函数 428 23.4.9 指数函数和对数函数 429 23.4.10 幂函数和绝对值函数 430 23.4.11 误差函数和伽玛函数 430 23.4.12 就近取整函数 431 23.4.13 取余函数 432 23.4.14 操作函数 432 23.4.15 最大值函数、最小值函数 和正差函数 433 23.4.16 浮点乘加 433 23.4.17 比较宏 434 23.5 (ctype.h):字符处理 434 23.5.1 字符分类函数 435 程序 测试字符分类函数 436 23.5.2 字符大小写映射函数 437 程序 测试大小写映射函数 437 23.6 (string.h):字符串处理 437 23.6.1 复制函数 437 23.6.2 拼接函数 438 23.6.3 比较函数 439 23.6.4 搜索函数 440 23.6.5 其他函数 442 问与答 442 练习题 443 编程题 444 第24章 错误处理 446 24.1 (assert.h):诊断 446 24.2 (errno.h):错误 447 24.3 (signal.h):信号处理 448 24.3.1 信号宏 449 24.3.2 signal函数 449 24.3.3 预定义的信号处理函数 450 24.3.4 raise函数 450 程序 测试信号 451 24.4 (setjmp.h):非局部跳转 452 程序 测试setjmp和longjmp 452 问与答 453 练习题 454 第25章 国际化特性 456 25.1 (locale.h):本地化 456 25.1.1 类别 456 25.1.2 setlocale函数 457 25.1.3 localeconv函数 458 25.2 多字节字符和宽字符 461 25.2.1 多字节字符 461 25.2.2 宽字符 461 25.2.3 统一码和通用字符集 462 25.2.4 统一码编码 462 25.2.5 多字节/宽字符转换函数 463 25.2.6 多字节/宽字符串转换函数 465 25.3 双字符和三字符 465 25.3.1 三字符 465 25.3.2 双字符 466 25.3.3 (iso646.h):拼写替换 467 25.4 通用字符名 467 25.5 (wchar.h):扩展的多字节和宽字符 实用工具 467 25.5.1 流倾向 468 25.5.2 格式化宽字符输入/输出 函数 468 25.5.3 宽字符输入/输出函数 470 25.5.4 通用的宽字符串实用工具 471 25.5.5 宽字符时间转换函数 474 25.5.6 扩展的多字节/宽字符转换 实用工具 474 25.6 (wctype.h):宽字符分类和映射实 用工具 477 25.6.1 宽字符分类函数 477 25.6.2 可扩展的宽字符分类函数 478 25.6.3 宽字符大小写映射函数 478 25.6.4 可扩展的宽字符大小写映射 函数 478 问与答 479 练习题 479 编程题 480 第26章 其他库函数 482 26.1 (stdarg.h):可变参数 482 26.1.1 调用带有可变参数列表的 函数 483 26.1.2 v…printf函数 484 26.1.3 v…scanf函数 485 26.2 (stdlib.h):通用的实用工具 485 26.2.1 数值转换函数 485 程序 测试数值转换函数 486 26.2.2 伪随机序列生成函数 488 程序 测试伪随机序列生成函数 488 26.2.3 与环境的通信 489 26.2.4 搜索和排序实用工具 490 程序 确定航空里程 491 26.2.5 整数算术运算函数 492 26.3 (time.h):日期和时间 492 26.3.1 时间处理函数 493 26.3.2 时间转换函数 495 程序 显示日期和时间 498 问与答 500 练习题 501 编程题 502 第27章 c99对数学计算的新增支持 503 27.1 (stdint.h):整数类型 503 27.1.1 (stdint.h)类型 503 27.1.2 对指定宽度整数类型的限制 504 27.1.3 对其他整数类型的限制 505 27.1.4 用于整数常量的宏 505 27.2 (inttypes.h):整数类型的格式 转换 506 27.2.1 用于格式说明符的宏 506 27.2.2 用于最大宽度整数类型的 函数 507 27.3 复数 508 27.3.1 复数的定义 508 27.3.2 复数的算术运算 509 27.3.3 c99中的复数类型 509 27.3.4 复数的运算 510 27.3.5 复数类型的转换规则 510 27.4 (complex.h):复数算术运算 511 27.4.1 (complex.h)宏 511 27.4.2 cx_limited_range编译 提示 512 27.4.3 (complex.h)函数 512 27.4.4 三角函数 512 27.4.5 双曲函数 513 27.4.6 指数函数和对数函数 514 27.4.7 幂函数和绝对值函数 514 27.4.8 操作函数 514 程序 求二次方程的根 515 27.5 (tgmath.h):泛型数学 515 27.5.1 泛型宏 516 27.5.2 调用泛型宏 517 27.6 (fenv.h):浮点环境 518 27.6.1 浮点状态标志和控制模式 518 27.6.2 (fenv.h)宏 519 27.6.3 fenv_access编译提示 519 27.6.4 浮点异常函数 520 27.6.5 舍入函数 520 27.6.6 环境函数 521 问与答 521 练习题 522 编程题 523 附录a c语言运算符 524 附录b c99与c89的比较 525 附录c c89与经典c的比较 529 附录d 标准库函数 532 附录e ascii字符集 569 参考文献 570 索引 573 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。