图书目录

目录

第1章概论1

1.1基础知识1

1.1.1为计算而生1

1.1.2计算机系统概述4

1.1.3程序设计语言5

1.2问题求解和程序设计7

1.2.1问题求解过程7

1.2.2算法和程序8

1.3C语言的发展11

1.3.1C语言的发展过程11

1.3.2C语言的标准化12

1.3.3C语言的特征13

1.4C语言编程初步14

1.4.1C编程的典型过程14

1.4.2第一个程序: 编程从这里开始15

本章小结21

习题121

第2章C语言的基本元素22

2.1字符集及词法元素22

2.1.1字符集22

2.1.2词法元素22

2.2关键字和标识符23

2.2.1关键字23

2.2.2标识符23

2.3基本数据类型24

2.3.1数据类型概述24

2.3.2char类型25

2.3.3整型类型26

2.3.4浮点类型27

2.3.5C99新增数据类型29

2.4常量与变量31

2.4.1整型常量322.4.2浮点型常量33

2.4.3字符常量33

2.4.4字符串常量35

2.4.5符号常量37

2.4.6变量声明38

2.5运算符和表达式39

2.5.1运算符概述39

2.5.2算术运算41

2.5.3关系运算42

2.5.4逻辑运算43

2.5.5自增和自减运算44

2.5.6赋值运算47

2.5.7条件运算48

2.5.8逗号运算49

2.5.9sizeof运算51

2.6位运算51

2.6.1整数在机内的表示51

2.6.2位逻辑运算52

2.6.3移位运算54

2.6.4位运算的应用55

2.7类型转换57

2.7.1类型转换的规则58

2.7.2类型转换的方法59

2.8枚举类型60

2.8.1枚举类型的声明60

2.8.2用枚举类型定义符号常量61

2.8.3枚举变量的定义61

本章小结63

习题263

第3章格式化输入与输出66

3.1字符输入与输出66

3.1.1字符输入函数getchar663.1.2字符输出函数putchar67

3.2格式化输入与输出69

3.2.1格式输出函数printf69

3.2.2格式输入函数scanf73

本章小结79

习题379

第4章程序的语句及流程控制82

4.1语句分类82

4.2表达式语句82

4.3复合语句83

4.4条件语句85

4.4.1if语句85

4.4.2switch语句88

4.5循环语句91

4.5.1while语句91

4.5.2dowhile语句96

4.5.3for语句100

4.5.4循环语句小结104

4.6转移语句104

4.6.1break语句104

4.6.2continue语句106

4.6.3return语句107

4.6.4goto语句和标号语句107

4.7程序设计实例110

4.7.1嵌套循环110

4.7.2枚举114

4.7.3筛法116

4.7.4递推117

本章小结118

习题4118第5章函数120

5.1模块化程序设计120

5.1.1函数与模块化编程120

5.1.2蒙特卡洛模拟: 猜数程序122

5.1.3C程序的一般结构125

5.2自定义函数125

5.2.1函数定义125

5.2.2函数原型128

5.2.3函数调用130

5.3变量的存储类型132

5.3.1作用域与生存期132

5.3.2自动变量133

5.3.3外部变量134

5.3.4静态变量137

5.3.5寄存器变量140

5.4递归140

5.4.1递归概述140

5.4.2递归算法分析142

5.4.3递归函数设计143

5.4.4经典问题的递归程序设计144

5.4.5分治法与快速排序147

5.5多文件的C程序148

5.5.1函数的存储类型149

5.5.2多文件编程149

5.6参数数目可变的函数151

5.7C11增加的属性152

5.7.1函数修饰符_Noreturn152

5.7.2存储类型_Thread_local153

本章小结154

习题5154

第6章编译预处理157

6.1文件包含1576.2宏定义158

6.2.1无参宏定义158

6.2.2带参数的宏定义159

6.2.3取消宏定义162

6.3条件编译162

6.3.1#if指令162

6.3.2#ifdef指令164

6.3.3#ifndef指令165

6.3.4defined运算符166

6.4断言166

6.4.1宏assert166

6.4.2静态断言167

6.5宏的高级用法167

6.5.1宏操作符#和##168

6.5.2可变参数宏168

6.5.3通用类型宏169

6.5.4预定义宏170

本章小结171

习题6171

第7章数组173

7.1数组概述173

7.2一维数组173

7.2.1一维数组的声明173

7.2.2一维数组元素的引用和下标175

7.2.3一维数组的运算176

7.2.4一维数组的逻辑结构和存储结构176

7.2.5初始化数组178

7.2.6用const、extern、static声明数组182

7.2.7一维数组作为函数的形参182

7.3二维数组185

7.3.1二维数组的定义186

7.3.2二维数组元素的引用和数组运算1867.3.3二维数组的逻辑结构和存储结构187

7.3.4二维数组的初始化188

7.3.5二维数组作为函数的形参190

7.4n维数组191

