第1篇 基础篇 2
第1章 认识C语言 2
1.1程序设计语言 2
1.1.1程序设计语言的发展 2
1.1.2 C语言的发展 3
1.1.3 C语言的特点 4
1.2结构化程序设计 5
1.2.1程序设计的概念 5
1.2.2算法 5
1.2.3程序的三种基本结构 9
1.2.4结构化程序设计方法 11
1.3 C程序的特点 13
1.3.1 C程序实例 13
1.3.2 C程序的结构特点 14
1.3.3标识符和关键字 15
1.4 C程序的编译、连接和执行 17
1.5编译和运行C程序的一般步骤 19
1.5.1使用Turbo C 2.0开发 19
1.5.2使用Visual C++ 6.0开发 21
1.6常见面试题 23
1.7小结 24
1.8习题 24
第2章 数据类型、运算符、表达式和输入输出函数 25
2.1常量 25
2.1.1常量的定义 26
2.1.2符号常量 26
2.2变量 27
2.2.1变量定义 27
2.2.2变量命名 27
2.2.3变量的赋值和初始化 28
2.2.4变量的作用域 28
2.2.5使用extern声明变量 30
2.3数据类型 30
2.3.1整型 31
2.3.2实型 32
2.3.3字符型 34
2.4运算符和表达式 36
2.4.1运算符和表达式 36
2.4.2赋值运算符和赋值表达式 37
2.4.3算术运算符和算术表达式 38
2.4.4关系运算符和关系表达式 39
2.4.5逻辑运算符和逻辑表达式 40
2.4.6条件运算符和条件表达式 42
2.4.7逗号运算符和逗号表达式 43
2.4.8运算符的优先级 43
2.5不同类型数据之间的转换 43
2.5.1隐式转换 44
2.5.2显示转换 44
2.6数据的输入 46
2.6.1使用scanf函数实现数据输入 46
2.6.2使用getchar函数实现字符输入 48
2.7数据的输出 50
2.7.1使用printf函数实现数据格式输出 50
2.7.2使用putchar函数实现字符输出 52
2.8顺序结构程序设计举例 53
2.9常见面试题 54
2.10小结 55
2.11习题 55
第3章 选择结构设计 57
3.1选择结构简介 57
3.2使用if实现选择结构设计 57
3.2.1 if结构语法 58
3.2.2 if结构程序举例 58
3.3使用if-else实现选择结构设计 60
3.3.1 if-else结构语法 60
3.3.2 if-else结构程序举例 61
3.4使用多重if实现选择结构设计 62
3.4.1多重if结构语法 62
3.4.2多重if结构程序举例 63
3.5使用if嵌套实现选择结构设计 64
3.5.1 if嵌套结构语法 64
3.5.2 if和else配对问题 65
3.5.3 if嵌套结构程序举例 65
3.6使用switch实现选择结构设计 66
3.6.1 switch结构语法 66
3.6.2 switch语句的注意事项 68
3.6.3 switch的执行过程 68
3.6.4 switch结构程序举例 69
3.7 switch和多重if的比较 71
3.8选择结构程序设计举例 73
3.9常见面试题 77
3.10小结 78
3.11习题 78
第4章 循环结构设计 80
4.1循环结构简介 80
4.2使用while循环 81
4.2.1 while循环语法及含义 81
4.2.2使用while循环程序举例 82
4.3使用do-while循环 84
4.3.1 do-while循环语法及含义 84
4.3.2使用do-while循环程序举例 85
4.4使用for循环 87
4.4.1 for循环语法及含义 87
4.4.2 for循环的注意事项 88
4.4.3使用for循环程序举例 89
4.5循环嵌套 91
4.5.1 循环嵌套原则 91
4.5.2使用循环嵌套程序举例 92
4.6三种循环的比较 93
4.7跳转语句 95
4.7.1使用break语句实现程序跳转 95
4.7.2使用continue语句实现程序跳转 96
4.7.3使用goto语句实现程序跳转 97
4.8循环结构程序设计举例 98
4.9常见面试题 101
4.10小结 102
4.11习题 102
第5章 数组 104
5.1数组简介 104
5.2一维数组 105
5.2.1一维数组的定义 105
5.2.2一维数组的存储 105
5.2.3一维数组的初始化 105
5.2.4一维数组元素的引用 106
5.2.5一维数组使用举例 106
5.3二维数组 108
5.3.1二维数组的定义 108
5.3.2二维数组的存储 108
5.3.3二维数组的初始化 109
5.3.4二维数组元素的引用 110
5.3.5二维数组使用举例 110
5.4多维数组 112
5.4.1多维数组的定义 112
5.4.2多维数组的存储 112
5.4.3多维数组的初始化 112
5.4.4多维数组元素的引用 113
5.5字符数组和字符串 113
5.5.1字符数组定义 113
5.5.2字符数组初始化 114
5.5.3字符数组引用 115
5.5.4输入字符串 116
5.5.5输出字符串 117
5.5.6常用字符串处理函数 118
5.5.7字符串使用举例 126
5.6 数组应用举例 127
5.7常见面试题 131
5.8小结 132
5.9习题 132
第2篇 提高篇 136
第6章 函数的基本使用 136
6.1函数简介 136
6.2函数的定义 137
6.3函数的参数和返回值 139
6.3.1函数的形参和实参 139
6.3.2函数参数的注意事项 140
6.3.3函数的返回值 141
6.4调用函数 143
6.4.1调用函数的形式 143
6.4.2调用函数的方法 144
6.4.3调用函数的注意事项 146
6.4.4函数声明 146
6.5函数之间的参数传递方式 148
6.5.1使用传值方式 148
6.5.2使用传地址方式 149
6.6生存期和作用域 150
6.6.1变量的生存期 150
6.6.2变量的作用域 152
6.7局部变量和全局变量 153
6.7.1使用局部变量 154
6.7.2使用全局变量 155
6.7.3变量的屏蔽 157
6.8变量的存储类型和作用域 157
6.8.1变量的存储类型 158
6.8.2使用自动型变量 159
6.8.3使用静态变量 160
6.8.4使用外部变量 163
6.8.5使用寄存器变量 164
6.8.6存储类型小结 165
6.9函数的基本使用举例 165
6.10常见面试题 170
6.11小结 171
6.12习题 172
第7章 函数调用 173
7.1使用main函数 173
7.1.1 main函数的定义 173
7.1.2 main函数的类型 174
7.1.3 main函数传递参数 175
7.2数组与函数 176
7.2.1使用数组元素作函数实参 176
7.2.2使用数组名作函数参数 177
7.2.3使用多维数组作函数参数 179
7.3函数的嵌套调用 181
7.3.1函数嵌套调用的概念 181
7.3.2函数嵌套调用举例 181
7.4函数的递归调用 182
7.4.1函数递归调用概念 182
7.4.2函数递归调用举例 184
7.5外部函数和内部函数 186
7.5.1使用外部函数 186
7.5.2使用内部函数 187
7.6函数调用应用举例 188
7.7常见面试题 191
7.8小结 192
7.9习题 192
第8章 指针 194
8.1指针简介 194
8.1.1直接访问内存 195
8.1.2间接访问内存 195
8.2指针的定义和引用 196
8.2.1指针的概念 196
8.2.2指针变量的定义 196
8.2.3指针运算符 197
8.2.4指针的引用 197
8.3指针的运算 200
8.3.1指针的赋值运算 200
8.3.2指针的算术运算 201
8.3.3指针的关系运算 203
8.4数组的指针 204
8.4.1指向数组元素的指针变量的定义和赋值 204
8.4.2使用指针引用数组元素 205
8.4.3使用指向数组的指针作为函数参数 208
8.4.4使用指向多维数组的指针变量 211
8.5指针数组 214
8.5.1指针数组的概念 215
8.5.2使用指针数组 215
8.6指针和字符串 217
8.6.1字符指针 217
8.6.2使用字符指针 218
8.6.3使用字符串指针作函数参数 220
8.6.4字符串指针和字符数组的区别与联系 224
8.7函数和指针 226
8.7.1使用函数指针调用函数 226
8.7.2使用指向函数的指针作函数的参数 227
8.8指向指针的指针 229
8.8.1指向指针的指针的定义 229
8.8.2使用指向指针的指针 230
8.9指针应用举例 232
8.10常见面试题 234
8.11小结 235
8.12习题 236
第9章 结构体、共用体和枚举 239
9.1结构体的概念和定义 239
9.1.1结构体概念 239
9.1.2结构体的定义 240
9.2结构体变量的定义、引用和初始化 241
9.2.1 结构体变量的定义 241
9.2.2结构体变量的引用 243
9.2.2结构体变量的初始化 245
9.3结构体数组 247
9.3.1结构体数组定义 247
9.3.2结构体数组初始化 249
9.3.3结构体数组引用 250
9.4指向结构体类型的指针 253
9.4.1指向结构体类型变量的指针 253
9.4.2指向结构体类型数组的指针 254
9.5结构体变量和函数 256
9.5.1结构体变量作函数参数 256
9.5.2结构体变量作函数的返回值 258
9.6 动态存储分配 260
9.6.1动态存储分配概念 260
9.6.2链表的概念 260
9.6.3动态存储分配函数——malloc函数和free函数 262
9.6.4链表的创建 265
9.6.5链表的查询 267
9.6.6插入新结点 268
9.6.7链表的删除 269
9.7结构体应用举例 271
9.8共用体 276
9.8.1共用体的概念 276
9.8.2共用体的声明 276
9.8.3共用体变量成员的引用 279
9.8.4使用共用体应注意的问题 280
9.9枚举 282
9.9.1枚举类型的定义 282
9.9.2枚举类型变量的声明 282
9.9.3枚举类型变量的引用 283
9.9.4使用枚举应注意的问题 284
9.10自定义类型 286
9.11常见面试题 287
9.12小结 289
9.13习题 292
第10章 位运算 296
10.1位运算简介 296
10.1.1字节和位 296
10.1.2原码的运算 297
10.1.3反码的运算 297
10.1.4补码的运算 298
10.2使用位运算符 299
10.2.1按位与运算符及其运算 299
10.2.2按位或运算符及其运算 300
10.2.3按位异或运算符及其运算 301
10.2.4按位取反运算符及其运算 302
10.2.5左移运算符及其运算 302
10.2.6右移运算符及其运算 303
10.3位运算举例 304
10.4位段 306
10.4.1位段的概念和定义 306
10.4.2位段的引用 308
10.5常见面试题 309
10.6小结 309
10.7习题 310
第11章 编译预处理 312
11.1“文件包含”语句 312
11.1.1文件包含形式 312
11.1.2使用文件包含 313
11.1.3使用文件包含注意事项 314
11.2宏定义 314
11.2.1符号常量的定义 314
11.2.2不带参数的宏定义 315
11.2.3带参数的宏定义 317
11.2.4使用宏定义的注意事项 319
11.3条件编译 320
11.3.1使用#ifdef形式实现条件编译 320
11.3.2使用#ifndef形式实现条件编译 321
11.3.3使用#if形式实现条件编译 321
11.4常见面试题 322
11.5小结 322
11.6习题 322
第12章 文件 327
12.1文件概述 327
12.1.1 C语言文件 327
12.1.2文件类型指针 329
12.1.3文件处理过程 330
12.2打开和关闭文件 330
12.2.1使用fopen函数实现文件打开 330
12.2.2使用fclose函数实现文件关闭 332
12.3读写文件 333
12.3.1使用fgetc/fputc函数实现字符输入/输出 333
12.3.2使用fgets/fputs实现字符串输入/输出 336
12.3.3使用fscanf/fprintf函数实现将格式化数据输入/输出文件 339
12.3.4使用fread/fwrite函数实现将数据块输入/输出文件 341
12.3.5使用feof/ferror/clearerr函数实现文件状态检查 343
12.4文件定位 345
12.4.1使用rewind函数实现位置指针移动到文件头 345
12.4.2使用fseek函数实现文件位置指针随机移动 346
12.5常见面试题 348
12.6 小结 349
12.7习题 350
第3篇 实例篇 354
第13章 24点扑克牌游戏 354
13.1游戏描述 354
13.2游戏解析 354
13.2.1处理用户输入的表达式 354
13.2.2对后缀表达式求值 356
13.3两个重要函数的实现 356
13.4 “24点扑克牌游戏”的实现 359
13.4.1栈的基本操作函数的实现 360
13.4.2 随机发四张扑克牌函数的实现 361
13.4.3检查输入表达式正确性的函数的实现 362
13.4.4 main函数的实现 362
13.5小结 364
第14章 学生成绩管理系统 365
14.1需求分析 365
14.2系统设计 365
14.3系统基本设计思路 366
14.3.1系统设计方法 366
14.3.2程序基本流程 366
14.3.3程序流程的代码实现 367
14.4各主要功能模块的实现 369
14.4.1从指定的磁盘文件中读入学生信息 369
14.4.2将数据存入磁盘文件 370
14.4.3打印所有同学的成绩信息 371
14.4.4排序学生成绩并输出 372
14.4.5查询学生成绩信息 373
14.4.6增加学生成绩 375
14.4.7删除学生成绩 376
14.5小结 377
第15章 “俄罗斯方块”游戏的实现 378
15.1游戏描述 378
15.2游戏解析 379
15.2.1方块形状的形成 379
15.2.2控制方块运动的函数 381
15.2.3游戏画面绘制 381
15.3俄罗斯方块的程序实现 382
15.3.1准备工作 382
15.3.2游戏初始化 385
15.3.3绘制游戏画面 386
15.3.4切换游戏级别 391
15.3.5计算游戏得分 392
15.3.6方块移动控制 393
15.3.7 方块的消除 395
15.3.8游戏开始结束 399
15.3.9 main函数 399
15.3.10其他函数 401
15.4小结 403
附录 404
附录A Turbo C中常见错误提示的中英文对照 404
附录B ASCII编码 407
附录C Turbo C中各种数据类型 411
附录D函数间传递参数时类型的自动转换 411
附录E主要库函数的介绍 411
附录F C标准库介绍 413
F.1诊断<assert.h> 414
F.2字符类别测试<ctype.h> 414
F.3错误处理<errno.h> 415
F.4浮点算术运算常量<float.h> 415
F.5整型常量<limits.h> 416
F.6地域环境<locale.h> 416
F.7数学函数<math.h> 417
F.8非局部跳转<setjmp.h> 418
F.9信号<signal.h> 419
F.10可变参数表<stdarg.h> 421
F.11公共定义<stddef.h> 421
F.12输入输出<stdio.h> 422
F.13实用函数<stdlib.h> 423
F.14字符串函数<string.h> 424
F.15日期与时间函数<time.h> 425
附录G C语言专用字符函数 425
G.1 isalnum检查字符是否是字母或数字 426
G.2 isalpha检查字符是否是字母 427
G.3 isascii检查字符是否是ASCII码 427
G.4 iscntrl检查字符是否是控制字符 428
G.5 isdigit检查字符是否是数字字符 429
G.6 isxdigit检查字符是否是十六进制数字字符 430
G.7 isgraph检查字符是否是可打印字符(不含空格) 430
G.8 isprint检查字符是否是可打印字符(含空格) 431
G.9 ispunct检查字符是否是标点字符 432
G.10 islower检查字符是否是小写字母 432
G.11 isupper检查字符是否是大写字母 433
G.12 isspace检查字符是否是空格符 434
G.13 toascii将字符转换为ASCII码 434
G.14 tolower将大写字母转换为小写字母 435
G.15 toupper将小写字母转换为大写字母 436