《C Primer Plus 第4版 中文版》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:(美)Stephen Prata著;技桥工作室译
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2002
  • ISBN:7115100756
  • 页数:647 页
图书介绍:

第1章 概览 1

14.8.6 在结构中使用字符数组还是字符指针 41 1

目录 1

1.2 使用C语言的理由 2

1.1 C语言的起源 2

1.2.6 缺点 3

1.2.1 设计特性 3

1.2.2 高效性 3

1.2.3 可移植性 3

1.2.4 强大的功能和灵活性 3

1.2.5 面向编程人员 3

1.3 C语言的发展方向 4

1.5 高级计算机语言和编译器 5

1.4 计算机工作的基本原理 5

1.6.1 第1步:定义程序目标 6

1.6 使用C语言的7个步骤 6

1.6.5 第5步:运行程序 7

1.6.2 第2步:设计程序 7

1.6.3 第3步:编写代码 7

1.6.4 第4步:编译 7

1.7 编程机制 8

1.6.6 第6步:测试和调试程序 8

1.6.7 第7步:维护和修改程序 8

1.6.8 注释 8

1.7.1 目标代码文件、可执行文件和库 9

1.7.2 UNIX系统 10

1.7.3 Linux系统 11

1.7.5 IBM PC的DOS编译器 12

1.7.4 集成开发环境(Windows系统下) 12

1.8.1 第1个ANSI/ISO C标准 13

1.7.6 Macintosh上的C 13

1.8 语言标准 13

1.10 本书体例 14

1.8.2 C99标准 14

1.9 本书的组织结构 14

1.10.2 屏幕输出 15

1.10.1 字体 15

1.13 编程练习 16

1.11 总结 16

1.12 复习题 16

第2章 C语言概述 17

2.2.1 第一遍 快速简介 18

2.1 C语言的一个简单实例 18

2.2 解释 18

2.2.2 第二遍 细节 20

2.3 一个简单程序的结构 25

2.4 使程序可读的技巧 26

2.5.2 多个声明 27

2.5 更进一步 27

2.5.1 说明 27

2.6 多个函数 28

2.5.3 乘法 28

2.5.4 输出多个值 28

2.7 调试 29

2.7.2 语义错误 30

2.7.1 语法错误 30

2.7.3 程序状态 31

2.9 关键概念 32

2.8 关键字和保留标识符 32

2.11 复习题 33

2.10 总结 33

2.12 编程练习 34

第3章 数据和C 36

3.1 示例程序 37

3.2 变量与常量数据 38

3.3 数据:数据类型关键字 39

3.3.3 浮点数 40

3.3.1 整数类型与浮点数类型 40

3.3.2 整数 40

3.4.1 int类型 41

3.4 C数据类型 41

3.4.2 其他整数类型 43

3.4.3 使用字符:char类型 47

3.4.5 可移植的类型:inttypes.h 51

3.4.4 _Bool类型 51

3.4.6 float、double和long double类型 52

3.4.8 其他类型 55

3.4.7 复数和虚数类型 55

3.4.9 类型大小 57

3.6 参数和易犯的错误 58

3.5 使用数据类型 58

3.7 另一个例子 59

3.7.2 刷新输出 60

3.7.1 过程分析 60

3.10 复习题 61

3.8 关键概念 61

3.9 总结 61

3.11 编程练习 63

第4章 字符串和格式化输入/输出 64

4.1 前导程序 65

4.2.1 char数组类型和空字符 66

4.2 字符串简介 66

4.2.3 strlen()函数 67

4.2.2 使用字符串 67

4.3 常量和C预处理器 69

4.3.2 系统定义的明显常量 71

4.3.1 const修饰符 71

4.4.1 printf()函数 73

4.4 研究和利用printf()和scanf() 73

4.4.2 使用printf() 74

4.4.3 printf()的转换说明修饰符 75

4.4.4 转换的意义 79

4.4.5 使用scanf() 84

