当前位置:首页 > 工业技术
C语言大学教程  第8版
C语言大学教程  第8版

C语言大学教程 第8版PDF电子书下载

工业技术

  • 电子书积分:20 积分如何计算积分?
  • 作 者:(美)保罗·戴特尔(PaulDeitel),哈维·戴特尔(HarveyDeitel)著;苏小红,王甜甜,李佩琦等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2017
  • ISBN:9787121316814
  • 页数:735 页
图书介绍:本书是全球畅销的C语言教程之一。全书系统地介绍了4种当今流行的程序设计方法——面向过程、基于对象、面向对象以及泛型编程,内容全面、生动、易懂,作者由浅入深地介绍了结构化编程及软件工程的基本概念,从简单的概念到最终的完整的语言描述,清晰、准确、透彻、详细地讲解了C语言,尤其注重程序设计思想和方法的介绍。相对于上一版,这一版在内容方面新增加了C安全程序设计、”更上一层楼”练习集,更新了C++和面向对象程序设计、基于Allegro的游戏编程、C99标准介绍等内容。
《C语言大学教程 第8版》目录

第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 用数组来统计投掷骰子60000000次的结果 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 typedef的使用 310

10.7 实例分析:高性能的洗牌与发牌模拟 311

10.8 共用体 313

10.8.1 声明一个共用体 313

10.8.2 可对共用体执行的操作 313

10.8.3 在声明语句中对共用体进行初始化 313

10.8.4 使用共用体的演示 314

10.9 位运算符 315

10.9.1 按位显示一个无符号整数 315

10.9.2 使函数displayBits更具可扩展性和可移植性 316

10.9.3 按位与、按位或、按位异或和按位取反运算符的使用 317

10.9.4 按位左移和按位右移运算符的使用 319

10.9.5 按位运算后赋值运算符 320

10.10 位域 321

10.10.1 位域的定义 321

10.10.2 用位域来表示一张纸牌的花色、牌面值和颜色 321

10.10.3 无名位域 323

10.11 枚举常量 323

10.12 匿名的结构体和共用体 324

10.13 安全的C程序设计 325

第11章 文件处理 334

11.1 引言 334

11.2 文件与流 334

11.3 顺序存取文件的创建 335

11.3.1 指向FILE结构体类型的指针 336

11.3.2 用函数fopen打开文件 336

11.3.3 用函数feof来检查文件结束标记 337

11.3.4 用函数fprintf向文件写入数据 337

11.3.5 用函数fclose来关闭文件 337

11.3.6 文件打开模式 338

11.4 从顺序存取文件中读取数据 339

11.4.1 文件位置指针的复位 340

11.4.2 信用查询程序 340

11.5 随机存取文件 343

11.6 随机存取文件的创建 343

11.7 随机地向一个随机存取文件中写入数据 345

11.7.1 用函数fseek来定位文件位置指针 346

11.7.2 出错检查 347

11.8 从一个随机存取文件中读取数据 347

11.9 案例研究:事务处理程序 348

11.10 安全的C程序设计 352

第12章 C数据结构 361

12.1 引言 361

12.2 自引用结构体 362

12.3 动态内存分配 362

12.4 链表 363

12.4.1 insert函数 367

12.4.2 delete函数 368

12.4.3 printList函数 369

12.5 堆栈 370

12.5.1 push函数 372

12.5.2 pop函数 373

12.5.3 堆栈的应用 373

12.6 队列 374

12.6.1 enqueue函数 377

12.6.2 dequeue函数 378

12.7 树 378

12.7.1 insertNode函数 381

12.7.2 遍历函数inOrder,preOrder和postOrder 381

12.7.3 消除冗余 382

12.7.4 二元树搜索 382

12.7.5 二元树的其他操作 382

12.8 安全的C程序设计 382

第13章 C预处理 392

13.1 引言 392

13.2 #include预处理命令 393

13.3 #define预处理命令:符号常量 393

13.4 #define预处理命令:宏 394

13.4.1 带一个参数的宏 394

13.4.2 带两个参数的宏 395

13.4.3 宏连续符 395

13.4.4 #undef预处理命令 395

13.4.5 标准库函数和宏 395

13.4.6 不要把带有副作用的表达式放在宏中 395

13.5 条件编译 395

13.5.1 # if...# endif预处理命令 395

13.5.2 用# if...# endif将代码块注释起来 396

