图书目录

第1篇程 途 启 步

第1单元简单程序设计2

1.1C语言程序主框架2

1.1.1用伪代码描述的简单计算器程序算法2

1.1.2将伪代码描述的算法逐步细化为C程序2

1.2数据类型与数据形式3

1.2.1数据类型3

1.2.2程序中的数据形式及其引用方式4

1.3标识符与声明6

1.3.1标识符6

1.3.2声明6

1.3.3变量的声明与初始化7

1.4操作符8

1.4.1赋值操作符与赋值表达式8

1.4.2算术操作符与算术表达式8

1.4.3操作符的优先级与结合性9

1.5函数9

1.5.1函数及其应用过程10

1.5.2函数调用与函数返回11

1.5.3函数定义11

1.5.4局部变量12

1.5.5函数声明14

1.5.6main()函数15

1.5.7函数库、头文件与文件包含命令15

1.6格式化输入/输出函数16

1.6.1printf()函数的基本用法16

1.6.2scanf()的基本用法17

1.7C程序的编译与执行19

1.7.1C语言程序的编译与连接19

1.7.2程序中的错误和异常20

1.7.3程序测试22

1.7.4设计用户友好的程序23

习题123

第2单元选择程序设计27

2.1可选择计算类型的计算器程序算法分析27

2.1.1主函数的算法分析27

2.1.2计算函数calculate()的算法分析28

2.1.3判等操作符与关系操作符28

2.2ifelse型选择结构29

2.2.1用ifelse结构实现的calculate()函数29

2.2.2ifelse结构的应用特点30

2.2.3良好的程序书写风格32

2.3选择结构的程序测试34

2.3.1白箱测试法34

2.3.2等价分类法35

2.4字符类型38

2.4.1ASCII码38

2.4.2char类型的基本特点39

2.4.3转义字符39

2.4.4字符的输入/输出40

2.5浮点类型41

2.5.1浮点类型取值范围与表数精度41

2.5.2浮点类型变量和字面量42

2.5.3浮点类型数据的操作42

2.6switch型选择结构43

2.6.1基于整数值匹配的选择结构——switch结构43

2.6.2一个字符分类程序44

2.6.3用switch结构实现的calculate()函数47

2.6.4switch结构与ifelse结构的比较48

习题249

第3单元重复程序设计56

3.1可连续计算的计算器程序的算法分析56

3.1.1主函数初步算法56

3.1.2主函数算法细化56

3.1.3重复结构的C语言实现途径57

3.2while结构57

3.2.1while结构的基本机理57

3.2.2使用while结构的可连续计算的计算器主函数57

3.2.3逗号操作符59

3.3dowhile结构59

3.3.1dowhile结构的基本机理59

3.3.2使用dowhile结构的可连续计算的计算器程

序主函数60

3.4for结构60

3.4.1for结构的基本机理60

3.4.2使用for结构的可连续计算的计算器程序主函数61

3.4.3计数型重复结构62

3.4.4复合赋值操作符与增值、减值操作符66

3.5重复结构的程序测试67

3.5.1基于路径覆盖的重复结构测试67

3.5.2边值分析法与重复结构测试67

3.5.3基于因果分析的程序测试68

3.6在重复体内控制重复过程71

3.6.1跳出当前层控制结构语句break72

3.6.2提前结束当前重复体语句continue72

3.6.3实例: 求素数72

习题374

第2篇组 织 数 据

第4单元同类型数据的聚合类型: 数组86

4.1一维数组86

4.1.1数组的特点86

4.1.2数组的定义87

4.1.3数组初始化87

4.1.4访问下标变量89

4.2二维数组90

4.2.1二维数组的概念90

4.2.2二维数组的初始化91

4.2.3访问二维数组元素92

4.3字符串93

4.3.1字符串字面量93

4.3.2字符串变量94

4.3.3字符串的输入/输出95

4.3.4字符串操作库函数98

习题4102

第5单元描述一类对象属性的聚合类型: 结构体和共用体107

5.1结构体类型与结构体变量107

5.1.1结构体类型及其定制107

5.1.2结构体变量的声明与初始化108

5.1.3结构体变量及其分量的应用109

5.2用结构体数组存储一组学生信息111

5.2.1结构体数组的定义与初始化111

5.2.2结构体数组元素的访问112

5.3共用体类型114

5.3.1共用体类型的定制与共用体变量的定义114

5.3.2共用体类型与结构体类型的比较115

5.3.3共用体变量的应用117

习题5118

第6单元指针124

6.1指针类型与指针变量124

6.1.1指针=基类型+地址124

6.1.2同类型指针间的赋值与判等操作126

6.1.3指针的递引用127

6.1.4悬空指针、空指针与void指针128

习题6.1129

6.2数组的指针形式131

6.2.1数组名与指向数组元素的指针131

6.2.2指向数组元素指针的加减运算133

6.2.2指针与字符串135

6.2.3二维数组与指针137

习题6.2139

6.3指向结构体变量的指针与链表142

6.3.1指向结构体类型变量的指针142

6.3.2链表及其特点142

6.3.3构建链表144

习题6.3146

6.4动态存储分配146

6.4.1申请需要的存储空间147

6.4.2释放一个指针指向的存储空间149

