第1章 机器语言模式 1
1.1 模拟机器指令集与程序设计举例 1
1.2 机器语言的局限性 6
问题与练习 7
第2章 C语言模式 8
2.1 基于基本类型的编程模式 8
2.2 基本数据类型 17
2.2.1 整型 18
2.2.2 实型 19
2.2.3 字符型 20
2.3 运算符和表达式 22
2.3.1 自增自减运算符和表达式 23
2.3.2 复合赋值运算符和表达式 23
2.3.3 条件表达式和逗号表达式 24
2.3.4 关系运算符和逻辑运算符 24
2.3.5 运算符优先级 26
2.4 类型转换 26
2.5 程序流程控制结构 27
2.5.1 if-else语句 27
2.5.2 switch-case语句 29
2.5.3 break语句和continue语句 30
问题与练习 31
第3章 函数 34
3.1 函数自定义与调用 34
3.2 函数声明与定义 38
3.3 函数与变量的存储类别 39
3.3.1 自动局部变量 40
3.3.2 静态局部变量 42
3.3.3 外部变量 43
3.4 函数应用设计举例 44
3.4.1 阶乘累加 44
3.4.2 求π的近似值 45
3.4.3 求最大公约数 46
3.4.4 判断质数 47
3.4.5 数制转换 47
3.5 模块化程序设计 48
3.5.1 全局外部函数 49
3.5.2 静态外部函数 50
3.5.3 全局外部变量 50
3.5.4 静态外部变量 51
3.6 编译预处理 52
3.6.1 无参宏指令 52
3.6.2 带参宏指令 53
3.6.3 条件编译指令 55
3.6.4 文件包含指令 56
问题与练习 58
第4章 一维数组和指针 59
4.1 指针和指针传递 59
4.2 一维数组和指针 63
4.2.1 一维数组 63
4.2.2 指向一维数组的指针 66
4.2.3 数组类型和数组首元素类型 69
4.3 const型指针 71
4.4 动态数组 73
4.5 数组和指针应用举例 76
4.5.1 Josephus问题 76
4.5.2 选择排序 79
4.5.3 起泡排序 81
4.5.4 划分数组元素 83
4.5.5 删除数组中的重复数据 85
4.5.6 筛法求质数 86
4.5.7 顺序搜索和二分搜索 87
4.6 索引和指针 89
4.7 指针和左值 90
4.8 函数指针 90
问题与练习 91
第5章 字符串 93
5.1 字符串常量和字符串变量 93
5.2 字符串基本操作函数原型 98
5.3 字符串基本操作函数实现 99
5.4 字符串基本操作函数的补充 102
5.4.1 取子串 103
5.4.2 子串插入 104
5.4.3 子串删除 106
5.4.4 字符查找 107
5.5 模式匹配 107
问题与练习 110
第6章 结构体、联合体和枚举 111
6.1 结构体 111
6.1.1 结构体定义 111
6.1.2 结构体变量和typedef名字 112
6.1.3 结构体变量的初始化和赋初值 113
6.1.4 结构体数组 114
6.1.5 结构体的嵌套 115
6.1.6 结构体返回值和指针传递 116
6.1.7 数组和含有数组的结构体变量 116
6.2 联合体 118
6.3 枚举 120
6.4 结构体应用设计举例 122
6.4.1 模拟洗牌 122
6.4.2 Date结构体 123
6.4.3 三天打鱼,两天晒网 126
问题与练习 127
第7章 顺序表 130
7.1 数组的局限性 130
7.2 顺序表声明与实现 131
7.2.1 顺序表声明 132
7.2.2 顺序表实现 134
7.3 索引和指针 138
7.4 数据抽象和封装 139
问题与练习 140
第8章 链表 141
8.1 链表的结构分析 142
8.2 链表的声明和实现 143
问题与练习 148
第9章 文件 149
9.1 文件指针 149
9.2 文件的打开与关闭 150
9.3 文件的读写 153
9.3.1 字符的读写 153
9.3.2 字符串的读写 154
9.3.3 无格式读写 155
9.3.4 格式读写 158
9.3.5 文件的随机访问 159
问题与练习 161
第10章 二维数组和指针 163
10.1 概述 163
10.2 二维数组和一维数组 169
10.3 马鞍点 170
10.4 指针数组和二级指针 172
10.5 指针数组和二维数组 173
问题与练习 175
第11章 非线性结构与递归 176
11.1 树形结构与递归 176
11.2 递归函数 180
问题与练习 183
附录A 命名规则 185
附录B 常用的ANSI C标准库函数 186
参考文献 191