图书介绍

C语言的科学和艺术PDF|Epub|txt|kindle电子书版本网盘下载

C语言的科学和艺术
  • (美)Eric S.Roberts著;翁惠玉等译 著
  • 出版社: 北京:机械工业出版社
  • ISBN:7111159713
  • 出版时间:2005
  • 标注页数:498页
  • 文件大小:38MB
  • 文件页数:522页
  • 主题词:C语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

C语言的科学和艺术PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

目录1

出版者的话1

专家指导委员会1

译者序1

前言1

第1章 概述1

1.1 计算简史1

1.2 什么是计算机科学4

1.3 计算机硬件简介4

1.3.1 CPU4

13.4 I/O设备5

1.3.3 辅助存储器5

1.3.2 内存5

1.4 算法6

1.5 程序设计语言和编译7

1.6 编程错误和调试8

1.7 软件维护9

1.8 软件工程的重要性10

1.9 关于C程序设计语言的一些思考10

小结10

复习题11

第一部分 C语言程序设计基础14

第2章 通过例子学习14

2.1 “Hello world”程序14

2.1.2 库包含15

2.1.1 注释15

2.1.3 主程序16

2.2 两个数的加法程序17

2.2.1 输入阶段19

2.2.2 计算阶段20

2.2.3 输出阶段20

2.3 有关程序设计过程的观点21

2.4 数据类型22

2.4.1 浮点型数据22

2.4.2 字符串类型的数据23

2.5 表达式25

2.5.1 常量25

2.5.2 变量26

2.5.3 赋值语句27

2.5.4 运算符和操作数29

2.5.5 整型数和浮点型数的结合30

2.5.6 整数除法和求余运算符30

2.5.7 优先级31

2.5.8 优先级法则的应用33

2.5.9 类型转换33

小结35

复习题36

程序设计练习37

第3章 问题求解40

3.1 程序设计习语和范例40

3.1.1 复合赋值习语41

3.1.2 自增和自减运算符42

3.2 解决规模稍大的问题43

3.3.1 重复N次习语44

3.3 控制语句44

3.3.2 迭代和循环45

3.3.3 下标变量45

3.3.4 初始化的重要性47

3.3.5 读入-直到-标志习语47

3.3.6 创造一个更实用的应用程序49

3.3.7 条件执行和if语句51

3.4 一个调试练习53

3.5 格式化输出56

3.5.1 printf的格式码57

3.5.2 控制空格、对齐方式和精度57

3.6.1 程序设计风格60

3.6 构思一个程序60

3.6.2 设计时考虑将来的修改61

3.6.3 #define机制61

小结63

复习题63

程序设计练习64

第4章 语句形式68

4.1 简单语句68

4.1.1 赋值的嵌套69

4.1.2 多重赋值70

4.1.3 程序块70

4.2 控制语句71

4.3.1 关系运算符72

4.3 布尔型数据72

4.3.2 逻辑运算符73

4.3.3 简化求值75

4.3.4 标志75

4.3.5 避免布尔表达式中的冗余76

4.3.6 布尔计算示例76

4.4 if语句77

4.4.1 单行if语句78

4.4.2 多行if语句79

4.4.3 if/else语句79

4.4.4 级联if语句79

4.4.5 ?:运算符(可选的)80

4.5 switch语句81

4.6 while语句83

4.6.1 while循环的应用84

4.6.2 无限循环85

4.6.3 解决半途退出问题86

4.7 for语句87

4.7.1 嵌套的for循环89

4.7.2 for和while的关系90

4.7.3 for语句中浮点型数据的使用问题91

小结92

复习题93

程序设计练习93

第5章 函数96

5.1 使用库函数96

5.2 函数声明98

5.3 自己编写函数99

5.3.1 return语句99

5.3.2 将函数与主程序放在一起100

5.3.3 包含内部控制结构的函数101

5.3.4 返回非数字值的函数103

5.3.5 谓词函数104

5.3.6 测试字符串是否相等的谓词函数105

5.4 函数调用过程机制106

5.4.1 参数传递107

5.4.2 在其他函数中调用函数109

5.5 过程115

5.6.1 从顶开始116

5.6 逐步精化116

5.6.2 实现PrintCalendar117

5.6.3 实现PrintCalendarMonth118

5.6.4 完成最后的片段121

小结125

复习题126

程序设计练习126

第6章 算法131

6.1 测试素数131

6.1.1 一个IsPrime的简单版本132

6.1.2 验证一个策略是否表示一个算法132

6.1.3 说明IsPrime算法的正确性133

6.1.4 改进算法的效率133

6.2.1 brute-force算法136

6.1.5 在各个可选方案中选择136

6.2 计算最大公约数136

6.2.2 欧几里德算法137

6.2.3 欧几里德算法的正确性说明(可选)138

6.2.4 比较GCD算法的效率138

6.3 数值算法139

6.3.1 连续逼近139

6.3.2 报告错误141

6.4 级数展开141

6.4.1 Zeno悖论141

