第1章 概述 1
1.1计算机硬件 2
1.1.1 CPU 3
1.1.2主存和外存 3
1.1.3输入输出设备 4
1.2计算机软件 4
1.2.1操作系统 4
1.2.2应用软件 6
1.3计算机编程语言 7
1.3.1机器码和汇编语言 7
1.3.2高级编译语言 7
1.3.3高级脚本语言 11
习题 13
第2章 入门 14
2.1第一个C程序 14
2.2实例运行要点 17
2.2.1在ChIDE下编辑和执行C程序 17
2.2.2命令shell环境下跨平台的文件处理命令 23
2.2.3 Ch环境下C程序、语句和表达式的交互运行 26
2.2.4命令shell下C程序的编译、链接和运行 30
2.2.5在ChIDE中程序的编辑、编译、链接和执行 33
习题 36
第3章 数制、标量数据类型与输入输出 39
3.1整数数制 39
3.1.1十进制数 39
3.1.2二进制数 39
3.1.3八进制数 41
3.1.4十六进制数 42
3.2字符集 43
3.3注释 44
3.4声明 45
3.5 32位和64位编程模式 46
3.6整数类型 47
3.6.1 int类型 48
3.6.2 short类型 49
3.6.3 C99标准中long long类型 50
3.6.4 long类型 50
3.6.5类型说明符signed和unsigned 50
3.6.6整型常量 51
3.7 C99标准中的布尔类型bool 52
3.8字符类型char 52
3.9浮点数类型 56
3.9.1 float类型 56
3.9.2 double和long double类型 57
3.9.3浮点常量 57
3.10 C99标准中的复数类型 60
3.11指针类型 60
3.12 typedef 61
3.13计算机编程数据模式的判定 62
3.14初始化 63
3.15 格式化输入输出的介绍 64
3.15.1函数printf() 64
3.15.2函数 scanf() 67
3.15.3重定向输入和输出到文件 71
3.15.4重定向程序输入输出的管道和文件归档的处理 73
3.16实例运行要点 74
习题 74
第4章 运算符与表达式 77
4.1赋值运算符 77
4.2算术运算符 79
4.3隐式类型转换 81
4.4运算符的优先级和结合律 82
4.5关系运算符 87
4.6逻辑运算符 89
4.7位运算符 93
4.8复合赋值运算符 96
4.9自增和自减运算符 97
4.10类型强制转换运算符 97
4.11 sizeof运算符 98
4.12条件运算符 100
4.13逗号运算符 101
4.14实例运行要点 102
4.14.1在Visual C+++编译时定义宏M PI 102
4.14.2在GNU C中使用标准的数学库函数 102
习题 103
第5章 语句和控制流 106
5.1设计算法的流程图 106
5.2简单语句和复合语句 107
5.3空语句和表达式语句 107
5.4选择语句 107
5.4.1 if语句 108
5.4.2 if-else语句 108
5.4.3 else-if语句 109
5.4.4 switch语句 114
5.5循环语句 117
5.5.1 while循环 117
5.5.2程序的主要部分和循环的控制 119
5.5.3 do-while循环 124
5.5.4 for循环 125
5.5.5嵌套的循环 129
5.6跳转语句 132
5.6.1 break语句 132
5.6.2 continue语句 133
5.7算法设计的伪代码和过程 133
5.8使用文件结束符或者文件结束组合键的循环终止 146
5.9实例运行要点 149
习题 149
第6章 函数 155
6.1函数定义 155
6.2函数原型 161
6.3函数调用:值传递与引用传递 164
6.4标准C头文件和库 164
6.5数学函数和C99中的通用型函数 165
6.6用于数学公式的函数 166
6.7递归函数 170
6.8算法设计与实现:二分法求方程根 172
6.9实例运行要点 178
6.9.1在Ch命令shell中函数的交互运行 178
6.9.2 Ch中函数文件的使用 179
习题 180
第7章 数组 185
7.1数组声明 185
7.1.1一维数组 185
7.1.2二维数组 186
7.1.3有关数组定义 186
7.1.4数组的大小 186
7.2数组存储 187
7.3数组初始化 189
7.4数组中的数据处理 190
7.5向函数传递数组 202
7.5.1函数的一维数组传递 202
7.5.2函数的二维数组传递 207
7.6 C99中的可变长数组 210
7.6.1函数的可变长数组传递 210
7.6.2待定形数组 212
7.7实例运行要点 213
习题 213
第8章 预处理 216
8.1宏替换 217
8.2源文件包含 220
8.3条件包含 220
8.4 Pragma指令 223
8.5实例运行要点 226
习题 227
第9章 存储类型和程序结构 229
9.1全局变量和局部变量 229
9.1.1标识符的作用域 230
9.1.2标识符的命名空间 233
9.2存储类型 233
9.2.1对象的存储期 233
9.2.2函数内的静态变量 234
9.2.3函数外的静态变量 236
9.3外部变量与函数 238
9.3.1标识符连接 238
9.3.2函数之间通信方式的选择 240
9.4环境变量 241
9.5实例运行要点 245
习题 247
第10章 指针 248
10.1指针变量 248
10.1.1指针运算符 249
10.1.2与指针相关的关系运算符 252
10.2指针的算术运算 252
10.3按地址传递参数调用函数 258
10.4指针修饰词const 265
10.5指针与数组的关系 266
10.6用指针传递一维数组给函数 268
10.7动态内存分配 270
10.8返回指针的函数 275
10.9指针的指针 276
10.10指针数组 279
10.11函数指针 285
10.11.1函数指针作为函数的参数 288
10.11.2用二分法设计一个函数求方程的根 290
10.12指针用于硬件接口 293
习题 294
第11章 字符与字符串 298
11.1字符的编码 298
11.2字符的输入与输出 299
11.3字符处理函数 300
11.4字符串 302
11.5字符串的输入与输出 303
11.6续行符 306
11.7把字符串转化成数值 306
11.8字符串操作 309
11.8.1求字符串长度 309
11.8.2字符串复制 310
11.8.3字符串连接 312
11.8.4字符串比较 315
11.8.5字符串搜索 316
11.9函数main)及命令行参数 317
习题 319
第12章 结构体与枚举 321
12.1结构体 321
12.1.1结构体的定义 321
12.1.2结构体类型变量的声明 322
12.1.3结构体指针 324
12.1.4结构体成员的访问 325
12.1.5结构体的初始化 328
12.1.6结构体的大小 329
12.1.7结构体的赋值与比较 331
12.1.8结构体数组 332
12.1.9结构体作为函数参数 335
12.1.10返回结构体的函数 339
12.1.11返回结构体指针的函数 341
12.1.12结构体的动态内存分配 343
12.1.13结构体中指针类型的成员操作处理 345
12.1.14嵌套结构体 346
12.2枚举 352
12.3一个GPA库的设计及其应用 353
12.3.1一个GPA库的设计与实现 354
12.3.2 GPA库的测试 363
12.3.3自顶向下设计方法以及一个菜单驱动的交互式GPA程序的实现 366
习题 378
第13章 文件处理 381
13.1打开与关闭文件 381
13.2顺序文件的读与写 383
13.3使用数据文件的GPA库的设计及其应用 394
13.3.1开发一个使用数据文件的GPA库 395
13.3.2开发一个菜单驱动的使用数据文件的交互式GPA程序 401
习题 408
第14章 动态数据结构 410
14.1自引用结构体 410
14.2单链表 414
14.2.1创建和释放一个结点 417
14.2.2在链表头前插入一个结点 420
14.2.3在链表尾部插入一个结点 421
14.2.4在链表中插入一个结点 422
14.2.5在链表中查找并删除一个结点 423
14.2.6打印一个结点和链表的信息 427
14.2.7删除整个链表 427
14.3软件开发案例研究——开发一个菜单驱动的交互式GPA程序 428
14.3.1模块化软件设计——可重用库与应用软件的分离 428
14.3.2开发一个使用单链表的GPA库 429
14.3.3开发一个菜单驱动的使用单链表的交互式GPA程序 444
14.3.4进一步优化GPA库及其应用程序 450
14.4实例运行要点 451
习题 451
附录A 用ChIDE调试程序 454
附录B 绘图函数库和数组数据 461
附录C Ch的高级数值分析功能 482
附录D 关键字 494
附录E Ch支持的C99功能 496
附录F ASCII码字符集 497