第1章 C语言程序设计和编程平台概述 1
1.1 计算机语言和程序设计 1
1.1.1 机器语言 1
1.1.2 汇编语言 1
1.1.3 高级语言 2
1.2 C语言程序简介 2
1.2.1 C语言简介 2
1.2.2 简单的C程序举例 2
1.2.3 C语言程序的基本特点 4
1.3 C程序设计和编程平台 5
1.3.1 编程语言和编程平台 5
1.3.2 主流平台上的C开发流程概述 6
1.4 DOS平台下的C开发 8
1.4.1 Turbo C编程环境 8
1.4.2 编辑、编译、链接、运行第一个C程序 10
1.4.3 运行C程序前的Directories选项设置 12
1.4.4 编码规范及编程习惯 13
1.5 Windows平台下的C开发 13
1.5.1 Windows的窗口本质 14
1.5.2 Windows的消息驱动机制 14
1.5.3 安装和使用Visual C++6.0 IDE环境 16
1.5.4 Windows程序的框架结构 20
1.6 Linux平台下的C开发 24
总结与提高 25
第2章 C语言的基本数据类型及其基本操作 27
2.1 C语言的数据类型 27
2.1.1 基本数据类型 27
2.1.2 构造类型 27
2.1.3 指针类型 28
2.1.4 空类型 28
2.2 常量和变量 28
2.2.1 常量 28
2.2.2 变量 29
2.3 整型数据 30
2.3.1 整型常量的表示 30
2.3.2 整型常量的类型 31
2.3.3 整型变量 32
2.3.4 整型常量的类型匹配 34
2.4 实型数据 35
2.4.1 实型常量的表示 35
2.4.2 实型变量 35
2.5 字符型数据 37
2.5.1 字符型常量 37
2.5.2 字符串常量 38
2.5.3 字符变量 39
2.5.4 字符数据的存放形式及使用方法 39
2.6 算术运算符与算术表达式 40
2.6.1 基本算术运算符 40
2.6.2 算术表达式及算术运算符的优先级和结合性 41
2.6.3 逻辑表达式 41
2.6.4 自增、自减运算符 42
2.7 赋值运算符与赋值表达式 44
2.7.1 赋值运算符 44
2.7.2 复合赋值运算符 45
2.7.3 赋值表达式 46
2.8 逗号运算符与逗号表达式 46
2.9 位运算符 47
2.9.1 按位与(&) 47
2.9.2 按位或(|) 48
2.9.3 按位异或(∧) 48
2.9.4 按位取反(~) 49
2.9.5 移位运算(>>、<<) 49
2.10 基本的输入输出函数 49
2.10.1 printf函数 50
2.10.2 scanf函数 54
2.10.3 putchar函数与getchar函数 56
总结与提高 57
第3章 流程控制 60
3.1 顺序结构 60
3.1.1 顺序结构的概念 60
3.1.2 顺序结构程序举例 61
3.2 选择结构 63
3.2.1 选择结构的概念 63
3.2.2 关系表达式和逻辑表达式 64
3.2.3 if语句 65
3.2.4 switch语句 71
3.2.5 条件运算符和条件表达式 72
3.3 循环结构 73
3.3.1 循环结构的概念 73
3.3.2 while语句 74
3.3.3 do…while语句 78
3.3.4 for语句 79
3.3.5 break语句、continue语句和goto语句 81
总结与提高 83
第4章 数 组 87
4.1 一维数组的定义、初始化和引用 87
4.1.1 一维数组的定义方式 87
4.1.2 一维数组的初始化 89
4.1.3 一维数组元素的引用 89
4.1.4 一维数组程序举例 90
4.2 二维数组的定义、初始化和引用 94
4.2.1 二维数组的定义 94
4.2.2 二维数组的初始化 96
4.2.3 二维数组元素的引用 96
4.2.4 二维数组程序举例 97
4.3 字符数组与字符串 101
4.3.1 字符数组与字符串的关系 101
4.3.2 字符数组的定义 101
4.3.3 字符数组的初始化 102
4.3.4 字符数组的引用 103
4.3.5 字符数组的输入输出 104
4.3.6 字符串处理函数 106
4.3.7 字符串的输入输出 110
4.3.8 程序举例 110
总结与提高 115
第5章 结构体和共用体 118
5.1 结构体类型与结构体变量 118
5.1.1 结构体类型的定义 118
5.1.2 结构体变量的定义 119
5.1.3 结构体变量的初始化 122
5.1.4 结构体变量的引用 123
5.1.5 结构体变量的输入和输出 124
5.2 结构体数组 126
5.2.1 结构体数组的定义 126
5.2.2 结构体数组的初始化 128
5.2.3 结构体数组的引用 130
5.2.4 结构体数组的输入和输出 130
5.3 结构体指针 132
5.3.1 指向结构体变量的指针 132
5.3.2 指向结构体数组的指针 134
5.4 结构体作为函数参数 135
5.4.1 结构体变量作为函数参数 135
5.4.2 结构体指针变量作为函数参数 137
5.4.3 函数的返回值为结构体类型 138
5.5 链表 140
5.6 共用体 141
5.6.1 共用体的概念 141
5.6.2 共用体类型与共用体变量的定义 141
5.6.3 共用体变量的初始化和引用 143
5.6.4 共用体类型数据的特点 143
5.6.5 共用体的应用 144
5.7 枚举类型 144
5.8 用typedef定义类型 146
总结与提高 147
第6章 函 数 149
6.1 概述 149
6.1.1 什么是模块化 149
6.1.2 什么是函数 150
6.2 函数的定义与分类 151
6.2.1 函数的定义 151
6.2.2 函数的参数和返回值 152
6.2.3 函数的分类 155
6.3 函数的调用 156
6.3.1 函数调用的一般形式 156
6.3.2 函数调用的方式 157
6.3.3 对被调用函数的声明和函数原型 157
6.3.4 嵌套调用 159
6.3.5 递归调用 160
6.3.6 程序设计举例 161
6.4 常见的库函数 165
6.4.1 库函数概述 165
6.4.2 字符与字符串函数 165
6.4.3 简单数学函数 166
6.4.4 基本屏幕控制函数 167
6.5 变量的性质 171
6.5.1 变量的作用域(可见性)概述 172
6.5.2 变量的生命期(存在性)概述 172
6.6 变量的作用域(结合变量的性质) 172
6.6.1 局部变量 172
6.6.2 全局变量 173
6.6.3 全局变量作用域的扩展和限制 175
6.6.4 总结 178
6.7 变量的生命期(结合变量的性质) 178
6.7.1 动态局部变量 178
6.7.2 静态局部变量 179
6.8 内部函数和外部函数 181
6.8.1 外部函数 182
6.8.2 内部函数 182
6.9 多文件程序——项目 182
6.10 怎样创建项目、自己的库函数 183
6.10.1 创建并运行项目 183
6.10.2 创建自己的库函数 183
6.11 程序设计举例 185
总结与提高 187
第7章 指针 190
7.1 指针的基本概念 190
7.1.1 预备知识 190
7.1.2 指针 192
7.1.3 指针其名 192
7.1.4 变量的指针与指针变量 192
7.2 指针变量的定义和赋值 194
7.2.1 指针变量的定义 194
7.2.2 指针变量的赋值 195
7.2.3 void指针 196
7.3 指针变量的使用 197
7.3.1 与指针相关的运算符 197
7.3.2 变量的存取方式 198
7.3.3 停下来思考一下 198
7.3.4 指针变量作为函数参数 199
7.4 指针与数组 200
7.4.1 数组和数组元素的指针 200
7.4.2 指向数组和数组元素的指针变量 201
7.4.3 数组元素的引用 203
7.4.4 数组名作为函数参数 204
7.4.5 字符串的指针和指向字符串的指针变量 206
7.4.6 指针数组 208
7.4.7 指针与二维数组 210
7.5 指向指针的指针 213
7.5.1 指向指针的指针 213
7.5.2 定义指向指针变量的指针变量 213
7.5.3 指向指针的指针变量的应用 214
7.6 指针与结构 216
7.6.1 指向结构变量的指针/指针变量 217
7.6.2 指向结构体数组的指针/指针变量 217
7.6.3 指向结构体的指针作为函数参数 218
7.7 指针与函数 219
7.7.1 返回指针类型的函数 219
7.7.2 函数的指针和指向函数的指针变量 220
总结与提高 221
第8章 指针的应用——链表 226
8.1 链表概述 226
8.2 简单静态链表 227
8.3 动态链表和动态内存分配函数 228
8.3.1 动态链表 228
8.3.2 动态内存分配函数 229
8.3.3 利用指针和动态内存分配函数实现不定长数组 229
8.4 建立动态链表 230
8.5 对链表的插入与删除操作 233
8.5.1 对链表的插入操作 233
8.5.2 对链表的删除操作 235
8.6 链表综合应用 236
总结与提高 241
第9章 编译预处理 243
9.1 宏定义 243
9.1.1 不带参数的宏定义 243
9.1.2 带参数的宏定义 245
9.2 文件包含 248
9.3 条件编译 249
9.3.1 格式1 250
9.3.2 格式2 250
9.3.3 格式3 251
总结与提高 251
第10章 文件 253
10.1 C文件概述 253
10.1.1 二进制文件和文本文件 253
10.1.2 二进制文件和文本文件的比较 254
10.2 文件的打开与关闭 255
10.2.1 文件的打开(fopen函数) 255
10.2.2 文件的关闭(fclose函数) 258
10.3 文件的读写 258
10.3.1 fscanf函数和fprintf函数 258
10.3.2 fread函数和fwrite函数 260
10.3.3 fgetc函数和fputc函数 261
10.3.4 其他读写函数 264
10.4 文件的定位 266
10.4.1 rewind函数 266
10.4.2 fseek函数 267
10.4.3 ftell函数 268
10.5 文件的状态 269
10.5.1 feof函数 269
10.5.2 ferror函数 269
10.5.3 clearerr函数 269
10.6 文件综合应用:个人小金库的管理 270
10.6.1 顺序文件和随机文件 270
10.6.2 需求及功能分析 270
10.6.3 源程序 271
总结与提高 274
第11章 位运算 277
11.1 位运算的类型 277
11.1.1 按位与 277
11.1.2 按位或 278
11.1.3 按位异或 279
11.1.4 取反 279
11.1.5 左移 279
11.1.6 右移 279
11.2 位运算举例 280
11.3 位段 281
总结与提高 283
第12章 综合实例 285
12.1 贪食蛇游戏 285
12.1.1 程序说明 285
12.1.2 源程序代码 286
12.2 学生成绩管理系统 291
12.2.1 程序说明 291
12.2.2 源程序代码 292
12.3 学籍管理系统 308
12.3.1 函数简介 308
12.3.2 编程算法思路 309
12.3.3 设计小结 310
12.3.4 源程序代码 310
总结与提高 328
附录1 C语言语法之“大局观” 329
附录2 ASCII码表及其中控制字符的含义 331
附录3 C语言中的关键字 332
附录4 C语言运算符的优先级与结合性 333
附录5常用库函数 334
附录6常见错误分析及处理方法 340