第1章 C语言概述 1
引言 为什么要学习C语言 1
1.1 程序和算法 4
1.1.1 程序与结构化程序设计方法 4
1.1.2 算法的概念和特点 6
1.1.3 算法的表示 7
1.2 安装Visual C++ 6.0 8
1.3 第1个C程序 14
1.3.1 建立并运行程序 14
1.3.2 程序greeting.c解析 17
1.4 预处理指令 18
1.4.1 使用#define 18
1.4.2 使用#include 19
1.5 标识符和关键字 22
1.5.1 关键字 22
1.5.2 标识符 23
1.6 I/O函数printf()和scanf() 23
1.6.1 格式输出函数printf() 23
1.6.2 格式输入函数scanf() 25
1.6.3 printf()函数和scanf()函数的返回值 28
1.7 代码注释 29
1.8 编程风格与常见的几类编程错误 31
1.8.1 编程风格 31
1.8.2 常见的程序代码错误 31
1.8.3 常见的4类编程错误 31
本章小结 34
习题 35
第2章 基本数据类型和运算符 37
2.1 基本数据类型 37
2.2 常量 39
2.3 变量 44
2.4 指针变量 46
2.5 运算符与表达式 49
2.5.1 算术运算符和算术表达式 49
2.5.2 赋值运算符和赋值表达式 51
2.5.3 自增和自减运算符 55
2.5.4 逗号运算符和逗号表达式 57
2.5.5 其他运算符 57
2.5.6 混合运算 58
本章小结 61
习题 62
第3章 控制结构 64
3.1 基本控制结构 64
3.1.1 基本语句 64
3.1.2 常用的输入输出函数 66
3.1.3 顺序结构程序设计示例 68
3.2 程序中的控制运算符 69
3.2.1 关系运算符 70
3.2.2 逻辑运算符 71
3.2.3 条件运算符 73
3.3 程序中的选择结构 74
3.3.1 if语句 74
3.3.2 switch语句 81
3.3.3 多重选择结构 85
3.4 程序中的循环结构 93
3.4.1 while循环结构 94
3.4.2 do-while循环结构 99
3.4.3 for循环结构 104
3.4.4 break和continue语句 112
3.4.5 多重循环结构 116
3.5 蒙特卡罗法与随机数函数 121
3.6 位运算符 126
3.6.1 按位取反运算符 126
3.6.2 按位与和按位或运算符 127
3.6.3 按位异或运算符 129
3.6.4 左位移和右位移运算符 130
3.6.5 位运算应用举例 131
本章小结 133
习题 137
第4章 数组和指针 144
4.1 一维数组 144
4.1.1 一维数组的定义和初始化 144
4.1.2 一维数组元素的引用及基本操作 147
4.1.3 一维数组的应用举例 151
4.2 二维数组及多维数组 161
4.2.1 二维数组的定义和初始化 162
4.2.2 二维数组的应用举例 164
4.2.3 多维数组 171
4.3 字符数组及字符串处理函数 173
4.3.1 字符数组的初始化 173
4.3.2 字符数组的输入 175
4.3.3 字符数组的输出 176
4.3.4 常用的字符串函数 180
4.4 指针和数组 186
4.4.1 指针与一维数组 186
4.4.2 指针与二维数组 193
4.4.3 指针与字符串 198
本章小结 202
习题 204
第5章 模块化编程 210
5.1 函数概述 210
5.2 函数的定义与声明 212
5.2.1 函数的分类 212
5.2.2 函数的定义形式 213
5.2.3 函数的参数和函数的返回值 215
5.2.4 函数的声明 217
5.3 函数的调用 218
5.3.1 函数的调用形式 218
5.3.2 函数调用时的参数传递 220
5.3.3 函数的嵌套调用 227
5.3.4 函数的递归调用 228
5.4 变量的作用域与存储类型 234
5.4.1 变量的作用域 234
5.4.2 变量的存储类型 237
5.5 内部函数与外部函数 241
5.5.1 内部函数 241
5.5.2 外部函数 242
5.6 指针函数 243
5.7 编译预处理——条件编译 243
5.8 模块化程序设计 246
本章小结 251
习题 252
第6章 指针进阶与内存空间管理 255
6.1 指针的进一步理解 255
6.1.1 指针的类型 255
6.1.2 指针所指向的类型 256
6.1.3 指针的值 256
6.2 指针数组 257
6.2.1 指针数组的定义 257
6.2.2 指针数组的应用举例 258
6.2.3 用指针数组引用多个字符串 259
6.3 函数指针 260
6.3.1 Calbychoice.c程序及解析 261
6.3.2 Calbychoicel.c程序及解析 263
6.3.3 常见的几种函数指针 265
6.4 动态内存分配 267
6.4.1 calloc()和malloc()函数 268
6.4.2 free()函数 269
6.4.3 Score.c程序及解析 272
6.4.4 堆内存的多次分配之Scoremore.c程序及解析 274
6.4.5 动态内存分配应用要点 275
6.5 main()函数的命令行参数 276
本章小结 278
习题 279
第7章 结构体与共用体 280
7.1 结构体类型定义 280
7.2 结构体变量的定义、初始化和使用 283
7.2.1 结构体变量的定义 283
7.2.2 结构体变量初始化及引用 285
7.3 结构体数组和结构体指针 291
7.3.1 结构体数组 291
7.3.2 结构体指针 294
7.4 在函数中使用结构体 295
7.4.1 结构体作为函数参数 295
7.4.2 返回结构体的函数 299
7.5 利用结构体和指针处理动态链表 302
7.5.1 单向链表的结构体 303
7.5.2 建立链表 303
7.5.3 链表的遍历 305
7.5.4 链表的删除操作 306
7.5.5 链表的插入操作 307
7.6 共用体类型 310
7.6.1 共用体类型及变量的定义 310
7.6.2 共用体变量的使用 312
本章小结 315
习题 318
第8章 数据文件编程方法 320
8.1 硬盘文件 321
8.1.1 二进制文件和文本文件 321
8.1.2 缓冲文件系统 322
8.2 文件的打开与关闭 323
8.3 文件的输入/输出操作 326
8.3.1 读写文件中的字符 326
8.3.2 格式化读写函数 332
8.4 文件的随机访问 333
8.5 文件检测与输入输出重定向 335
8.5.1 文件检测函数 335
8.5.2 输入输出重定向命令 338
本章小结 341
习题 342
附录 344
附录Ⅰ ASCII码字符集 344
附录Ⅱ 常用的标准库函数 345
附录Ⅲ VC++运算符的优先级和结合性 349
附录Ⅳ C语言上机常见错误提示 350
附录Ⅴ VC++生成的各种文件格式解析 354
例题索引 356
参考文献 360