4.4.6 printf()和scanf()的*修饰符 87

4.5 用法提示 88

4.7 总结 89

4.6 关键概念 89

4.8 复习题 90

4.9 编程练习 91

第5章 运算符、表达式和语句 93

5.1 循环简介 94

5.2.1 赋值运算符:= 95

5.2 基本运算符 95

5.2.5 乘法运算符:* 97

5.2.2 加法运算符:+ 97

5.2.3 减法运算符:- 97

5.2.4 符号运算符:-和+ 97

5.2.6 除法运算符: 99

5.2.7 运算符的优先级 100

5.2.8 优先级和求值顺序 101

5.3.2 取模运算符:% 103

5.3 其他运算符 103

5.3.1 sizeof运算符和size t类型 103

5.3.3 增量和减量运算符:++和-- 104

5.3.4 减量:-- 107

5.3.6 不要太聪明 108

5.3.5 优先级 108

5.4.1 表达式 109

5.4 表达式和语句 109

5.4.2 语句 110

5.4.3 复合语句(代码块) 112

5.5 类型转换 113

5.6 带有参数的函数 115

5.7 一个示例程序 117

5.9 总结 118

5.8 关键概念 118

5.10 复习题 119

5.11 编程练习 121

第6章 C控制语句:循环 123

6.1 最初的例子 124

6.1.1 程序注解 125

6.2 while语句 126

6.1.2 C风格的读循环 126

6.2.3 while:入口条件循环 127

6.2.1 终止while循环 127

6.2.2 循环何时终止 127

6.2.4 语法要点 128

6.3 比较大小:使用关系运算符和表达式 129

6.3.1 什么是真 130

6.3.2 还有什么是真 131

6.3.3 真值的问题 132

6.3.4 新的Bool类型 133

6.3.5 关系运算符的优先级 134

6.5 for循环 136

6.4 不确定循环与计数循环 136

6.7 逗号运算符 141

6.6 更多赋值运算符:+=、-=、*=、/=和%= 141

6.8 退出条件循环:do while 145

6.10 嵌套循环 147

6.9 选择哪种循环 147

6.10.2 嵌套变化 148

6.10.1 程序讨论 148

6.11 数组 149

6.12 使用函数返回值的循环例子 151

6.12.1 程序讨论 153

6.14 总结 154

6.12.2 使用具有返回值的函数 154

6.13 关键概念 154

6.15 复习题 155

6.16 编程练习 159

第7章 C控制语句:分支和跳转 161

7.1 if语句 162

7.2 在if语句中添加else关键字 163

7.2.1 另一个例子:介绍getchar()和putchar() 165

7.2.2 ctype.h系列字符函数 166

7.2.3 多重选择else if 168

7.2.4 把else与if配对 170

7.2.5 多层嵌套的if 171

7.3 获得逻辑性 174

7.3.2 优先级 175

7.3.1 改变拼写法:iso646.h头文件 175

7.3.3 求值的顺序 176

7.4 一个统计字数的程序 177

7.3.4 范围 177

7.5 条件运算符?: 180

7.6 循环辅助手段:continue和break 181

7.6.1 continue语句 182

7.6.2 break语句 184

7.7 多重选择:switch和break 185

7.7.1 使用switch语句 186

7.7.3 多重标签 188

7.7.2 只读取一行的首字符 188

7.8 goto语句 190

7.7.4 switch和if else 190

7.10 总结 193

7.9 关键概念 193

7.11 复习题 194

7.12 编程练习 196

第8章 字符输入/输出和输入确认 199

8.1 单字符I/O:getchar()和putchar() 200

8.2 缓冲区 201

8.3.1 文件、流和键盘输入 202

8.3 终止键盘输入 202

8.3.2 文件结尾 203

8.4 重定向和文件 204

8.5.1 使用缓冲输入 208

8.5 创建一个更友好的用户界面 208