13.5.3 对调试代码的条件编译 396

13.6 #error和#pragma预处理命令 396

13.7 #和##运算符 397

13.8 行号 397

13.9 预定义的符号常量 397

13.10 断言 398

13.11 安全的C程序设计 398

第14章 C语言的其他专题 402

14.1 引言 402

14.2 I/O的重定向 402

14.2.1 用<来重定向输入 403

14.2.2 用|来重定向输入 403

14.2.3 重定向输出 403

14.3 可变长的参数列表 403

14.4 使用命令行实参 405

14.5 编译由多个源文件组成的程序 406

14.5.1 在别的文件中对全局变量进行extern声明 406

14.5.2 函数原型 406

14.5.3 用static来限制作用域 407

14.5.4 Makefile 407

14.6 使用exit和atexit终止程序 407

14.7 整型和浮点型常量的后缀 408

14.8 信号处理 409

14.9 动态内存分配:函数calloc和realloc 410

14.10 用goto实现无条件转移 411

第15章 C++,一个更好的C:介绍对象技术 416

15.1 引言 417

15.2 C++ 417

15.3 简单程序:两个整数相加 417

15.3.1 用C++编写加法程序 417

15.3.2 <iostream>头文件 418

15.3.3 main函数 418

15.3.4 变量声明 418

15.3.5 标准输出流和标准输入流对象 418

15.3.6 std::endl流操纵符 418

15.3.7 关于std::的说明 419

15.3.8 级联的流输出 419

15.3.9 main函数中的return语句不是必需的 419

15.3.10 运算符重载 419

15.4 C++标准库 419

15.5 头文件 420

15.6 内联函数 421

15.7 C++关键字 422

15.8 引用和引用形参 423

15.8.1 引用形参 423

15.8.2 按值和按引用传参 423

15.8.3 函数体内引用作为别名 425

15.8.4 从函数返回引用 426

15.8.5 未初始化的引用的错误提示信息 426

15.9 空形参列表 426

15.10 默认实参 426

15.11 一元作用域运算符 428

15.12 函数重载 429

15.13 函数模板 431

15.13.1 定义一个函数模板 431

15.13.2 使用函数模板 431

15.14 对象技术与UML简介 432

15.14.1 对象技术基本概念 433

15.14.2 类、数据成员和成员函数 434

15.14.3 面向对象分析与设计 434

15.14.4 统一建模语言 435

15.15 C++标准库类模板vector简介 435

15.15.1 C风格的基于指针的数组 435

15.15.2 使用类模板vector 435

15.15.3 异常处理:处理下标越界 439

15.16 本章小结 439

第16章 类:对象和字符串简介 444

16.1 引言 444

16.2 定义一个具有成员函数的类 444

16.3 定义一个有参成员函数 446

16.4 数据成员,set成员函数与get成员函数 449

16.5 用构造函数初始化对象 453

16.6 将类放在单独的文件中以增强重用性 455

16.7 将接口与实现分离 458

16.8 用set函数验证数据 462

16.9 本章小结 465

第17章 类:深入剖析;抛出异常 471

17.1 引言 471

17.2 Time类的案例学习 472

17.3 类域和访问类的成员 477

17.4 访问函数和工具函数 477

17.5 Time类的案例学习:具有默认实参的构造函数 478

17.6 析构函数 482

17.7 构造函数与析构函数的调用时间 482

17.8 Time类的案例学习:隐蔽陷阱——返回private数据成员的引用或指针 485

17.9 默认按成员赋值 487

17.10 const对象和const成员函数 488

17.11 组合:对象作为类的成员 490

17.12 友元函数和友元类 494

17.13 使用this指针 495

17.14 static类成员 499

17.15 本章小结 503

第18章 运算符重载;string类 511

18.1 引言 511

18.2 使用标准库模板类string中的重载运算符 512

18.3 运算符重载基础 514

18.4 重载二元运算符 515

18.5 重载流插入和流读取运算符 516

18.6 重载一元运算符 518

18.7 重载一元前置和后置++和--运算符 519

18.8 案例学习:Date类 520

18.9 动态内存管理 523

18.10 案例学习:Array类 525

18.10.1 使用Array类 525

18.10.2 Array类定义 528

18.11 作为类的成员和作为非成员函数的运算符函数的比较 534

18.12 类型转换 534

18.13 explicit构造函数和转换运算符 535

