第1篇 新手入门 3
第1章 C语言开发环境 3
1.1本章知识体系 4
1.2程序员的成长之路 4
1.3 C语言的重要性 5
1.4如何学好C语言 5
1.5 C语言常用开发工具简介 6
1.5.1 Turbo C 6
1.5.2 Visual C++6.0 7
1.5.3 C++ Builder(BCB) 7
1.5.4 Cygwin 7
1.5.5 Dev-C++ 7
1.5.6 Source Insight 7
1.6了解Visual C++集成开发环境 8
1.6.1开发环境布局 8
1.6.2菜单栏 8
1.6.3工具栏 14
1.6.4工作区窗口 14
1.6.5代码编辑窗口 14
1.6.6输出窗口 15
1.7如何在Turbo C 2.0下运行C源程序 15
1.8了解GCC开发编译器 17
1.9 Dev-C++ 17
1.9.1 Dev-C++概述 17
1.9.2 Dev-C++的使用 17
1.10 Eclipse for C/C++ 19
1.10.1 Eclipse概述 19
1.10.2 Eclipse的使用 19
1.11实战 20
1.11.1判断三角形的类型 20
1.11.2计算某日是该年的第几天 22
1.11.3婚礼上的谎言 23
1.11.4尼科彻斯定理 24
1.11.5猴子吃桃 25
1.11.6阳阳买苹果 26
1.12疑难解惑 28
1.12.1为什么说C语言可移植性好 28
1.12.2 C语言的应用领域有哪些 28
1.12.3如何提高C语言的编程效率 28
1.13小结 29
1.14学习成果检验 29
第2章 C语言开发基础 31
2.1本章知识体系 32
2.2编码规范要记牢 32
2.2.1注释的合理使用 32
2.2.2程序中的{}要对齐 33
2.2.3合理使用空格使代码更规范 34
2.2.4换行使代码更清晰 34
2.3语言要素 35
2.3.1关键字 35
2.3.2标识符 35
2.4常量 36
2.4.1整型常量 36
2.4.2实型常量 38
2.4.3字符型常量 38
2.4.4字符串常量 39
2.5变量 40
2.5.1什么是变量 40
2.5.2变量的声明 41
2.6 数据类型 41
2.6.1什么是数据类型 41
2.6.2整型 41
2.6.3实型 43
2.6.4字符型 44
2.6.5枚举类型 45
2.7使用typedef定义类型 47
2.8变量的存储类型 49
2.8.1了解变量的存储类型 49
2.8.2使用auto关键字声明自动变量 49
2.8.3使用static关键字声明静态变量 50
2.8.4使用register关键字声明寄存器变量 52
2.8.5使用extern关键字声明外部变量 53
2.8.6使用static关键字声明静态外部变量 56
2.9混合运算 57
2.10实战 58
2.10.1十进制转换为二进制 58
2.10.2求100~200之间的素数 60
2.10.3利用“#”输出图形 61
2.10.4打印杨辉三角 61
2.10.5利用“*”输出矩形 63
2.10.6小球下落问题 63
2.10.7巧分苹果 64
2.11疑难解惑 66
2.11.1声明变量和定义变量 66
2.11.2限定词const 66
2.11.3字符串常量为什么用“\0”作为结束符 67
2.12小结 67
2.13学习成果检验 67
第3章 运算符与表达式 69
3.1本章知识体系 70
3.2运算符与表达式的使用 70
3.2.1赋值运算符与表达式 70
3.2.2加减乘除新认识 72
3.2.3关系源自比较 73
3.2.4逻辑出真假 74
3.2.5逗号运算符与表达式 76
3.2.6运算符的优先级 77
3.3自增、自减操作符 78
3.3.1认识自增、自减操作符 78
3.3.2自增、自减操作符的副作用 79
3.4位运算 79
3.4.1“或”运算符 80
3.4.2“与”运算符 81
3.4.3“取反”运算符 82
3.4.4“异或”运算符 83
3.4.5“左移”运算符 84
3.4.6“右移”运算符 85
3.5实战 86
3.5.1求1~10的累加和 86
3.5.2计算学生的平均身高 86
3.5.3求一元二次方程ax2+bx+c=0的根 87
3.5.4阿姆斯特朗数 88
3.5.5可逆素数 89
3.5.6满足abcd=(ab+cd)2的数 90
3.5.7最大公约数及最小公倍数 91
3.5.8循环移位 92
3.6疑难解惑 94
3.6.1表达式“a=b”和“a= =b”一样吗 94
3.6.2如何区分“,”是运算符还是分隔符 94
3.6.3 C语言中有哪些简化的运算表达式 96
3.7小结 96
3.8学习成果检验 96
第4章 语句 99
4.1本章知识体系 100
4.2语句的构成 100
4.2.1表达式语句 101
4.2.2函数调用语句 101
4.2.3控制语句 103
4.2.4复合语句 103
4.2.5空语句 103
4.3如何实现字符数据输入/输出 103
4.3.1字符数据输出 103
4.3.2字符数据输入 104
4.4格式输入/输出 105
4.4.1格式输出函数 105
4.4.2格式输入函数 110
4.5程序的控制结构 112
4.5.1顺序结构 112
4.5.2分支结构 113
4.5.3循环结构 113
4.6 if语句 114
4.6.1 if语句的介绍 114
4.6.2 if语句的嵌套 118
4.7条件运算符 119
4.8 switch语句 120
4.8.1 switch语句的基本形式 120
4.8.2剖析switch和if语句 124
4.9 while与do-while语句 124
4.9.1当型循环语句while 124
4.9.2直到型循环语句do-while 127
4.9.3 while与do-while的异同 128
4.10 for语句 129
4.10.1初识for语句 129
4.10.2 for语句的变体 131
4.10.3 for语句的嵌套 133
4.11跳转语句 135
4.11.1 continue语句跳出本次循环 135
4.11.2 break语句跳出循环 136
4.11.3用于返回数据的return语句 137
4.11.4 goto语句 138
4.12实战 139
4.12.1输出3*3矩阵 139
4.12.2输出一个字符的前驱字符 140
4.12.3根据输入判断能否构成三角形 141
4.12.4求学生的最高分和最低分 142
4.12.5整数加减法练习 142
4.12.6一元钱兑换方案 144
4.13疑难解惑 145
4.13.1 C语言提供的跳转语句各有什么特点 145
4.13.2循环嵌套时应该注意什么 145
4.13.3如何提高循环语句的执行效率 145
4.14小结 146
4.15 学习成果检验 146
第5章 综合实验(一)——模拟ATM机界面程序 147
5.1概述 148
5.2需求分析 148
5.3设计思路 148
5.4详细设计 148
5.5程序代码 153
第2篇 进阶提高 159
第6章 数组 159
6.1本章知识体系 160
6.2一维数组 160
6.2.1如何定义和引用一维数组 160
6.2.2一维数组初始化 161
6.2.3一维数组应用 163
6.3二维数组 164
6.3.1如何定义和引用二维数组 164
6.3.2二维数组初始化 164
6.3.3二维数组应用 166
6.4多维数组 167
6.5字符数组 168
6.5.1如何定义和使用字符数组 168
6.5.2字符数组初始化 168
6.5.3字符数组的结束标志 171
6.5.4字符数组的输入和输出 172
6.5.5字符数组应用 174
6.6实战 175
6.6.1相邻元素之和 175
6.6.2选票系统 176
6.6.3统计学生成绩 178
6.6.4模拟比赛打分 179
6.6.5矩阵的转置 180
6.6.6设计魔方阵 181
6.6.7统计各种字符个数 183
6.6.8删除字符串中的连续字符 184
6.7疑难解惑 185
6.7.1数组下标必须从0开始吗 185
6.7.2数组名作函数参数与数组元素作函数参数有什么不同之处 185
6.7.3 ‘\0’和“\0”有什么区别 186
6.8小结 186
6.9学习成果检验 186
第7章 函数 187
7.1本章知识体系 188
7.2函数概述 188
7.3函数的定义 190
7.3.1无参函数 190
7.3.2有参函数 191
7.3.3空函数 191
7.4返回语句 192
7.4.1从函数返回 192
7.4.2返回值 192
7.5函数参数 193
7.5.1形式参数与实际参数 193
7.5.2数组作函数参数 195
7.5.3 main参数 199
7.6函数的调用 201
7.6.1函数调用方式 201
7.6.2嵌套调用 202
7.6.3递归调用 203
7.7内部函数和外部函数 206
7.7.1内部函数 206
7.7.2外部函数 207
7.8局部变量和全局变量 208
7.8.1局部变量 208
7.8.2全局变量 209
7.9实战 212
7.9.1百钱百鸡问题 212
7.9.2求直角三角形斜边 213
7.9.3小数分离 213
7.9.4判断素数 214
7.9.5递归解决分鱼问题 215
7.9.6字母检索 216
7.9.7求字符串中字符的个数 217
7.9.8打渔晒网问题 218
7.10疑难解惑 220
7.10.1在调用时不使用函数的返回值会产生什么现象 220
7.10.2 C语言中函数的调用方式有哪几种 220
7.10.3函数定义时容易犯哪些错误 221
7.11小结 221
7.12学习成果检验 222
第8章 指针 223
8.1本章知识体系 224
8.2指针相关概念 224
8.2.1地址与指针 224
8.2.2指针变量 225
8.2.3指针的赋值 225
8.2.4指针的引用 226
8.3指针运算 227
8.4一维数组与指针 230
8.5指针访问二维数组 234
8.6字符和指针 237
8.6.1使用字符指针 237
8.6.2字符指针数组 239
8.7指向指针的指针 240
8.8函数型指针 242
8.9实战 244
8.9.1用指针实现数据交换 244
8.9.2使用指针实现整数排序 245
8.9.3查找成绩不及格的学生 246
8.9.4使用指针实现冒泡排序 247
8.9.5使用指针插入元素 248
8.9.6实现输入月份号输出该月份的英文名 249
8.9.7将若干字符串按字母顺序输出 251
8.10疑难解惑 252
8.10.1指针类型和指针所指向的类型是一样的吗 252
8.10.2指针运算与取地址运算符有何联系 253
8.10.3空指针有何意义 253
8.11小结 254
8.12学习成果检验 254
第9章 结构体和共用体 255
9.1本章知识体系 256
9.2结构体 256
9.2.1结构体类型的概念 256
9.2.2结构体变量的定义 257
9.2.3结构体类型的几点说明 259
9.2.4结构体变量的引用 260
9.2.5结构体变量的初始化 260
9.3结构体数组 261
9.3.1定义结构体数组 261
9.3.2初始化结构体数组 262
9.4结构体指针 264
9.4.1指向结构体变量的指针 265
9.4.2指向结构体数组的指针 265
9.4.3结构体作函数参数 267
9.5包含结构的结构 270
9.6链表 271
9.6.1什么是链表 271
9.6.2创建动态链表 272
9.6.3链表相关操作 274
9.7共用体 280
9.7.1什么是共用体 280
9.7.2共用体变量的定义和引用 281
9.7.3共用体类型的初始化 282
9.8实战 283
9.8.1找出最高分 283
9.8.2候选人选票程序 284
9.8.3求平面上两点距离 285
9.8.4设计通讯录 286
9.8.5输出火车票价格 288
9.8.6链队列 289
9.8.7约瑟夫环 293
9.8.8计算开机时间 295
9.9疑难解惑 296
9.9.1定义结构体对结构体成员的类型是否有限制 296
9.9.2成员运算符(.)和指向结构体成员运算符(->)有何区别 297
9.9.3结构体和联合体有什么区别和联系 297
9.10小结 297
9.11学习成果检验 298
第10章 综合实验(二)——猜数字游戏 299
10.1概述 300
10.2需求分析 300
10.3系统设计 300
10.3.1设计目标 300
10.3.2开发及运行环境 300
10.4程序预览 301
10.5设计思路 302
10.6文件引用 302
10.7主要功能实现 303
10.7.1主函数 303
10.7.2猜数字 304
10.7.3光标定位 306
第3篇 高级应用 311
第11章 文件 311
11.1本章知识体系 312
11.2文件概述 312
11.3文件基本操作 313
11.3.1文件的打开 313
11.3.2文件的关闭 314
11.4文件的读写 315
11.4.1 fputc函数 315
11.4.2 fgetc函数 316
11.4.3 fread函数和fwrite函数 317
11.5文件的定位 319
11.5.1 rewind函数 319
11.5.2 ftell函数 321
11.5.3 fseek函数 321
11.6出错检测 323
11.6.1 ferror函数 323
11.6.2 clearerr函数 325
11.7实战 326
11.7.1读取磁盘文件 326
11.7.2将数据写入磁盘文件 327
11.7.3创建文件 328
11.7.4删除文件 330
11.7.5重命名文件 331
11.7.6文件加密 333
11.7.7格式化读写文件 335
11.8疑难解惑 337
11.8.1标准文件和一般文件有什么区别 337
11.8.2 C语言的常用库文件包含哪些 338
11.8.3为什么文件打开以后要及时关闭 339
11.9小结 339
11.10学习成果检验 339
第12章 预处理 341
12.1本章知识体系 342
12.2不带参数的宏定义 342
12.3带参数的宏定义 344
12.4 #include命令 345
12.5条件编译 348
12.5.1 #if命令 348
12.5.2 #ifdef及#ifndef命令 350
12.5.3 #undef命令 351
12.5.4 #line命令 352
12.5.5 #pragma命令 352
12.6实战 353
12.6.1利用宏计算两个数的乘积 353
12.6.2利用宏求3个数中的最小数 354
12.6.3使用带参数的宏求圆面积 354
12.6.4利用文件包含设计输出格式 355
12.6.5使用条件编译隐藏密码 356
12.7疑难解惑 356
12.7.1 C语言中包括哪些预处理功能 356
12.7.2使用宏时需要注意些什么 357
12.7.3文件包含可以嵌套吗 357
12.8小结 358
12.9学习成果检验 358
第13章 存储管理 359
13.1本章知识体系 360
13.2内存组织方式 360
13.2.1内存组织方式 360
13.2.2堆与栈 360
13.3分配内存函数(malloc和calloc) 363
13.3.1 malloc函数 363
13.3.2 calloc函数 364
13.4修改已分配内存(realloc函数) 365
13.5释放内存——feee函数 366
13.6谁偷了我的内存 367
13.7实战 367
13.7.1为具有3个元素的数组分配内存 367
13.7.2为二维数组动态分配内存并释放 368
13.7.3商品信息的动态存放 369
13.8疑难解惑 370
13.8.1什么是“内存泄露” 370
13.8.2内存耗尽了怎么办 370
13.8.3常见的内存管理错误有哪些 370
13.9小结 371
13.10学习成果检验 371
第14章 综合实验(三)——商品信息管理系统 373
14.1概述 374
14.1.1需求分析 374
14.1.2功能结构图 374
14.2预处理 374
14.2.1文件引用 374
14.2.2宏定义 375
14.3声明结构体 375
14.4函数声明 375
14.5功能选择界面 376
14.5.1功能概述 376
14.5.2主函数 376
14.5.3自定义菜单功能函数 377
14.6录入商品信息 378
14.7查询商品信息 381
14.8删除商品信息 383
14.9修改商品信息 385
14.10插入商品信息 387
14.11统计商品数 389
14.12小结 390
第4篇 范例演练 393
第15章 排序 393
15.1选择排序 394
15.1.1范例功能演示 394
15.1.2开发思路指引 394
15.1.3专家难点解析 395
15.1.4设计过程详解 396
15.1.5范例开发手记 397
15.1.6进阶与提高 397
15.2冒泡排序 398
15.2.1范例功能演示 398
15.2.2开发思路指引 398
15.2.3专家难点解析 399
15.2.4设计过程详解 400
15.2.5范例开发手记 401
15.2.6进阶与提高 401
15.3插入排序 402
15.3.1范例功能演示 402
15.3.2开发思路指引 402
15.3.3专家难点解析 403
15.3.4设计过程详解 404
15.3.5范例开发手记 405
15.3.6进阶与提高 405
15.4希尔排序 406
15.4.1范例功能演示 406
15.4.2开发思路指引 406
15.4.3专家难点解析 407
15.4.4设计过程详解 408
15.4.5范例开发手记 409
15.4.6进阶与提高 409
15.5快速排序 410
15.5.1范例功能演示 411
15.5.2开发思路指引 411
15.5.3专家难点解析 412
15.5.4设计过程详解 413
15.5.5范例开发手记 414
15.5.6进阶与提高 415
第16章 查找 417
16.1顺序查找 418
16.1.1范例功能演示 418
16.1.2开发思路指引 418
16.1.3专家难点解析 418
16.1.4设计过程详解 419
16.1.5范例开发手记 420
16.1.6进阶与提高 420
16.2折半查找 421
16.2.1范例功能演示 422
16.2.2开发思路指引 422
16.2.3专家难点解析 422
16.2.4设计过程详解 423
16.2.5范例开发手记 424
16.2.6进阶与提高 424
16.3分块查找 426
16.3.1范例功能演示 426
16.3.2开发思路指引 426
16.3.3专家难点解析 426
16.3.4设计过程详解 428
16.3.5范例开发手记 429
16.3.6进阶与提高 429
16.4哈希查找 431
16.4.1范例功能演示 431
16.4.2开发思路指引 431
16.4.3专家难点解析 431
16.4.4设计过程详解 433
16.4.5范例开发手记 435
16.4.6进阶与提高 436
第17章 数据压缩 441
17.1 RLE算法实现数据压缩 442
17.1.1范例功能演示 442
17.1.2开发思路指引 442
17.1.3专家难点解析 442
17.1.4设计过程详解 443
17.1.5范例开发手记 445
17.1.6进阶与提高 445
17.2 LZW算法实现数据压缩 447
17.2.1范例功能演示 447
17.2.2开发思路指引 447
17.2.3专家难点解析 447
17.2.4设计过程详解 448
17.2.5范例开发手记 451
17.2.6进阶与提高 451
第18章 图形编程 455
18.1绘制折线图 456
18.1.1范例功能演示 456
18.1.2开发思路指引 456
18.1.3专家难点解析 456
18.1.4设计过程详解 458
18.1.5范例开发手记 460
18.1.6进阶与提高 460
18.2绘制饼状图 462
18.2.1范例功能演示 462
18.2.2开发思路指引 462
18.2.3专家难点解析 462
18.2.4设计过程详解 464
18.2.5范例开发手记 465
18.2.6进阶与提高 466
18.3绘制条形图 467
18.3.1范例功能演示 467
18.3.2开发思路指引 467
18.3.3专家难点解析 468
18.3.4设计过程详解 469
18.3.5范例开发手记 471
18.3.6进阶与提高 471
18.4绘制玫瑰花 473
18.4.1范例功能演示 473
18.4.2开发思路指引 473
18.4.3专家难点解析 473
18.4.4设计过程详解 474
18.4.5范例开发手记 479
18.4.6进阶与提高 479
18.5菜单界面设计 481
18.5.1范例功能演示 481
18.5.2开发思路指引 481
18.5.3专家难点解析 481
18.5.4设计过程详解 482
18.5.5范例开发手记 488
18.5.6进阶与提高 489
第19章 文件的高级应用 491
19.1创建文件 492
19.1.1范例功能演示 492
19.1.2开发思路指引 492
19.1.3专家难点解析 492
19.1.4设计过程详解 493
19.1.5范例开发手记 493
19.1.6进阶与提高 494
19.2文件的复制 494
19.2.1范例功能演示 495
19.2.2开发思路指引 495
19.2.3专家难点解析 495
19.2.4设计过程详解 495
19.2.5范例开发手记 496
19.2.6进阶与提高 497
19.3删除文件 498
19.3.1范例功能演示 498
19.3.2开发思路指引 498
19.3.3专家难点解析 498
19.3.4设计过程详解 499
19.3.5范例开发手记 500
19.3.6进阶与提高 500
19.4重命名文件 503
19.4.1范例功能演示 503
19.4.2开发思路指引 503
19.4.3专家难点解析 503
19.4.4设计过程详解 504
19.4.5范例开发手记 504
19.4.6进阶与提高 505
19.5文件加密 506
19.5.1范例功能演示 506
19.5.2开发思路指引 506
19.5.3专家难点解析 507
19.5.4设计过程详解 507
19.5.5范例开发手记 509
19.5.6进阶与提高 509
第20章 综合实验(四)——五子棋游戏开发 511
20.1概述 512
20.2需求分析 512
20.3系统设计 512
20.3.1设计目标 512
20.3.2开发及运行环境 512
20.4程序预览 512
20.5 graphics.h文件 513
20.6设计思路 516
20.7预处理 517
20.7.1文件引用 517
20.7.2宏定义 517
20.8声明变量 517
20.9函数声明 518
20.10主要功能实现 518
20.10.1主函数 518
20.10.2开始游戏 520
20.10.3绘制棋盘 520
20.10.4绘制棋子 521
20.10.5清除棋子 521
20.10.6游戏过程 522
20.10.7判断胜负结果 528
20.11小结 530
第5篇 项目实战 533
第21章 网络通信系统 533
21.1网络通信系统概述 534
21.1.1开发背景 534
21.1.2需求分析 534
21.1.3功能结构图 534
21.2技术攻关 535
21.2.1 TCP/IP协议 535
21.2.2 IP地址 536
21.2.3数据包格式 537
21.2.4建立连接 538
21.2.5套接字库函数 539
21.3网络通信系统主程序 543
21.4点对点通信 546
21.5服务器中转通信 554
21.6程序调试与错误处理 561
21.7小结 564
第22章 图书管理系统(MySQL) 567
22.1概述 568
22.1.1需求分析 568
22.1.2开发工具选择 568
22.2系统设计 568
22.2.1系统目标 568
22.2.2系统功能结构 569
22.2.3系统预览 569
22.2.4开发及运行环境 570
22.3数据库设计 570
22.3.1安装MySQL数据库 570
22.3.2启动MySQL数据库 574
22.3.3创建数据库 574
22.3.4数据表结构 575
22.4 C语言开发数据库程序的流程 576
22.5 C语言操作MySQL数据库 578
22.5.1 MySQL常用数据库操作函数 578
22.5.2连接MySQL数据 579
22.5.3查询图书表记录 580
22.5.4插入图书表记录 583
22.5.5修改图书表记录 584
22.5.6删除图书表记录 585
22.6文件引用 586
22.7变量和函数定义 587
22.8主要功能模块设计 587
22.8.1显示主菜单信息 587
22.8.2显示所有图书信息 589
22.8.3添加图书信息 592
22.8.4修改图书信息 599
22.8.5删除图书信息 606
22.8.6查询图书信息 611
22.9程序调试及错误处理 613
22.9.1解决创建数据表为一个文件的问题 613
22.9.2在创建数据表时,最后一句结尾没有标点 614
22.10小结 615