6.4.2 用级数展开法设计平方根函数143

6.4.3 估计平方根的泰勒级数展开(可选)143

6.4.4 泰勒级数近似的实现144

6.4.5 停留在收敛半径之内146

6.5 指定数值类型的大小147

6.5.1 整数类型148

6.5.2 无符号类型149

6.5.3 浮点类型149

小结149

复习题150

程序设计练习150

第二部分 库和模块化开发156

第7章 库和接口:一个简单的图形库156

7.1 接口的概念156

7.2 图形库介绍158

7.2.1 graphics.h的基本模型158

7.2.2 graphics.h接口的函数159

7.2.3 软件包初始化163

7.2.4 画直线163

7.2.5 画圆和弧164

7.2.6 获取有关图形窗口的信息166

7.3 建立自己的工具166

7.3.1 定义DrawBox167

7.3.2 定义DrawCenteredCircle169

7.3.3 绝对坐标和相对坐标间的切换169

7.3.4 定义过程的好处170

7.4 解决一个较大的问题170

7.4.1 使用逐步精化171

7.4.2 实现DrawHouse过程172

7.4.3 寻找共同的模式172

7.4.4 结束分解173

小结177

复习题178

程序设计练习179

第8章 设计接口:一个随机数库183

8.1 接口设计183

8.1.1 同一主题的重要性184

8.1.2 简单性和信息隐藏的原则184

8.1.3 满足客户的需要185

8.1.4 通用工具的优势185

8.1.5 稳定性的价值186

8.2 用计算机生成随机数186

8.2.1 确定行为与非确定行为186

8.2.3 ANSIC中生成伪随机数187

8.2.2 随机数和伪随机数187

8.2.4 改变随机数的范围188

8.2.5 将此问题通用化192

8.3 在库中保存工具193

8.3.1 接口的内容193

8.3.2 写random.h接口195

8.3.3 random.c的实现196

8.3.4 构造客户程序197

8.3.5 初始化随机数发生器198

8.4 评价random.h接口的设计200

8.4.1 产生随机实数201

8.4.2 模拟一个概率事件201

8.5 使用随机数软件包202

8.4.4 完成随机数软件包的实现202

8.4.3 在接口中包含头文件202

小结205

复习题206

程序设计练习207

第9章 字符串和字符213

9.1 枚举的原理213

9.1.1 在机器内部表示枚举类型214

9.1.2 将枚举类型表示为整数214

9.1.3 定义新的枚举类型215

9.1.4 枚举类型的操作217

9.1.5 标量类型217

9.2.2 ASCII代码218

9.2.1 数据类型char218

9.2 字符218

9.2.3 字符常量219

9.2.4 ASCII代码方案的重要特性219

9.2.5 特殊字符220

9.2.6 字符运算221

9.2.7 ctype.h接口222

9.2.8 涉及字符的控制语句223

9.2.9 字符的输入输出223

9.3 字符串作为抽象数据类型224

9.3.1 分层抽象224

9.3.2 抽象类型的概念225

9.4.1 确定字符串的长度226

9.4 strlib.h接口226

9.4.2 从一个字符串中选择字符227

9.4.3 连接227

9.4.4 将字符转换为字符串228

9.4.5 抽取字符串的一部分229

9.4.6 比较两个字符串229

9.4.7 在一个字符串内搜索230

9.4.8 大小写转换232

9.4.9 数值转换232

9.4.10 效率和strlib.h库235

小结235

复习题236

程序设计练习237

第10章 模块化开发241

10.1 Pig Latin——一个模块化开发的案例研究242

10.1.1 应用自顶向下的设计243

10.1.2 使用伪代码243

10.1.3 实现TranslateLine244

10.1.4 考虑空格和标点符号的问题245

10.1.5 精化单词的定义246

10.1.6 设计记号扫描器247

10.1.7 完成TranslateLine的实现248

10.1.8 定义扫描器模块接口250

10.2 在模块中维护内部状态252

10.2.1 全局变量252

10.2.4 初始化全局变量253

10.2.3 保持变量的模块私有化253

10.2.2 使用全局变量的危险性253

10.2.5 私有函数255

10.3 实现扫描器抽象255

小结261

复习题261

程序设计练习261

第三部分 复合数据类型268

第11章数组268

11.1 数组268

11.1.1 数组声明269

11.1.2 数组选择270

11.1.3 一个简单的数组实例271

11.1.4 改变下标值的范围271

11.2 数据的内部表示法272

11.2.1 比特、字节和字273

11.2.2 内存地址273

11.2.3 运算符sizeof274

11.2.4 变量的内存分配274

11.2.5 引用超出数组范围的元素275

11.3 数组作为参数进行传递276

11.3.1 元素个数的通用化277

11.3.2 数组参数传递机制279

11.3.3 实现函数PrintIntegerArray和GetIntegerArray281

11.3.4 实现函数ReverseIntegerArray282

11.3.5 实现函数SwapIntegerElements283

11.4 使用数组制作表格286