8.5.2 混合输入数字和字符 210

8.6 输入确认 212

8.6.1 分析程序 215

8.7 菜单浏览 216

8.6.2 输入流和数值 216

8.7.2 使执行更顺利 217

8.7.1 任务 217

8.7.3 混合字符和数值输入 219

8.9 总结 221

8.8 关键概念 221

8.11 编程练习 222

8.10 复习题 222

第9章 函数 224

9.1.1 编写和使用一个简单的函数 225

9.1 函数概述 225

9.1.2 程序分析 226

9.1.3 函数参数 228

9.1.4 定义带有参数的函数:形式参量 229

9.1.6 调用带有参数的函数:实际参数 230

9.1.5 带参数函数的原型声明 230

9.1.8 使用return从函数中返回一个值 231

9.1.7 黑盒子观点 231

9.2 ANSIC的函数原型 234

9.1.9 函数类型 234

9.2.1 产生的问题 235

9.2.2 ANSI的解决方案 236

9.3 递归 237

9.2.3 无参数和不确定参数 237

9.2.4 函数原型的优点 237

9.3.2 递归的基本原理 238

9.3.1 递归的使用 238

9.3.3 尾递归 239

9.3.4 递归和反向计算 241

9.3.5 递归的优缺点 242

9.5.2 Linux 243

9.4 所有C函数地位同等 243

9.5 多源代码文件程序的编译 243

9.5.1 UNIX 243

9.5.5 头文件的使用 244

9.5.3 DOS命令行编译器 244

9.5.4 Windows和Macintosh编译器 244

9.6 地址运算符:& 247

9.7 改变调用函数中的变量 248

9.8 指针简介 249

9.8.2 指针声明 250

9.8.1 间接运算符:* 250

9.8.3 使用指针在函数间通信 251

9.9 关键概念 254

9.11 复习题 255

9.10 总结 255

9.12 编程练习 256

第10章 数组和指针 257

10.1.1 初始化 258

10.1 数组 258

10.1.2 指定初始化项目(C99) 261

10.1.4 数组边界 262

10.1.3 为数组赋值 262

10.2 多维数组 264

10.1.5 指定数组大小 264

10.2.1 初始化二维数组 266

10.2.2 更多维数的数组 267

10.3 指针和数组 268

10.4 函数、数组和指针 270

10.4.1 使用指针参数 272

10.5 指针操作 274

10.4.2 评论:指针和数组 274

10.6 保护数组内容 276

10.6.1 对形式参量使用const 277

10.6.2 有关const的其他内容 278

10.7 指针和多维数组 280

10.7.1 指向多维数组的指针 282

10.7.2 指针兼容性 283

10.7.3 函数和多维数组 284

10.8 变长数组(VLA) 286

10.9 复合文字 289

10.11 总结 291

10.10 关键概念 291

10.12 复习题 292

10.13 编程练习 294

第11章 字符串和字符串函数 296

11.1 在程序中定义字符串 298

11.2 字符串数组及其初始化 299

11.2.1 数组与指针 300

11.2.2 字符串数组 301

11.2.3 指针和字符串 302

11.3.1 创建存储空间 303

11.3 字符串输入 303

11.3.2 gets()函数 304

11.3.3 fgets()函数 305

11.3.4 scanf()函数 306

11.4.1 puts()函数 307

11.4 字符串输出 307

11.4.2 fputs()函数 308

11.5 自定义字符串输入/输出函数 309

11.4.3 printf()函数 309

11.6.1 strlen()函数 311

11.6 字符串函数 311

11.6.2 strcat()和 strncat()函数 312

11.6.3 strcmp()和strncmp()函数 314

11.6.4 strcpy()和strncpy()函数 317

11.6.5 sprintf()函数 320

11.6.6 其他字符串函数 321

11.7 字符串例子:字符串排序 323

11.8 ctype.h字符函数和字符串 325

11.9 命令行参数 326

