第1章 C语言开发环境简介 1
1.1 C语言发展历史 1
1.2 C语言的特点 2
1.3 C语言的广泛应用 3
1.4 Visual C++ 6.0开发环境概述 4
1.4.1 Visual C++ 6.0开发环境安装 4
1.4.2 Visual C++ 6.0开发环境介绍 8
1.5 Visual C++ 6.0下创建开发项目 10
1.5.1 Visual C++ 6.0下创建工程项目 10
1.5.2 Visual C++ 6.0下C语言源代码创建 12
实训1.1——一个经典的C语言程序 15
1.6 疑难解答和上机题 16
1.6.1 疑难解答 16
1.6.2 上机题 18
第2章 基本数据类型 19
2.1 数据类型概述 19
2.2 进制换算 20
2.2.1 进位计数制概述 20
2.2.2 二进制与其他进制转换 21
2.2.3 八进制与其他进制转换 22
2.2.4 十六进制与其他进制转换 23
2.2.5 十进制与二进制的转换 24
2.2.6 机器数及其在内存中的存储格式 25
2.3 常量 26
2.3.1 整型常量 26
2.3.2 实型常量 27
2.3.3 字符常量 28
2.3.4 字符串常量 29
2.4 变量 30
2.4.1 变量与内存结构 30
2.4.2 变量的定义 31
2.4.3 整型变量 32
2.4.4 实型变量 34
2.4.5 字符变量 35
2.5 枚举 35
2.5.1 枚举的定义 35
2.5.2 枚举变量的定义与使用 36
2.6 疑难解答和上机题 38
2.6.1 疑难解答 38
2.6.2 上机题 40
第3章 运算符和表达式 41
3.1 运算符与表达式的分类 41
3.1.1 运算符的分类 41
3.1.2 表达式的分类 43
3.2 运算符的优先级与结合性 44
3.3 赋值运算符与赋值表达式 46
3.4 算术运算符与算术表达式 48
3.4.1 算术运算符与数据类型 48
实训3.1——计算圆柱体体积 49
3.4.2 模除运算符 50
3.4.3 自增自减运算符 51
3.5 关系运算符与关系表达式 54
3.6 逻辑运算符与逻辑表达式 55
3.6.1 逻辑与(&&) 55
3.6.2 逻辑或(‖) 56
3.6.3 逻辑非(!) 57
实训3.2——判断闰年 58
3.7 位运算符 59
实训3.3——交换两变量的值 61
3.8 条件运算符 64
实训3.4——分段函数计算 64
3.9 sizeof运算符 65
3.10 强制类型转换 66
3.11 疑难解答和上机题 68
3.11.1 疑难解答 68
3.11.2 上机题 70
第4章 C语言标准输入与输出 71
4.1 C语言标准库函数概述 71
4.2 格式输出函数printf 72
4.2.1 标准格式输出 72
4.2.2 格式输出控制 76
4.3 格式输入函数scanf 78
4.3.1 标准格式输入 78
4.3.2 格式输入控制 82
4.4 字符输入输出函数 83
4.4.1 putchar函数 83
4.4.2 getchar函数 83
实训4.1——输出及格率 84
4.5 疑难解答和上机题 85
4.5.1 疑难解答 85
4.5.2 上机题 88
第5章 分支结构程序设计 89
5.1 结构化程序设计思想 89
5.2 简单的if语句 90
5.2.1 if语句的定义 90
5.2.2 合理设计if语句 92
实训5.1——求一元二次方程的实根解 93
5.3 多分支if语句 95
5.3.1 if-else语句的结构 95
5.3.2 if-else语句的应用 96
5.3.3 if-else-if语句的结构及应用 98
5.4 嵌套if-else语句 101
5.4.1 嵌套if-else语句的定义 101
5.4.2 嵌套if-else语句的应用 103
实训5.2——求一元二次方程的复数根解 104
5.5 switch语句 107
5.5.1 switch语句的定义 108
5.5.2 break语句 110
5.5.3 switch语句的执行与应用 110
实训5.3——使用switch语句实现四则运算 111
5.6 嵌套switch语句 113
5.6.1 嵌套switch语句的定义 113
5.6.2 嵌套switch语句的执行与应用 114
5.7 疑难解答和上机题 116
5.7.1 疑难解答 116
5.7.2 上机题 118
第6章 循环结构程序设计 119
6.1 循环语句的提出 119
6.2 for循环语句 120
6.2.1 for语句的定义 121
6.2.2 for语句的执行 121
6.2.3 for语句的应用 122
6.3 for循环嵌套语句 125
6.3.1 for循环嵌套语句的定义与执行 125
6.3.2 for循环嵌套语句的应用 126
实训6.1——打印九九乘法表 127
实训6.2——打印三位数水仙花数 129
6.4 while循环语句 131
6.4.1 while循环语句的定义 131
6.4.2 while循环语句的应用 132
实训6.3——记录键盘输入字符数 133
6.5 do-while循环语句 135
6.5.1 do-while循环语句的定义 135
6.5.2 do-while循环语句的应用 136
6.6 goto语句 139
6.7 break语句和continue语句 140
6.7.1 break语句 140
6.7.2 continue语句 141
6.8 疑难解答和上机题 142
6.8.1 疑难解答 142
6.8.2 上机题 145
第7章 数组 147
7.1 一维数组 147
7.1.1 一维数组的定义 147
7.1.2 一维数组赋值与引用 149
7.1.3 一维数组的应用 153
实训7.1——数列排序 154
7.2 二维数组 156
7.2.1 二维数组的定义 157
7.2.2 二维数组的赋值与引用 158
7.2.3 二维数组的应用 160
实训7.2——学员平均成绩计算 162
实训7.3——输出杨辉三角 164
7.3 字符数组 166
7.3.1 字符数组的定义 166
7.3.2 字符数组的赋值与引用 167
7.3.3 字符数组与字符串 169
7.3.4 二维字符数组 171
7.4 疑难解答和上机题 173
7.4.1 疑难解答 173
7.4.2 上机题 175
第8章 函数 177
8.1 函数的定义 177
8.1.1 函数的分类 177
8.1.2 函数的定义 178
8.2 函数的调用与声明 181
8.2.1 函数的调用 181
实训8.1——计算数学分段函数 183
8.2.2 函数的声明 185
实训8.2——近似计算圆周率π 188
8.2.3 函数的参数 191
8.3 局部变量与全局变量 193
8.3.1 局部变量 193
8.3.2 全局变量 195
8.4 函数的嵌套调用和递归 197
实训8.3——汉诺塔程序设计 199
8.5 数组作函数参数 202
8.6 疑难解答和上机题 204
8.6.1 疑难解答 204
8.6.2 上机题 205
第9章 指针 207
9.1 指针的引入 207
9.1.1 指针的定义 207
9.1.2 指针的引用 208
9.2 指针和地址 210
9.2.1 指针和地址的关系 210
9.2.2 指针和地址的区别 214
9.2.3 void指针和空指针 216
9.3 指针与数组 217
9.3.1 指针与数组首地址 217
9.3.2 指针与数组名的区别 219
实训9.1——指针转换数组中字母大小写 220
9.4 指针与函数 223
9.4.1 指针作函数参数 223
9.4.2 函数返回指针 227
9.4.3 指向函数的指针 228
9.5 指针与字符串 229
9.5.1 指针与字符串的关系 229
9.5.2 指针引用字符串 231
9.6 指针与二维数组 233
9.6.1 指针和二维数组的关系 233
9.6.2 指针数组 237
实训9.2——输出main函数参数值 239
9.7 内存分配 241
9.7.1 指针与内存分配 241
9.7.2 malloc函数 242
9.7.3 memset函数 245
9.7.4 free函数 245
实训9.3——指针实现简单月历计算 246
9.8 疑难解答与上机题 248
9.8.1 疑难解答 248
9.8.2 上机题 250
第10章 结构体与共用体 251
10.1 结构体的定义 251
10.2 结构体变量 253
10.2.1 结构体变量的定义 253
10.2.2 结构体变量的初始化 254
10.2.3 结构体变量的引用 255
10.2.4 结构体数组 257
实训10.1——身份证信息录入 258
10.2.5 结构体的嵌套 261
10.3 结构体指针 262
10.3.1 结构体指针的定义 262
10.3.2 结构体指针引用结构体成员 263
10.3.3 指向结构体数组的结构体指针 264
10.4 结构体变量的内存分配 265
10.4.1 动态分配结构体内存 265
10.4.2 结构体在内存中的存储结构 269
10.5 结构体指针作函数参数 270
10.5.1 结构体指针作函数参数的定义 271
10.5.2 结构体指针作函数参数的应用 272
10.6 共用体的定义 273
10.6.1 共用体的定义 273
10.6.2 共用体变量的定义与应用 273
10.7 共用体的内存结构 275
实训10.2——教师学生信息卡设计 276
10.8 疑难解答和上机题 279
10.8.1 疑难解答 279
10.8.2 上机题 280
第11章 链表 281
11.1 什么是链表 281
11.2 结构体实现单链表 282
11.2.1 单链表结点的结构体实现 283
11.2.2 单链表的结构体实现 284
11.3 结构体实现双向链表 287
11.3.1 双向链表结点的结构体实现 287
11.3.2 双向链表结点的内存分配 290
11.4 链表结点的插入与删除 291
11.4.1 单链表结点的插入 291
11.4.2 双向链表结点的插入 292
11.4.3 单链表结点的删除 293
11.4.4 双向链表结点的删除 294
实训11.1——新员工录入员工信息表 294
11.5 疑难解答和上机题 297
11.5.1 疑难解答 297
11.5.2 上机题 298
第12章 编译预处理 299
12.1 宏定义 299
12.1.1 什么是宏定义 300
12.1.2 宏定义的应用 302
实训12.1——程序不同Log的打印 305
12.1.3 宏定义的终止 307
12.2 文件包含 307
12.2.1 头文件包含 307
实训12.2——银行卡信息录入 308
12.2.2 头文件中的函数声明 311
12.3 条件编译 312
12.3.1 #if…#else和#endif命令 312
12.3.2 #ifdef…#endif和#ifndef…#endif命令 314
12.4 疑难解答和上机题 316
12.4.1 疑难解答 316
12.4.2 上机题 317
第13章 文件 319
13.1 文件和文件指针 319
13.1.1 流和文件 319
13.1.2 文件指针 320
13.2 文件的打开和关闭 321
13.2.1 文件的打开 321
13.2.2 文件的关闭 324
13.3 文件的读写 325
13.3.1 字符处理函数fgetc和fputc 326
实训13.1——建立readme文件 328
13.3.2 字符串处理函数fgets和fputs 331
13.3.3 数据段处理函数fread和fwrite 334
实训13.2——项目信息录入与输出 335
13.3.4 标准格式读写函数fprintf和fscanf 340
13.4 文件的定位 341
13.5 疑难解答和上机题 342
13.5.1 疑难解答 342
13.5.2 上机题 344
第14章 C语言标准数学库函数 345
14.1 平方根计算函数sqrt 345
14.2 指数函数exp和pow 347
14.2.1 指数函数exp 347
14.2.2 指数函数pow 348
14.3 取对数函数log和log10 349
14.3.1 自然对数函数log 349
14.3.2 10为底的对数函数log10 350
14.4 绝对值函数abs和fabs 351
14.4.1 绝对值函数abs 351
14.4.2 绝对值函数fabs 352
14.5 三角函数 353
14.5.1 正弦函数sin和asin 353
14.5.2 其他三角函数 354
14.6 取整函数floor和ceil 356
14.6.1 取整函数floor 356
14.6.2 取整函数ceil 357
14.7 疑难解答和上机题 358
14.7.1 疑难解答 358
14.7.2 上机题 360
第15章 字符串处理 361
15.1 字符串复制函数strcpy 361
15.1.1 库函数strcpy 362
15.1.2 自定义函数strcpy 363
15.2 字符串连接与比较函数strcat和strcmp 364
15.2.1 字符串连接函数strcat 364
15.2.2 字符串比较函数strcmp 365
15.3 字符串长度与查找函数strlen和strchr 367
15.3.1 字符串长度计算函数strlen 367
15.3.2 字符串查找函数strchr 368
15.4 字符串输入输出函数gets和puts 369
15.4.1 字符串输入函数gets 369
15.4.2 字符串输出函数puts 370
15.5 其他字符串处理函数 371
15.5.1 特定字符串比较函数strcmp 371
15.5.2 字符串重设函数strnset 372
15.5.3 字符串子串查找函数strstr 373
实训15.1——文章中字符串查找与替换 375
15.6 疑难解答和上机题 377
15.6.1 疑难解答 377
15.6.2 上机题 379
第16章 C语言调试 381
16.1 C语言开发入门 381
16.1.1 注释的编写 381
16.1.2 代码风格 384
16.2 C语言单步调试与跟踪 388
16.3 C语言断点调试与跟踪 389
16.3.1 设置调试断点 389
16.3.2 断点调试 391
16.4 查看动态内存 393
实训16.1——代码风格设计 395
16.5 疑难解答和上机题 397
16.5.1 疑难解答 397
16.5.2 上机题 398
第17章 软件测试 399
17.1 软件测试概述 399
17.1.1 什么是软件测试 399
17.1.2 软件测试模型、分类和流程 400
17.2 搭建软件测试环境 402
17.2.1 分析被测软件 402
17.2.2 搭建软件测试环境 403
17.3 软件测试过程 404
17.3.1 函数级软件测试 404
17.3.2 模块级软件测试 411
17.4 疑难解答和上机题 413
17.4.1 疑难解答 413
17.4.2 上机题 414
第18章 C语言常用算法 415
18.1 什么是算法 415
18.2 排序算法 416
18.2.1 起泡排序 416
18.2.2 选择排序 420
18.2.3 合并排序 423
18.2.4 快速排序 424
18.3 查找算法 426
18.3.1 顺序查找算法 427
18.3.2 折半查找算法 428
18.4 二叉树 429
18.4.1 二叉树的结构 430
18.4.2 C语言实现简单的二叉树 431
18.4.3 二叉树的简单操作 433
实训18.1——合并两个有序数组 437
18.5 疑难解答和上机题 440
18.5.1 疑难解答 440
18.5.2 上机题 442
第19章 C语言应用实例 443
19.1 C语言巧解问题实例 443
19.1.1 求1~1000之内的素数 443
19.1.2 巧解古代百钱买百鸡问题 445
19.1.3 巧解换钱币问题 446
19.1.4 求1~20000之间的平方回文数 446
19.1.5 验证卡布列克常数 448
19.2 C语言应用实例——计算数学公式 450
19.2.1 C语言实现三角函数sinx逼近 450
19.2.2 C语言实现三角函数cosx逼近 451
19.2.3 C语言计算排列组合 452
19.3 C语言编写万年历 453
19.3.1 万年历的实现流程 453
19.3.2 万年历程序设计流程 454
19.3.3 万年历程序编写 455
19.3.4 结果验证与代码完善 459
19.4 疑难解答和上机题 460
19.4.1 疑难解答 460
19.4.2 上机题 461
附录A ASCII字符集及其编码 463
附录B C语言中常用关键字的说明 464