注册 | 登录读书好,好读书,读好书!
读书网-DuShu.com
当前位置: 首页出版图书科学技术计算机/网络软件与程序设计C/C++及其相关C程序设计教程(第9版)

C程序设计教程(第9版)

C程序设计教程(第9版)

定 价:¥139.80

作 者: [美]保罗·戴特尔(Paul Deitel)、哈维·戴特尔(Harvey Dei
出版社: 人民邮电出版社
丛编项:
标 签: 暂缺

购买这本书可以去


ISBN: 9787115597212 出版时间: 2023-10-01 包装: 平装-胶订
开本: 128开 页数: 字数:  

内容简介

  本书是优秀的C语言教程。全书系统地介绍了4种当今流行的程序设计方法——面向过程、基于对象、面向对象以及泛型编程,内容全面、生动、易懂。作者由浅入深地介绍了结构化编程及软件工程的基本概念,从简单概念到最终完整的语言描述,清晰、正确、透彻、详细地讲解了C语言,尤其注重程序设计思想和方法的介绍。此外,还涉及安全的C程序涉及、提高练习题,覆盖C和面向对象程序设计、基于Allegro的游戏编程、C标准介绍等内容。

作者简介

  Paul J. Deitel是Deitel & Associates公司的首席执行官和首席技术官,他毕业于麻省理工学院,在计算机领域有41年的经验。保罗是世界上颇有经验的编程语言培训师之一,自1992年以来一直为软件开发人员教授专业课程。他已经为国际上的学术、工业、政府和军事客户提供了数百个编程课程,包括加州大学洛杉矶分校、思科、IBM、西门子、Sun Microsystems(现在的Oracle)、戴尔、Fidelity、肯尼迪航天中心的NASA、美国国家严重风暴实验室、白沙导弹发射场、Rogue Wave软件、波音、北电网络、Puma、iRobot和其他许多机构。他和他的合著者哈维·M·迪特尔博士是世界上热销的编程语言教科书、专业书籍、视频和互动多媒体电子学习作者,以及虚拟和现场培训主持人。 Dr. Harvey M. Deitel 是Deitel & Associates, Inc.的主席兼首席战略官,在计算机领域有59年的经验。Deitel博士在麻省理工学院获得了电子工程的学士和硕士学位,并在波士顿大学获得了数学博士学位,他在这些项目中的每一个项目都是在计算机科学项目分出之前研究的。他有丰富的大学教学经验,包括获得终身教职并担任波士顿学院计算机科学系主任,然后于1991年与他的儿子Paul一起成立了Deitel & Associates, Inc.。Deitel父子的出版物赢得了国际认可,在日语、德语、俄语、西班牙语、法语、波兰语、意大利语、简体中文、繁体中文、韩语、葡萄牙语、希腊语、乌尔都语和土耳其语中出版了100多部翻译作品。Deitel博士已经为学术界、企业、政府和军事客户提供了数百个编程课程。

图书目录

第 1章 计算机和C语言简介 1
1.1 简介 2
1.2 硬件和软件 2
1.2.1 摩尔定律 3
1.2.2 计算机组织 3
1.3 数据层次结构 5
1.4 机器语言、汇编语言和高级语言 7
1.5 操作系统 9
1.6 C编程语言 11
1.7 C语言标准库和开源库 12
1.8 其他流行的编程语言 13
1.9 典型的C语言程序开发环境 14
1.9.1 第 1阶段:创建一个程序 14
1.9.2 第 2和第3阶段:预处理和
编译C程序 15
1.9.3 第4阶段:链接 15
1.9.4 第5阶段:加载 16
1.9.5 第6阶段:执行 16
1.9.6 执行时可能出现的问题 16
1.9.7 标准输入、标准输出和标准
错误流 17
1.10 在Windows、Linux和macOS中
测试驱动一个C应用程序 17
1.10.1 在Windows 10上用Visual Studio
2019社区版编译和运行一个C语言
程序 17
1.10.2 在macOS上用Xcode编译和运行
一个C程序
20
1.10.3 在Linux上用GNU gcc编译和
运行一个C应用程序 22
1.10.4 在GCC Docker容器中编译和
运行一个C应用程序,并在
Windows 10、macOS或Linux上
原生运行。 24
1.11 因特网、万维网、云和物联网 25
1.11.1 因特网:一个网络的网络 26
1.11.2 万维网:让因特网变得更友好 26
1.11.3 云 26
1.11.4 物联网 27
1.12 软件技术 27
1.13 大数据有多大? 28
1.13.1 大数据分析 32
1.13.2 数据科学和大数据正在产生变化:
使用案例 33
1.14 案例研究:大数据移动应用 33
1.15 AI:在计算机科学和数据科学的
交汇处 34
第 2章 C语言编程入门 39
2.1 简介 39
2.2 一个简单的C程序:打印一行文本 39
2.3 另一个简单的C程序:两个整数
相加 42
2.4 内存概念 45
2.5 C语言中的算术 46
2.6 判断:相等和关系操作符 49
2.7 安全的C语言编程 52
第3章 结构体化程序开发 61
3.1 简介 61
3.2 算法 61
3.3 伪代码 62
3.4 控制结构体 63
3.5 if选择语句 64
3.6 if...else选择语句 65
3.7 while循环语句 68
3.8 制订算法案例研究1:计数器控制的
循环 69
3.9 用自顶向下、逐步细化的方式制定算法
案例研究2:标记控制的循环 70
3.10 用自顶向下、逐步细化的方式制定算法
案例研究3:嵌套控制语句 75
3.11 赋值操作符 78
3.12 递增和递减操作符 79
3.13 安全的C语言编程 81
第4章 程序控制 95
4.1 简介 95
4.2 循环要点 95
4.3 计数器控制的循环 96
4.4 for循环语句 97
4.5 使用for语句的例子 99
4.6 switch多重选择语句 102
4.7 do...while循环语句 106
4.8 break和continue语句 107
4.9 逻辑操作符 109
4.10 区分相等 (==) 和赋值 (
=)
操作符 111
4.11 结构体化编程的总结 112
4.12 安全的C语言编程 116
第5章 函数 128
5.1 简介 128
5.2 C语言中的程序模块化 128
5.3 数学库函数 129
5.4 函数 131
5.5 函数的定义 131
5.5.1 square函数 131
5.5.2 maximum函数 133
5.6 函数原型:更深入的观察 134
5.7 函数调用栈和栈帧 136
5.8 头文件 139
5.9 通过值和引用传递参数 140
5.10 随机数生成 140
5.11 随机数字模拟案例研究:建立一个
赌场游戏 144
5.12 存储类型 146
5.13 作用域规则 147
5.14 递归 150
5.15 使用递归的例子:斐波那契数列 153
5.16 递归与循环 155
5.17 安全的C语言编程:安全的随机数
生成 157
第6章 数组 172
6.1 简介 173
6.2 数组 173
6.3 定义数组 174
6.4 数组示例 174
6.4.1 定义一个数组并使用循环来设置
数组的元素值 174
6.4.2 在定义中用初始值列表初始化
数组
175
6.4.3 用符号常量指定数组的大小,
用计算方法初始化数组元素 176
6.4.4 对数组中的元素求和 177
6.4.5 使用数组来总结调查的结果 177
6.4.6 用条形图表示数组元素的值 178
6.4.7 掷骰子60,000,000次并将结果
汇总到一个数组中 179
6.5 使用字符数组来存储和操作字符串 180
6.5.1 用一个字符串初始化一个
字符数组 180
6.5.2 用字符的初始化列表初始化
一个字符数组 181
6.5.3 访问一个字符串中的字符 181
6.5.4 输入一个字符数组 181
6.5.5 输出一个代表字符串的字符
数组 181
6.5.6 演示字符数组 181
6.6 静态局部数组和自动局部数组 182
6.7 将数组传递给函数 184
6.8 对数组排序 187
6.9 数据科学入门案例研究:
调查数据分析 189
6.10 搜索数组 193
6.10.1 用线性搜索来搜索一个数组 193
6.10.2 用二分搜索来搜索数组 194
6.11 多维数组 197
6.11.1 展示二维数组 197
6.11.2 初始化双下标数组 198
6.11.3 设置某一行的元素 199
6.11.4 计算二维数组中的元素总数 200
6.11.5 二维数组操作 200
6.12 可变长度数组 203
6.13 安全的C语言编程 205
第7章 指针 220
7.1 简介 221
7.2 指针变量的定义和初始化 221
7.3 指针操作符 222
7.4 按引用向函数传递参数 224
7.5 在指针中使用const限定符 227
7.5.1 使用指向可变数据的可变指针
将字符串转换为大写字母 227
7.5.2 用常量数据的可变指针逐个
字符打印字符串 228
7.5.3 试图修改可变数据的常量指针 229
7.5.4 试图修改常量数据的常量指针 230
7.6 使用按引用传递的冒泡排序 231
7.7 sizeof操作符 233
7.8 指针表达式和指针算术 235
7.8.1 指针算术操作符 235
7.8.2 将一个指针指向一个数组 235
7.8.3 将一个整数添加到一个指针上 235
7.8.4 从一个指针中减去一个整数 236
7.8.5 指针的递增和递减 236
7.8.6 用一个指针减去另一个指针 236
7.8.7 互相赋值指针 236
7.8.8 void指针 236
7.8.9
比较指针 237
7.9 指针和数组的关系 237
7.9.1 指针/偏移量表示法 237
7.9.2 指针/下标表示法 238
7.9.3 不能用指针算术修改数组名称 238
7.9.4 演示指针下标和偏移量 238
7.9.5 用数组和指针复制字符串 239
7.10 指针的数组 240
7.11 随机数模拟案例研究:
洗牌和发牌 241
7.12 函数指针 245
7.12.1 按升序或降序排序 245
7.12.2 使用函数指针创建一个菜单
驱动的系统 247
7.13 安全的C语言编程 248
第8章 和字符串 276
8.1 简介 277
8.2 字符串和字符的基本原理 277
8.3 字符处理库 278
8.3.1 函数isdigit、isalpha、isalnum和
isxdigit 279
8.3.2
函数islower、isupper、tolower和
toupper 280
8.3.3 函数isspace、iscntrl、ispunct、
isprint和isgraph 280
8.4 字符串转换函数 282
8.4.1 函数strtod 282
8.4.2
函数strtol 283
8.4.3 函数strtoul 283
8.5 标准输入/输出库函数 284
8.5.1 函数fgets和putchar 285
8.5.2
函数getchar 286
8.5.3 函数sprintf 286
8.5.4
函数scanf 287
8.6 字符串处理库的字符串操作函数 287
8.6.1 函数strcpy和strncpy 288
8.6.2
函数strcat和strncat 289
8.7 字符串处理库的比较函数 290
8.8 字符串处理库的搜索函数 291
8.8.1 函数strchr 292
8.8.2
函数strcspn 292
8.8.3 函数strpbrk 293
8.8.4
函数strrchr 293
8.8.5
函数strspn 293
8.8.6
函数strstr 294
8.8.7
函数strtok 294
8.9 字符串处理库的内存函数 296
8.9.1 函数memcpy 296
8.9.2
函数memmove 297
8.9.3 函数memcmp 297
8.9.4
函数memchr 298
8.9.5
函数memset 298
8.10 字符串处理库的其他函数 299
8.10.1 函数strerror 299
8.10.2 函数strlen 299
8.11 安全的C语言编程 300
第9章 格式化的输入/输出 321
9.1 简介 321
9.2 流 322
9.3 用printf格式化输出 322
9.4 打印整数 323
9.5 打印浮点数值 324
9.5.1 转换规范e、E和f 324
9.5.2 转换规范g和G 324
9.5.3 示范浮点转换规范 325
9.6 打印字符串和字符 326
9.7 其他转换规范 326
9.8 用域宽和精度打印 327
9.8.1 整数的域宽 327
9.8.2 整数、浮点数和字符串的精度 328
9.8.3 结合域宽和精度 329
9.9 printf格式标记 329
9.9.1 右对齐和左对齐 330
9.9.2 打印带有或不带有 标记的
正数和负数 330
9.9.3 使用空格标记 330
9.9.4 使用#标记 331
9.9.5 使用0标记 331
9.10 打印字面量和转义序列 332
9.11 用scanf格式化输入 333
9.11.1 scanf 语法 333
9.11.2 scanf转换规范 333
9.11.3 读取整数 334
9.11.4 读取浮点数字 334
9.11.5 读取字符和字符串 335
9.11.6 使用扫描集 335
9.11.7 使用域宽 336
9.11.8 跳过输入流中的字符 337
9.12 安全的C语言编程 338
第 10章 结构体体、共用体、位操作
和枚举 344
10.1 简介 345
10.2 结构体体的定义 345
10.2.1
自引用结构体体 345
10.2.2 定义结构体体类型的变量 346
10.2.3 结构体体标签名称 346
10.2.4 可以对结构体体进行的操作 346
10.3 初始化结构体体 347
10.4 用.和->访问结构体体成员 348
10.5 在函数中使用结构体体 349
10.6 typedef 349
10.7 随机数模拟案例研究:高性能的
洗牌和发牌 350
10.8 共用体 352
10.8.1 共用体的声明 353
10.8.2 允许的共用体操作 353
10.8.3 在声明中初始化union 353
10.8.4 示范共用体 353
10.9 位操作符 354
10.9.1 显示无符号整数的位数 355
10.9.2 使函数displayBits更加通用和
可移植 356
10.9.3 使用按位与、按位或、按位异或
和按位取反操作符 356
10.9.4 使用左移位和右移位操作符 359
10.9.5 位运算赋值操作符 360
10.10 位域 361
10.10.1 定义位域 361
10.10.2 使用位域来表示牌面、花色 362
10.10.3 未命名位域 363
10.11 枚举常量 364
10.12 匿名结构体体和共用体 365
10.13 安全的C语言编程 366
第 11章 文件处理 385
11.1 简介 385
11.2 文件和流 385
11.3 创建一个顺序存取的文件 386
11.3.1 指向FILE的指针 387
11.3.2 使用fopen来打开一个文件 387
11.3.3 使用feof来检查文件结束
标记 388
11.3.4 使用fprintf向文件写数据 388
11.3.5 使用fclose来关闭一个文件 388
11.3.6 文件打开模式 389
11.4 从顺序存取的文件中读取数据 390
11.4.1 重置文件位置指针 391
11.4.2 信用查询程序 391
11.5 随机存取文件 394
11.6 创建一个随机存取的文件 395
11.7 将数据随机写入随机存取文件 396
11.7.1 用fseek定位文件位置指针 398
11.7.2 错误检查 398
11.8 从随机存取文件中读取数据 399
11.9 案例研究:事务处理系统 400
11.10 安全的C语言编程 404
第 12章 数据结构体 425
12.1 简介 425
12.2
自引用结构体 426
12.3 动态内存管理 427
12.4 链表 428
12.4.1 函数insert 430
12.4.2
函数delete 432
12.4.3 函数 isEmpty 和 printList 433
12.5 栈 434
12.5.1 函数push 437
12.5.2
函数pop 437
12.5.3 栈的应用 438
12.6 队列 438
12.6.1 函数enqueue 442
12.6.2
函数dequeue 443
12.7 树 443
12.7.1 函数insertNode 446
12.7.2 遍历:函数 inOrder, preOrder 和
postOrder 446
12.7.3 消除重复 447
12.7.4 二叉树搜索 447
12.7.5 其他二叉树操作 447
12.8 安全的C语言编程 448
第 13章 计算机科学思维:排序算法
和大O 468
13.1 简介 468
13.2 算法的效率:大O 469
13.2.1 O(1)算法 469
13.2.2 O(n)算法 469
13.2.3 O(n2)算法 469
13.3 选择排序 470
13.3.1 选择排序的实现 471
13.3.2 选择排序的效率 473
13.4 插入排序 473
13.4.1 插入排序的实现 474
13.4.2 插入排序的效率 475
13.5 案例研究:高性能合并排序的
可视化 476
13.5.1 合并排序的实现 476
13.5.2 合并排序的效率 480
13.5.3 总结各种算法的大O符号 480
第 14章 预处理器 485
14.1 简介 485
14.2 #include预处理器指令 486
14.3 #define预处理器指令:符号常量 486
14.4 #define 预处理器指令:宏 487
14.4.1 有一个参数的宏 487
14.4.2 双参数宏 488
14.4.3 宏的续行字符 488
14.4.4 #undef预处理器指令 488
14.4.5 标准库的宏 488
14.4.6 不要在宏中放置有副作用的
表达式 489
14.5 条件编译 489
14.5.1 #if...#endif 预处理器指令 489
14.5.2 用#if...#endif注释掉代码块 490
14.5.3 有条件地编译调试代码 490
14.6 #error和#pragma预处理器指令 490
14.7 #和##操作符 491
14.8 行号 491
14.9 预定义的符号常量 492
14.10 断言 492
14.11 安全的C语言编程 493
第 15章 其他主题 497
15.1 简介 497
15.2 可变长度的参数列表 497
15.3 使用命令行参数 499
15.4 编译多源文件程序 500
15.4.1 其他文件中全局变量的extern
声明 501
15.4.2
函数原型 501
15.4.3 用static限制作用域 501
15.5 exit和atexit终止程序
502
15.6 整数和浮点字面量的后缀 503
15.7 信号处理 504
15.8 动态内存分配函数calloc和realloc 506
15.9 goto:无条件分支 507
附录A 操作符优先级 511
附录B ASCII字符集 513
附录C 多线程/多核和其他
C18/C11/C99主题 514
C.1 简介 514
C.2 C99中增加的头文件 515
C.3 指定的初始值和复合字面量 515
C.4 bool类型 517
C.5 复数 518
C.6 具有可变长度的参数列表的宏 518
C.7 其他C99特性 519
C.7.1 编译器最小资源限制 519
C.7.2 restrict关键字 519
C.7.3 可靠的整数除法 519
C.7.4 灵活数组成员 520
C.7.5 泛型数学 520
C.7.6
内联函数 520
C.7.7 __func__ 预定义标识符 521
C.7.8 va_copy 宏程序 521
C.8 C11/C18特性 521
C.8.1 C11/C18头文件 521
C.8.2 quick_exit函数 521
C.8.3 Unicode 支持 522
C.8.4 _Noreturn函数限定符 522
C.8.5 泛型表达式 522
C.8.6 Annex L:可分析性和未定义
行为 522
C.8.7
内存对齐控制 523
C.8.8 静态断言 523
C.8.9 浮点类型 523
C.9 案例研究:多线程和多核系统的
性能 523
C.9.1 示例:两个计算密集型任务的
顺序执行 526
C.9.2 示例:两个计算密集型任务的
多线程执行 527
C.9.3 其他多线程特性 530
附录D 面向对象的编程概念介绍 531
D.1 介绍 531
D.2 面向对象的编程语言 531
D.3 汽车作为一个对象 531
D.4 方法和类 531
D.5 实例化 532
D.6 复用 532
D.7 消息和方法调用 532
D.8 属性和实例变量 532
D.9 继承 532
D.10 面向对象的分析和设计(OOAD) 532

本目录推荐