7.4.1n维数组的定义191

7.4.2n维数组的使用192

7.4.3n维数组元素的引用和使用192

7.4.4n维数组的存储结构193

7.4.5n维数组的初始化194

7.4.6n维数组作为函数的参数195

7.5字符数组和字符串196

7.5.1字符数组196

7.5.2字符串196

7.5.3字符数组的初始化197

7.5.4字符数组的使用197

7.5.5字符串处理函数200

7.5.6二维字符数组和字符串数组208

7.6基于数组的应用210

7.6.1冒泡排序211

7.6.2二分查找212

7.6.3矩阵乘运算215

本章小结216

习题7217

第8章指针220

8.1指针的概念220

8.1.1变量的地址和指针变量220

8.1.2指针变量的声明222

8.1.3指针的赋值和移动操作223

8.1.4悬挂指针和NULL指针225

8.2指针参数226

8.2.1传值调用和传址调用226

8.2.2返回多个值的函数2278.3指针和一维数组228

8.3.1一维数组元素的指针表示228

8.3.2一维数组参数的指针表示232

8.3.3高精度计算: 超长整数加法235

8.4指针与字符串237

8.4.1字符串的指针表示237

8.4.2字符串作函数参数238

8.5指针数组240

8.5.1指针数组的概念240

8.5.2用指针数组表示字符串数组241

8.5.3指向指针的指针246

8.6main函数的参数249

8.6.1命令行参数249

8.6.2带参main函数的定义249

8.6.3命令行参数的传递251

8.7指针函数252

8.7.1指针函数的声明252

8.7.2指针函数返回值的分析252

8.7.3指针函数的定义及应用253

8.8指向函数的指针256

8.8.1函数指针变量的声明256

8.8.2函数指针的应用257

8.9指针与多维数组258

8.9.1指向数组元素的指针259

8.9.2指向数组的指针259

8.9.3二维数组参数的指针表示262

8.9.4多维数组的指针表示265

8.10用typedef定义类型名266

8.10.1typedef的用法267

8.10.2typedef与#define的区别268

8.11复杂声明268

8.11.1函数指针数组269

8.11.2指向函数的指针函数2708.11.3函数指针数组的指针271

8.12restrict和_Atomic类型限定符273

8.12.1restrict限定的指针273

8.12.2_Atomic类型限定符273

本章小结274

习题8274

第9章结构与联合278

9.1结构概述278

9.2结构的声明和引用279

9.2.1结构类型的声明279

9.2.2结构变量的定义280

9.2.3结构变量的初始化280

9.2.4点运算符281

9.2.5嵌套的结构281

9.2.6结构的大小282

9.3结构数组285

9.3.1结构数组的定义285

9.3.2结构数组的初始化286

9.3.3结构数组作函数参数286

9.4指向结构的指针288

9.4.1结构指针的声明288

9.4.2箭头运算符289

9.4.3结构数组的指针表示289

9.4.4柔性数组成员295

9.5结构与函数296

9.5.1结构或结构指针作函数参数296

9.5.2结构或结构指针作函数返回值297

9.5.3复合文字作实参299

9.6联合300

9.7字段结构303

9.8结构指针的应用306

9.8.1静态和动态数据结构3069.8.2单链表的结构307

9.8.3单链表的建立和输出308

9.8.4单链表的基本操作313

9.8.5单链表排序319

9.8.6十字交叉链表322

9.8.7双向链表325

本章小结326

习题9326

第10章文件329

10.1文件概述329

10.1.1数据流329

10.1.2文件的概念329

10.1.3文件类型330

10.1.4文件指针332

10.1.5文件操作的基本步骤333

10.2文件的打开与关闭333

10.2.1打开文件函数fopen333

10.2.2关闭文件函数fclose335

10.2.3应用举例336

10.3文件的顺序读写336

10.3.1字符读写操作337

10.3.2字符串读写操作338

10.3.3格式化读写340

10.3.4数据块读写342

10.4文件的随机读写345

10.4.1文件指针的复位346

10.4.2文件指针的随机移动346

10.4.3文件指针当前位置的获取346

10.5文件的状态及异常检测350

10.5.1文件结束判断函数350

10.5.2文件读写错误信息判断函数350

10.5.3文件读写错误信息清除函数35010.6文件的重定向352

10.7C11标准新增文件操作语法353

10.7.1打开文件时的独占模式354

10.7.2用gets_s函数替代gets函数354

10.7.3文件操作中参数使用restrict修饰的说明355

10.7.4关于边界检查函数接口355

本章小结355

习题10356

第11章用户自定义库358

11.1用户自定义库概述358

11.2allocation库的设计358

11.3allocation库的接口定义360

11.4allocation库函数的实现361

11.5allocation库的生成和使用363

11.5.1生成allocation库文件363

11.5.2allocation库的使用364

本章小结365

习题11365

附录AASCII字符编码表366

附录B常用标准库函数368

参考文献374