11.5 数组的静态初始化291

11.5.1 自动确定数组大小292

11.5.2 确定初始化数组的大小292

11.5.3 初始化数组和标量类型293

11.6 多维数组293

11.6.1 向函数传送多维数组294

11.6.2 初始化多维数组295

小结295

复习题296

程序设计练习297

第12章 查找和排序303

12.1 查找303

12.1.1 在整数数组中查找303

12.1.2 关于查找的另一个更复杂的例子305

12.1.3 线性查找307

12.1.4 二分查找308

12.1.5 查找算法的相对效率310

12.2 排序311

12.2.1 对一个整数数组排序312

12.2.2 选择排序算法313

12.2.3 选择排序效率的评估315

12.2.4 测试程序的运行时间316

12.2.5 选择排序的算法分析317

小结318

复习题318

程序设计练习318

第13章 指针323

13.1 将地址作为数据值324

13.2 C语言的指针操作325

13.2.1 在C语言中声明指针变量325

13.2.2 基本的指针操作325

13.2.3 特殊指针NULL327

13.3 通过引用传递参数327

13.3.1 设计函数SwapInteger329

13.3.2 用引用调用返回多个结果330

13.3.3 过度使用引用调用的危险332

13.4 指针和数组332

13.4.1 指针运算333

13.4.2 运算符++和--的新作用335

13.4.3 指针的自增和自减336

13.4.4 指针和数组的关系337

13.5 动态分配338

13.5.1 Void*类型339

13.5.2 动态数组340

13.5.3 查找malloc中的错误340

13.5.4 释放内存341

小结341

复习题342

程序设计练习344

第14章 再论字符串347

14.1 string类型的概念表示347

14.1.1 字符串作为数组347

14.1.2 字符串作为指针349

14.1.4 字符串参数350

14.1.3 字符串作为抽象类型350

14.1.5 字符串变量351

14.1.6 指针和数组变量间的区别352

14.1.7 决定字符串的表示方法354

14.2 ANSI字符串库354

14.2.1 strcpy函数355

14.2.2 strncpy函数357

14.2.3 strcat和strncat函数358

14.2.4 strlen、strcmp和strncmp函数359

14.2.5 strchr、strrchr和strstr函数359

14.2.6 ANSI字符串函数的应用360

14.3 strlib库的实现360

14.3.1 实现转换函数360

14.3.2 strlib分配函数的实现363

小结364

复习题365

程序设计练习365

第15章 文件368

15.1 文本文件368

15.2 C语言中文件的使用369

15.2.1 声明FILE*类型的变量370

15.2.2 打开文件370

15.2.3 执行I/O操作371

15.2.4 关闭文件371

15.2.5 标准文件371

15.3 字符I/O371

15.3.1 文件更新374

15.3.2 在输入文件中重新读取字符376

15.4 面向行的I/O377

15.5 格式化I/O379

15.5.1 printf的三种形式380

15.5.2 scanf函数380

15.5.3 用scanf读入字符串381

15.5.4 格式化I/O的一个实例383

15.5.5 使用scanf的局限385

小结385

复习题386

程序设计练习387

第16章 记录393

16.1 数据记录的概念393

16.2.1 定义一个结构类型394

16.2 记录在C语言中的使用394

16.2.2 声明结构变量395

16.2.3 记录选择395

16.2.4 记录初始化395

16.2.5 简单记录396

16.3 数组与记录的结合397

16.4 记录的指针399

16.4.1 定义一个指向记录类型的指针399

16.4.2 为记录数据分配空间400

16.4.3 对记录指针进行操作401

16.5 创建记录的数据库402

16.5.1 创建员工信息数据库402

16.5.2 数据库的使用404

16.6 基于记录的应用程序设计405

16.6.1 使用数据库的重要性405

16.6.2 问题的框架405

16.6.3 设计内部表示406

16.6.4 设计外部结构408

16.6.5 程序代码409

16.6.6 数据驱动设计方法的重要性415

小结415

复习题417

程序设计练习418

第17章 深入学习424

17.1 递归424

17.1.2 Factorial函数425

17.1.1 递归的简单说明425

17.1.3 递归信任429

17.1.4 递归范例430

17.1.5 排列的生成431

17.1.6 用递归的思想思考433

17.2 抽象数据类型433

17.2.1 队列抽象434

17.2.2 以队列抽象表示类型434

17.2.3 queue.h接口436

17.2.4 实现队列抽象437

17.2.5 队列抽象的另一种实现方法442

17.3.1 评估算法效率444

17.3.2 0标记444

17.3 算法分析444

17.3.3 再看选择排序445

17.3.4 分而治之策略446

17.3.5 合并两个数组447

17.3.6 合并排序算法447

17.3.7 合并排序的计算复杂性448

17.3.8 比较平方复杂性与NlogN复杂性的性能450

小结450

复习题451

程序设计练习451

附录457

附录A C语言的语法和结构总结457

附录B 库源代码471

索引491

热门推荐