当前位置:在线查询网 > 在线百科全书查询 > C语言程序设计:现代方法:第2版

C语言程序设计:现代方法:第2版_在线百科全书查询


请输入要查询的词条内容:

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