18.14 重载函数调用运算符() 537

18.15 本章小结 537

第19章 面向对象编程:继承 546

19.1 引言 546

19.2 基类和派生类 547

19.3 基类和派生类的关系 548

19.3.1 创建并使用CommissionEmployee类 549

19.3.2 不用继承创建BasePlusCommissionEmployee类 552

19.3.3 创建CommissionEmployee-BasePlusCommissionEmployee继承层次结构 556

19.3.4 使用protected数据的CommissionEmployee-BasePlusCommission-Employee继承层次结构 559

19.3.5 使用private数据的CommissionEmployee-BasePlusCommission Employee继承层次结构 561

19.4 派生类的构造函数与析构函数 565

19.5 public,protected和private继承 566

19.6 关于继承的软件工程 567

19.7 本章小结 567

第20章 面向对象编程:多态 571

20.1 引言 571

20.2 多态简介:多态的视频游戏 572

20.3 继承层次结构中对象间的关系 572

20.3.1 派生类对象调用基类的函数 573

20.3.2 派生类指针指向基类对象 575

20.3.3 用基类指针调用派生类成员函数 576

20.3.4 虚函数和虚析构函数 577

20.4 类型域和switch语句 582

20.5 抽象类和纯虚函数 582

20.6 案例学习:利用多态的工资系统 583

20.6.1 创建抽象基类Employee 584

20.6.2 创建具体的派生类SalariedEmployee 587

20.6.3 创建具体的派生类CommissionEmployee 588

20.6.4 创建间接的具体派生类BasePlusCommissionEmployee 590

20.6.5 演示多态处理 591

20.7 (选讲)多态、虚函数以及动态联编的“幕后机制” 594

20.8 案例学习:利用多态的和运行时类型信息的工资系统,通过向下类型转换,dynamic_cast,typeid以及type_info使用运行时类型信息 596

20.9 本章小结 599

第21章 输入/输出流:深入学习 603

21.1 引言 603

21.2 流 604

21.2.1 传统流与标准流的比较 604

21.2.2 iostream类库头文件 605

21.2.3 输入/输出流类和对象 605

21.3 输出流 606

21.3.1 输出char*变量 607

21.3.2 用成员函数put输出字符 607

21.4 输入流 607

21.4.1 成员函数get和getline 608

21.4.2 istream类的成员函数peek,putback和ignore 610

21.4.3 类型安全的I/O 610

21.5 用read,write和gcount进行无格式I/O 610

21.6 流操纵符简介 611

21.6.1 设置整数流的基数:dec,oct,hex和setbase 611

21.6.2 设置浮点数精度(precision,setprecision) 612

21.6.3 设置域宽(width,setw) 613

21.6.4 用户定义的输出流操纵符 614

21.7 流格式状态和流操纵符 614

21.7.1 设置尾数零和十进制小数点(showpoint) 615

21.7.2 设置对齐(left,right和internal) 616

21.7.3 设置填充字符(fill,setfill) 616

21.7.4 设置整数流的基数(dec,oct,hex,showbase) 617

21.7.5 设置浮点数;科学计数法和定点计数法(scientific、fixed) 618

21.7.6 大/小写控制(uppercase) 619

21.7.7 指定布尔格式(boolalpha) 619

21.7.8 用成员函数flags设置和重置格式状态 620

21.8 流错误状态 621

21.9 将输出流绑定到输入流上 622

21.10 本章小结 622

第22章 异常处理:深入学习 631

22.1 引言 631

22.2 实例:处理除数为0的异常 632

22.3 重新抛出异常 635

22.4 栈展开 637

22.5 何时使用异常处理 638

22.6 构造函数、析构函数与异常处理 638

22.7 异常与继承 639

22.8 处理new故障 639

22.9 unique_ptr类与动态内存分配 641

22.10 标准库的异常层次结构 643

22.11 本章小结 645

第23章 模板 649

23.1 引言 649

23.2 类模板 649

23.3 函数模操作类模板的特化对象 653

23.4 非类型形参 654

23.5 模板类型形参的默认实参 654

23.6 重载函数模板 654

23.7 本章小结 655

附录A 运算符优先级表 657

附录B ASCII字符集 660

附录C 数值系统 661

附录D 排序:一个深入的分析 670

附录E 多线程及其他C11和C99专题 684

索引 704

相关图书
作者其它书籍
返回顶部