11.9.2 Macintosh的命令行参数 328

11.9.1 集成环境下的命令行参数 328

11.10 把字符串转换为数字 329

11.13 复习题 331

11.11 关键概念 331

11.12 总结 331

11.14 编程练习 334

第12章 存储类、链接和内存管理 336

12.1.1 作用域 337

12.1 存储类 337

12.1.2 链接 338

12.1.4 自动变量 339

12.1.3 存储时期 339

12.1.6 具有代码块作用域的静态变量 342

12.1.5 寄存器变量 342

12.1.7 具有外部链接的静态变量 343

12.1.10 存储类说明符 347

12.1.8 具有内部链接的静态变量 347

12.1.9 多文件 347

12.1.11 存储类和函数 349

12.2 随机数函数和静态变量 350

12.1.12 使用哪种存储类 350

12.3 掷骰子 353

12.3.1 分配内存:malloc()和free() 356

12.3.2 free()的重要性 358

12.3.4 动态内存分配与变长数组 359

12.3.3 函数calloc() 359

12.4.1 类型限定词const 360

12.3.5 存储类与动态内存分配 360

12.4 ANSI C的类型限定词 360

12.4.3 类型限定词restrict 362

12.4.2 类型限定词volatile 362

12.5 旧关键字的新位置 363

12.7 总结 364

12.6 关键概念 364

12.8 复习题 365

12.9 编程练习 366

第13章 文件输入/输出 369

13.1.1 文件是什么 370

13.1 和文件进行通信 370

13.2 标准I/O 371

13.1.2 I/O级别 371

13.1.3 标准文件 371

13.2.1 检查命令行参数 372

13.2.2 fopen()函数 373

13.2.4 文件结尾 374

13.2.3 getc()函数和putc()函数 374

13.3 一个简单的文件压缩程序 375

13.2.5 fclose()函数 375

13.2.6 标准文件 375

13.4.1 fprintf()和fscanf()函数 377

13.4 文件I/O:fprintf( )、fscanf( )、fgets( )和fputs( )函数 377

13.4.2 fgets()和fputs()函数 378

13.5 随机存取:fseek()和ftell()函数 379

13.5.1 fseek()和 ftell()如何工作 380

13.5.2 二进制模式和文本模式 381

13.6 标准I/O 内幕 382

13.5.3 可移植性 382

13.5.4 fgetpos()和 fsetpos()函数 382

13.7.1 int ungetc(int c,FILE*fp)函数 383

13.7 其他标准I/O函数 383

13.7.4 二进制I/O:fread()和 fwrite()函数 384

13.7.2 int fflush(FILE*fp)函数 384

13.7.3 int setvbuf(FILE*fp,char*buf,int mode,size_t size)函数 384

13.7.5 size_t fwrite(void*ptr,size_t size,size_t nmemb,FILE*fp)函数 385

13.7.8 一个例子 386

13.7.6 size_t fread(void*ptr,size_t size,size_t nmemb,FILE*fp)函数 386

13.7.7 int feof(FILE*fp)和int ferror(FILE*fp)函数 386

13.7.9 使用二进制I/O进行随机存取 388

13.8 关键概念 389

13.10 复习题 390

13.9 总结 390

13.11 编程练习 392

第14章 结构和其他数据形式 394

14.1 示例问题:创建书籍目录 395

14.3 定义结构变量 396

14.2 建立结构声明 396

14.3.1 初始化结构 397

14.4 访问结构成员 398

14.3.2 结构的指定初始化项目 398

14.5 结构数组 399

14.5.1 声明结构数组 400

14.5.3 程序讨论 401

14.5.2 标识结构数组的成员 401

14.6 嵌套结构 402

14.7 指向结构的指针 403

14.7.1 声明和初始化结构指针 404

14.8 向函数传递结构信息 405

14.7.2 使用指针访问成员 405

14.8.2 使用结构地址 406

14.8.1 传递结构成员 406

