第1章 概述 1
1.1程序设计基础 1
1.1.1问题的求解过程 1
1.1.2算法及其描述 2
1.1.3模块化与结构化 3
1.2C语言及其特点 4
1.2.1 C语言的产生和发展 4
1.2.2 C语言的主要特点 5
1.3C语言程序的基本结构 6
1.4C语言程序的执行过程 9
1.5编程环境 10
1.5.1安装和运行TC集成化环境 10
1.5.2编写和运行程序 11
1.5.3熟悉编辑环境 12
1.5.4与程序调试有关的功能 13
1.5.5简单的程序调试与纠错 14
1.6习题 16
1.7编程实战 17
第2章 数据与运算 18
2.1标识符与关键字 18
2.1.1标识符 18
2.1.2关键字 19
2.2数据类型 19
2.3常量 20
2.3.1直接常量与符号常量 20
2.3.2整型常量 21
2.3.3字符型常量与字符串常量 22
2.3.4浮点型常量 25
2.4变量 25
2.4.1变量定义与初始化 26
2.4.2整型变量 27
2.4.3字符型变量 28
2.4.4浮点型变量 29
2.5算术运算与赋值运算 30
2.5.1运算符和表达式 30
2.5.2算术运算 31
2.5.3赋值运算 31
2.5.4自加和自减运算 34
2.6关系运算和逻辑运算 35
2.6.1逻辑值 35
2.6.2关系运算 36
2.6.3逻辑运算 37
2.7位运算 39
2.7.1位运算符及表达式 39
2.7.2位运算操作 40
2.8sizeof运算与逗号运算 43
2.8.1sizeof运算符 43
2.8.2逗号运算符 44
2.9数据类型转换 45
2.9.1隐式类型转换 45
2.9.2显式类型转换 46
2.10习题 47
2.11编程实战 48
第3章 简单程序设计 49
3.1C语言语句概述 49
3.1.1语句分类 49
3.1.2语句的形式 50
3.2数据输出 52
3.2.1输出一个字符 52
3.2.2按自定义格式输出数据 53
3.3数据输入 56
3.3.1输入一个字符 56
3.3.2按自定义格式输入数据 57
3.4分支结构 60
3.4.1条件运算符与条件表达式 60
3.4.2 if语句 61
3.4.3 switch语句与多分支处理 66
3.5习题 69
3.6编程实战 70
第4章 循环结构与数组 71
4.1 while语句与do-while语句 71
4.1.1 while语句 71
4.1.2 do-while语句 73
4.2for语句 74
4.2.1 for语句的语法 74
4.2.2 for语句的特殊形式 75
4.3流程转移语句 77
4.3.1 break语句 77
4.3.2 continue语句 78
4.3.3 goto语句 79
4.4循环结构的应用 80
4.5一维数组的定义和引用 82
4.5.1一维数组的定义 83
4.5.2一维数组的引用 83
4.5.3一维数组的定义初始化 84
4.6一维数组的应用 85
4.7二维数组 87
4.7.1二维数组的定义与引用 88
4.7.2二维数组的定义初始化 88
4.7.3二维数组的应用 90
4.8习题 91
4.9编程实战 93
第5章 函数 95
5.1函数的定义与声明 95
5.1.1函数定义 95
5.1.2函数声明 98
5.2函数调用及返回 99
5.2.1函数的调用过程 99
5.2.2用retum语句控制函数返回 100
5.3形参与实参 101
5.3.1函数的形式参数 101
5.3.2实参与形参的匹配 102
5.3.3函数调用表达式 103
5.4参数的传值调用规则 105
5.5递归调用 106
5.5.1递归调用过程 106
5.5.2使用递归函数的典型问题 108
5.6变量的存储属性 110
5.6.1变量的生存期与作用域 111
5.6.2局部变量 111
5.6.3外部变量 115
5.6.4 static修饰、变量屏蔽和外部变量的使用 117
5.7编译预处理指令 119
5.7.1宏定义 119
5.7.2文件包含 121
5.7.3条件编译 121
5.8习题 122
5.9编程实战 124
第6章 指针 126
6.1指针与指针变量 126
6.1.1指针是经过包装的地址 126
6.1.2指针变量 128
6.2指针变量的赋值与指针的间接引用 129
6.2.1指针变量的赋值 129
6.2.2运算符与间接访问 130
6.2.3指针变量的初始化 132
6.3指针的运算 133
6.3.1指针的加减算术运算 133
6.3.2指针的自加和自减运算 135
6.3.3指针的比较 135
6.4指针作函数的参数 136
6.4.1修改实参变量的值 136
6.4.2从被调用函数取得信息 138
6.5利用指针访问一维数组 139
6.5.1利用指针实现的快速数组元素访问 139
6.5.2一维数组名的指针含义 140
6.5.3指针与数组的一致性 140
6.6向函数传递一维数组 141
6.7习题 145
6.8编程实战 147
第7章 字符串 148
7.1用字符数组作字符串变量 148
7.1.1对字符数组的特殊处理 148
7.1.2用作字符串变量的字符数组的初始化 150
7.2指向字符串常量的指针变量 151
7.2.1模糊的字符串常量与变量 151
7.2.2利用const限制指针的行为 152
7.3字符串的输出与输入 153
7.3.1字符串的输出 153
7.3.2字符串的输入 154
7.3.3内存格式化 154
7.4字符串操作 155
7.4.1向函数传递字符串 155
7.4.2返回指针的函数 156
7.4.3字符串运算函数 158
7.4.4字符串处理函数的设计 161
7.5指针数组 163
7.5.1指针数组的定义与引用 163
7.5.2字符串数组 163
7.6指向指针的指针 165
7.6.1指向指针的指针常量与变量 165
7.6.2指针数组作函数参数 166
7.7习题 167
7.8编程实战 169
第8章 与指针相关的其他技术 171
8.1二维数组的指针访问 171
8.1.1二维数组的一维表示 171
8.1.2二维数组名的指针含义 172
8.1.3指向一维数组的指针变量 174
8.1.4二维数组作函数参数 174
8.1.5利用二维数组实现的字符串数组 177
8.2动态内存管理 178
8.2.1动态内存分配与使用 178
8.2.2 calloc函数与realloc函数 180
8.3指向函数的指针 182
8.3.1指向函数的指针常量与变量 182
8.3.2函数指针的应用 183
8.4定义的识别与数据类型的显式描述 185
8.4.1由运算识别复杂的定义 185
8.4.2用typedef显式描述数据类型 187
8.5习题 189
8.6编程实战 191
第9章 自定义数据类型 192
9.1枚举 192
9.2结构体类型 193
9.2.1结构体类型的定义 194
9.2.2结构体类型的变量定义 195
9.3结构体变量的引用 197
9.3.1引用结构体的成员 197
9.3.2结构体变量的初始化 197
9.3.3整体引用结构体变量 198
9.3.4结构体对象在函数间的传递 198
9.4结构体数组和指针 200
9.4.1结构体数组 200
9.4.2结构体指针 201
9.5结构体指针的应用——链表 203
9.5.1单向链表及其支撑结构 203
9.5.2链表的创建与访问 205
9.5.3链表结点的查找、插入与删除 207
9.6位段 210
9.7共用体 211
9.8习题 212
9.9编程实战 213
第10章 文件 215
10.1文件概述 215
10.1.1文件的概念 215
10.1.2文本流与二进制流 215
10.1.3标准I/O和系统I/O 216
10.2文件的打开与关闭 216
10.2.1文件类型与文件指针 216
10.2.2文件的打开 217
10.2.3文件的关闭 220
10.3文件的顺序读写 220
10.3.1字符读写函数fgetc和fputc 221
10.3.2文件位置指针的检测 222
10.3.3getw函数和putw函数 224
10.3.4读写字符串函数fgets和fputs 224
10.3.5格式化读写函数fscanf和fprintf 225
10.3.6按块读写函数fread和fwrite 226
10.4文件的随机读写 229
10.4.1以读/写方式打开文件 229
10.4.2读写位置的随机定位与fseek函数 229
10.5相关函数 231
10.6习题 232
10.7编程实战 233
附录A 常用字符与ASCII码对照表 234
附录B 运算符的优先级与结合性 235
附录C Windows平台下的编程环境简介 236
参考文献 243