种豆资源网

当前位置:首页 > 百科 > 百科综合 / 正文

C语言程式设计:现代方法:第2版

(2019-08-13 22:23:27) 百科综合
C语言程式设计:现代方法:第2版

C语言程式设计:现代方法:第2版

《C语言程式设计:现代方法:第2版》是2010年人民邮电出版社出版的图书,作者是K. N. King。

基本介绍

  • 书名:C语言程式设计:现代方法:第2版
  • 作者:K. N. King
  • 原版名称: C Programming: A Modern Approach, 2nd Edition
  • 出版社: W. W. Norton & Company   

基本信息

原书名: 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语言,书中强调标準 c,强调软体工程,不再强调“手工最佳化”。这一版中紧密结合了 c99标準,并与 c89标準进行对照,补充了 c99中的最新特性。本书分为 c语言的基础特性、 c语言的高级特性、 c语言标準库和参考资料 4个部分。每章末尾都有一个“问与答”小节给出一系列与该章内容相关的问题及答案,此外还包含适量的习题。

作者

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

标 签

搜索
随机推荐

Powered By 种豆资源网||