第1章 C语言程序设计简介 1
1.1 C语言概述 1
1.1.1 程序设计语言 1
1.1.2 C语言的简介 2
1.1.3 C++语言简介 2
1.1.4 C语言的主要特点 3
1.2 C语言程序简介 3
1.2.1 简单的C程序 3
1.2.2 C语言源程序的结构特点 5
1.3 运行一个C程序 6
1.3.1 C程序运行的基本步骤 6
1.3.2 Microsoft Visual C++6.0集成环境 7
小结 10
习题 11
第2章 C语言程序基础 13
2.1 C程序的基本结构 13
2.2 C语言基本语法成分 14
2.2.1 C语言的字符集 14
2.2.2 标识符 14
2.2.3 关键字 14
2.2.4 运算符 15
2.2.5 分隔符 15
2.3 C语言数据类型 15
2.3.1 整型(int)数据 16
2.3.2 浮点型(float)数据 16
2.3.3 字符型(char)数据 16
2.4 C语句 18
2.5 C语言的格式输出printf函数 19
2.6 C语言的格式输入scanf函数 22
小结 25
习题 27
第3章 选择结构 30
3.1 问题的引出(选择结构概述) 30
3.2 关系运算与逻辑运算 31
3.2.1 关系运算 31
3.2.2 逻辑运算 32
3.3 两个分支的if语句 36
3.3.1 if~else~语句的基本形式 36
3.3.2 求两个数中的最大数 36
3.3.3 计算三角形的面积 36
3.4 一个分支的语句 37
3.4.1 if~语句的基本形式 38
3.4.2 求三个数中的最大数 38
3.4.3 从大到小输出三个数 38
3.5 多个分支的if语句 40
3.5.1 if~else if语句的基本形式 40
3.5.2 判断输入字符的类型 40
3.5.3 输出学生成绩的等级 41
3.6 if语句的嵌套 43
3.7 switch语句 44
3.7.1 switch语句的基本结构 44
3.7.2 输入数字,输出对应的英文单词 45
3.7.3 简单的四则运算计算器 47
3.7.4 用switch语句实现输出学生成绩的等级 48
小结 49
习题 51
第4章 循环结构程序设计 55
4.1 循环结构概述 55
4.2 while循环语句 56
4.2.1 while循环语句概述 56
4.2.2 猴子吃桃子问题 58
4.2.3 求两个数的最大公约数 60
4.2.4 将正整数分解成质因数 62
4.3 do~while循环语句 63
4.3.1 do~while循环语句概述 63
4.3.2 求整数的数据位数 64
4.3.3 用格里高利公式求π的近似值 65
4.4 for循环语句 66
4.4.1 for循环语句基本形式 66
4.4.2 水仙花数问题 69
4.4.3 分数数列求和 70
4.4.4 三种循环的比较 70
4.5 循环嵌套 72
4.5.1 循环嵌套概述 72
4.5.2 打印乘法口诀表 73
4.5.3 乒乓球比赛抽签问题 73
4.6 循环的中途退出 74
4.6.1 break语句 74
4.6.2 continue语句 76
4.7 常用的循环程序设计方法 78
4.7.1 穷举法 78
4.7.2 递推法 79
4.7.3 迭代法 80
小结 81
习题 82
第5章 数据类型和表达式 90
5.1 数据的存储格式 90
5.2 基本数据类型 92
5.2.1 整型 92
5.2.2 实型 94
5.2.3 字符型 95
5.3 运算符与表达式 98
5.3.1 赋值表达式 99
5.3.2 算术表达式 100
5.3.3 自增、自减运算符 101
5.3.4 关系表达式 103
5.3.5 逻辑表达式 104
5.3.6 条件表达式 107
5.3.7 逗号表达式 109
5.3.8 位运算 109
5.3.9 其他运算符 112
5.4 类型转换 112
5.4.1 非赋值类型转换 113
5.4.2 赋值类型转换 113
5.4.3 强制类型转换 114
小结 114
习题 114
第6章 数组 117
6.1 一维数组 117
6.1.1 输出大于平均数的数 117
6.1.2 一维数组的定义和引用 118
6.1.3 一维数组的存储和初始化 120
6.2 一维数组程序设计实例 121
6.2.1 求一维数组最大值元素的下标 121
6.2.2 利用数组求解斐波那契数列 122
6.2.3 在数组中查找一个给定的数 123
6.2.4 排序问题 124
6.3 二维数组 127
6.3.1 学生成绩统计 127
6.3.2 二维数组的定义和引用 128
6.3.3 二维数组的存储和初始化 130
6.4 二维数组程序设计实例 132
6.4.1 找出矩阵中的最大值及其行下标和列下标 132
6.4.2 求矩阵的转置 133
6.4.3 求二维数组的主对角线之和 135
6.4.4 计算某个日期对应该年的第几天 136
6.5 字符数组与字符串 137
6.5.1 将数字字符串转换为整数 137
6.5.2 字符数组的定义与初始化 138
6.5.3 字符串 139
6.6 字符数组与字符串程序设计实例 142
6.6.1 输入字符串统计字母、数字和其他字符的个数 142
6.6.2 将两个字符串连接成一个字符串 143
小结 144
习题 146
第7章 函数 152
7.1 函数的概述 152
7.2 函数的简单调用 155
7.2.1 输出数字金字塔 156
7.2.2 判断素数 157
7.2.3 数值交换 159
7.3 数组作为参数的函数调用 161
7.3.1 求数组中元素的最大值 162
7.3.2 比较两个数组的大小 163
7.3.3 字符串复制 164
7.3.4 学生成绩排名 165
7.4 函数的嵌套调用 167
7.4.1 计算最大公约数和最小公倍数 168
7.4.2 计算数组元素的均方差 169
7.5 函数的递归调用 170
7.5.1 计算阶乘 170
7.5.2 汉诺塔问题 172
7.6 变量的作用域 174
7.6.1 局部变量 174
7.6.2 全局变量 175
7.7 变量的存储类型 177
小结 179
习题 180
第8章 指针 185
8.1 指针概述 185
8.1.1 理解指针 185
8.1.2 为什么引入指针的概念 186
8.2 指针基础 189
8.2.1 指针变量的声明 189
8.2.2 指针变量的初始化 190
8.2.3 指针变量的赋值 190
8.3 指针编程实例 192
8.3.1 征婚匹配问题 192
8.3.2 求解一元二次方程 195
8.4 指针型函数 196
8.5 指针与数组 199
8.5.1 一维数组与指针 199
8.5.2 指针运算 199
8.5.3 用指针引用数组元素 200
8.5.4 二维数组与指针 201
8.6 指针与数组编程实例 203
8.6.1 数列的中位数 203
8.6.2 求矩阵的最大元素 204
8.7 指针与字符串 206
8.7.1 字符型指针、字符数组与字符串常量的概念 206
8.7.2 判断回文单词和回文句子 207
8.7.3 C语言字符串操作的库函数 212
8.7.4 字符串库函数应用实例 214
8.8 常见的编程错误 215
小结 218
习题 219
第9章 结构体 225
9.1 结构体概述 225
9.1.1 结构体类型 225
9.1.2 结构体变量定义 226
9.1.3 结构体变量使用 227
9.1.4 结构体嵌套定义 228
9.2 结构体变量作为函数参数 230
9.2.1 平面上两点之间的距离 230
9.2.2 判断点是否在矩形内 231
9.3 结构体数组 234
9.3.1 结构体数组的定义和初始化 234
9.3.2 计算学生的平均成绩 235
9.3.3 候选人得票统计程序 236
9.4 结构体指针 237
9.4.1 结构体指针概念 237
9.4.2 图书信息输出 238
9.4.3 指向结构体数组的指针 239
9.5 结构体指针作为函数参数 240
. 9.5.1 输出某学生信息 240
9.5.2 统计学生成绩等级 242
9.6 结构体综合应用实例 244
9.6.1 电话号码簿管理 244
9.6.2 学生成绩管理系统 247
小结 250
习题 251
第10章 共用体与枚举 256
10.1 共用体 256
10.1.1 共用体概念 256
10.1.2 人员管理 259
10.2 枚举 260
10.2.1 枚举概念 260
10.2.2 枚举类型的应用 261
10.3 用typedef定义类型 262
小结 264
习题 264
第11章 指针的高级应用 268
11.1 指针数组 268
11.2 指向指针的指针 270
11.3 指向函数的指针 273
11.4 动态内存分配 275
11.4.1 动态分配内存函数 276
11.4.2 malloc函数 276
11.4.3 calloc函数 277
11.4.4 realloc函数 277
11.4.5 free函数 278
11.4.6 动态分配内存编程实例 278
11.5 链表 282
11.5.1 链表结点结构 282
11.5.2 建立和输出静态链表 283
11.5.3 建立和输出动态链表 284
11.5.4 删除链表中的结点 286
11.5.5 在链表中插入结点 288
11.5.6 链表的综合应用 292
11.5.7 链表的扩展应用 295
小结 295
习题 296
第12章 文件 299
12.1 文件概述 299
12.1.1 将“I am a student!”写入文件 299
12.1.2 文件的概念 300
12.1.3 缓冲文件系统 301
12.1.4 文件结构与文件指针 301
12.2 文件打开与关闭 302
12.2.1 显示文件的内容 302
12.2.2 打开文件 303
12.2.3 关闭文件 305
12.3 文本文件读写 305
12.3.1 保存键盘读入字符,并输出 305
12.3.2 字符读写函数fgetc()和fputc() 306
12.3.3 字符串读写函数fgets()和fputs() 309
12.3.4 格式化文件读写函数fscanf()和fprintf() 310
12.4 二进制文件读写 313
12.4.1 程序示例 313
12.4.2 数据块读写函数fread()和fwrite() 314
12.4.3 文件的随机读写fseek() 315
12.5 其他相关函数 316
12.6 文件程序设计实例 317
12.6.1 文本文件应用 317
12.6.2 二进制文件应用 319
12.7 常见编程错误 321
小结 322
习题 322
第13章 编译预处理 324
13.1 预处理概述 324
13.2 宏定义 324
13.2.1 无参宏定义 325
13.2.2 带参宏定义 327
13.3 文件包含 331
13.4 条件编译 332
小结 334
习题 334
第14章 大规模程序设计 339
14.1 命令行参数 339
14.2 程序的风格与结构化 342
14.3 程序的可移植性和健壮性 344
14.4 大规模程序开发 347
14.4.1 模块化程序设计 347
14.4.2 分块开发 348
14.4.3 工程文件 350
附录A C语言运算符和结合性 351
附录B 常用字符与ASCII代码对照表 352
附录C C语言常用的库函数 354
参考文献 358