6.4.3修改一个指针指向的存储空间大小149

6.4.4构建动态链表150

习题6.4154

第3篇构 建 算 法

第7单元基础算法156

7.1穷举156

7.1.1搬砖问题156

7.1.2推断名次159

习题7.1163

7.2迭代与递推168

7.2.1用二分迭代法求方程在指定区间的根168

7.2.2猴子吃桃子171

7.2.3用辗转相除法求两个正整数的最大公因子173

习题7.2176

7.3递归180

7.3.1阶乘的递归计算180

7.3.2汉诺塔182

习题7.3185

第8单元计算机模拟187

8.1随机问题模拟187

8.1.1产品随机抽样187

8.1.2用蒙特卡洛法求π的近似值190

习题8.1192

8.2基于步长的模拟192

8.2.1事件步长法——中子扩散问题192

8.2.2时间步长法——盐水池问题194

习题8.2198

第9单元数据处理201

9.1排序201

9.1.1直接选择排序201

9.1.2冒泡排序203

习题9.1206

9.2查找206

9.2.1穷举查找206

9.2.2二分查找207

习题9.2208

第4篇语 海 探 幽

第10单元算术数据类型及其转换210

10.1C数据类型概览210

10.2整数类型211

10.2.1有符号整数类型与无符号整数类型211

10.2.2标准整数类型与扩展整数类型211

10.2.3整数类型的极值宏212

10.2.4char类型213

10.2.5枚举214

10.2.6_Bool类型216

10.3浮点类型216

10.3.1浮点类型的值特性216

10.3.2浮点数据的舍入模式217

10.3.3浮点数据的求值特性217

10.3.4IEEE 754标准218

10.3.5关于浮点数的判等操作218

10.3.6_Complex类型和_Imaginary类型218

10.4数据类型转换219

10.4.1普通算术转换——提升拉齐规则219

10.4.2传送转换——与目的类型一致原则221

10.4.3数据的显式类型转换规则222

10.4.4数据类型转换注意事项222

习题10226

第11单元C语言中的常量229

11.1字面量229

11.1.1整数字面量的表示和辨识229

11.1.2浮点类型字面量的表示和辨识230

11.1.3复合字面量231

11.2宏232

11.2.1宏定义232

11.2.2使用宏应当注意的几点233

11.2.3带参宏定义234

11.3const类型限定符237

11.3.1用const限定变量237

11.3.2用const限定数组238

11.3.3用const限定函数参数239

11.3.4用const限定指针239

11.3.5在多文件程序中共享一个const定义240

习题11241

第12单元C程序中变量的访问属性247

12.1变量访问属性的概念247

12.1.1变量的存储类型与生存期247

12.1.2标识符的作用域248

12.1.3标识符的链接属性249

12.2C语言程序实体的存储类型249

12.2.1C程序中的局部变量250

12.2.2外部变量的定义与声明251

12.2.3初始化255

习题12256

第13单元操作符、表达式与语句261

13.1操作符与表达式261

13.1.1算术操作符261

13.1.2逻辑表达式262

13.1.3位操作符262

13.1.4条件表达式265

13.1.5增值表达式和减值表达式265

13.1.6下标表达式与指针的加减操作266

13.1.7赋值操作267

13.1.8左值表达式268

13.2操作符的副作用与序列点270

13.2.1操作符的副作用与透明引用270

13.2.2基于序列点的副作用不叠加表达式规则272

13.2.3函数的副作用274

13.3语句274

13.3.1表达式语句、空语句和复合语句274

13.3.2控制语句275

13.3.3跳转语句276

13.3.4关于分号(;)的说明276

习题13276

第14单元函数280

14.1函数参数280

14.1.1现代C语言函数参数不能空280

14.1.2C语言函数调用中的值结合280

14.1.3指针类型参数282

14.2函数定义与函数声明289

14.2.1函数定义289

14.2.2函数声明290

14.3内联函数291

14.3.1内联函数的概念291

14.3.2C99的内联函数定义291

14.3.3gcc的内联函数定义292

14.3.4内联函数的限制292

习题14292

第15单元输入/输出297

15.1格式化输出函数printf()297

15.1.1printf()格式参数结构297

15.1.2printf()基本格式符297

15.1.3长度修饰符298

15.1.4域宽与精度说明299

15.1.5前缀修饰符299

15.2格式化输入函数scanf()301

15.2.1scanf()指针参数301

15.2.2scanf()格式参数结构302

15.2.3数值数据的输入控制304

15.2.4scanf()与输入缓冲区305

15.2.5字符型数据的输入控制306

15.2.6scanf()的停止与返回309

15.3C语言的文件操作310

15.3.1文件及其分类310

15.3.2FILE类型及其指针312

15.3.3C语言文件操作的一般过程313

15.3.4文件操作程序示例316

习题15318

附录324

附录AC语言关键字324

附录BC语言运算符的优先级和结合方向324

附录C编译预处理命令325

C.1宏定义325

C.2文件包含326

C.3条件编译326

附录DC标准库头文件326

附录EC语言常用标准库函数327

E.1数学函数327

E.2字符函数和字符串函数328

E.3输入/输出函数329

E.4动态内存分配函数331

E.5退出程序函数331

E.6数值转换函数331

E.7时间和日期函数332

参考文献333