14.8.3 把结构作为参数传递 407

14.8.4 其他结构特性 408

14.8.5 结构,还是指向结构的指针 410

14.8.7 结构、指针和malloc() 412

14.8.8 复合文字和结构(C99) 414

14.8.9 伸缩型数组成员(C99) 415

14.8.10 使用结构数组的函数 416

14.9 把结构内容保存到文件中 418

14.11 联合简介 421

14.10 结构:下一步是什么 421

14.12.2 默认值 424

14.12.1 enum常量 424

14.12 枚举类型 424

14.12.4 用法 425

14.12.3 指定值 425

14.13 typedef简介 426

14.12.5 共享的名字空间 426

14.14 奇特的声明 428

14.15 函数和指针 429

14.16 关键概念 434

14.18 复习题 435

14.17 总结 435

14.19 编程练习 437

第15章 位操作 440

15.1.1 二进制整数 441

15.1 二进制数、位和字节 441

15.1.3 二进制浮点数 442

15.1.2 有符号整数 442

15.2.2 十六进制 443

15.2.1 十进制 443

15.2 其他基数 443

15.3.1 位逻辑运算符 444

15.3 C的位运算符 444

15.3.2 用法:掩码 445

15.3.4 用法:关闭位 446

15.3.3 用法:打开位 446

15.3.7 移位运算符 447

15.3.6 用法:查看一位的值 447

15.3.5 用法:转置位 447

15.3.8 编程实例 448

15.3.9 另一个实例 449

15.4 位字段 451

15.4.1 位字段实例 452

15.4.2 位字段和位运算符 454

15.5 关键概念 458

15.7 复习题 459

15.6 总结 459

15.8 编程练习 460

第16章 C预处理器和C库 462

16.2 明显常量:#define 463

16.1 第一步 463

16.2.2 重定义常量 466

16.2.1 语言符号 466

16.3 在#define中使用参数 467

16.3.2 预处理器的粘合剂:##运算符 469

16.3.1 利用宏参数创建字符串:#运算符 469

16.3.3 可变宏:...和____VA_ARGS____ 470

16.4 宏,还是函数 471

16.5 文件包含:#include 472

16.5.1 头文件:一个实例 473

16.5.2 使用头文件 474

16.6.2 已定义:C预处理器的观点 475

16.6.1 #undef指令 475

16.6 其他指令 475

16.6.3 条件编译 476

16.6.4 预定义宏 479

16.6.5 #line和#error 480

16.7 内联函数 481

16.6.6 #pragma 481

16.8.1 访问C库 483

16.8 C库 483

16.8.2 参考库描述 484

16.9 数学库 485

16.10.1 exit()和atexit()函数 487

16.10 通用工具库 487

16.10.2 qsort()函数 488

16.11 诊断库 492

16.12 string.h库中的memcpy()和memmove() 493

16.13 可变参数:stdarg.h 494

16.16 复习题 496

16.15 总结 496

16.14 关键概念 496

16.17 编程练习 497

第17章 高级数据表示 500

17.1 研究数据表示 501

17.2 从数组到链表 503

17.2.1 使用链表 506

17.2.2 反思 508

17.3 抽象数据类型(ADT) 509

17.3.2 构造接口 510

17.3.1 变得抽象 510

17.3.3 使用接口 513

17.3.4 实现接口 514

17.4 队列ADT 520

17.4.1 实现接口的数据表示 521

17.4.2 测试队列 528

17.5 用队列进行模拟 529

17.6 链表与数组 534

17.7 二叉搜索树 537

17.7.1 二叉树ADT 537

17.7.2 二叉搜索树的接口 538

17.7.3 二叉树的实现 540

17.7.4 试用树 551

17.7.5 树的思想 555

17.8 其他说明 556

17.10 总结 557

17.11 复习题 557

17.12 编程练习 557

17.9 关键概念 557

附录A 复习题答案 559

附录B 参考资料 590