第1篇 起步篇 1
第1章C语言基础 1
1.1为什么要选择C语言 1
1.1.1选择C语言的好处 1
1.1.2 C语言的特点 2
1.1.3如何学好C语言 2
1.2程序设计语言基础——进制转换 3
1.2.1二进制与位权 4
1.2.2二进制数与十进制数的相互转换 5
1.2.3十六进制数与十进制数的相互转换 6
1.2.4十进制数与八进制的转换 8
1.2.5各种计算机进制数的转换 9
1.3计算机中数的表示 10
1.3.1计算机中的正数与负数表示 10
1.3.2原码、补码 11
1.3.3浮点数 13
1.4小结 15
第2章C语言常用开发环境的介绍 16
2.1 Turbo C 3.0开发环境的介绍 16
2.1.1 Turbo C 3.0的开发环境 16
2.1.2使用Turbo C 3.0运行C语言程序 18
2.1.3 C程序的开发步骤 19
2.2 Visual C++ 6.0开发环境的介绍 20
2.2.1使用Visual C++ 6.0新建项目 20
2.2.2在Visual C++ 6.0的项目中新建程序文件 21
2.2.3 Visual C++ 6.0的开发环境 23
2.2.4使用Visual C++ 6.0运行C语言程序 24
2.3小结 26
第2篇 基础篇 27
第3章 基本数据类型 27
3.1数据类型的定义及分类 27
3.2变量与常量 29
3.2.1变量 29
3.2.2常量 30
3.3整型变量 31
3.3.1整型变量的定义 32
3.3.2整型变量占用的字节数与表示范围 32
3.3.3整型变量的存储形式 33
3.3.4整型变量的赋值 34
3.3.5一个简单的C程序——输出整型变量的值 34
3.4实型变量 35
3.4.1实型变量的定义与赋值 35
3.4.2实型变量的表示范围 36
3.4.3一个简单的C程序——输出实型变量的值 36
3.5字符型变量 36
3.5.1字符型变量的定义与赋值 37
3.5.2字符型数据的存储形式 37
3.5.3字符数据与字符串数据的区别 39
3.6小结 39
第4章 运算符与表达式 40
4.1运算符与表达式的基础 40
4.1.1运算符的分类 40
4.1.2运算符的优先级与结合性 41
4.1.3多种类型数据的混合运算——自动类型转换 41
4.2算术运算符与算术表达式 43
4.2.1+,-,*,/,%——双目运算符 43
4.2.2算术表达式 43
4.2.3强制类型转换 44
4.2.4++++与—、+与——单目运算符 45
4.3赋值运算符与赋值表达式 47
4.3.1直接赋值运算符与直接赋值表达式 47
4.3.2赋值表达式中的类型转换 48
4.3.3复合算术赋值运算符与表达式 53
4.4关系运算符与关系表达式 54
4.4.1关系运算符 54
4.4.2关系表达式 55
4.5逻辑运算符与逻辑表达式 56
4.5.1逻辑运算符 56
4.5.2逻辑表达式 56
4.6逗号运算符与逗号表达式 58
4.6.1逗号运算符 58
4.6.2逗号表达式 59
4.6.3逗号运算符应用举例 59
4.7小结 60
第5章C语句与数据的输入/输出 61
5.1语句 61
5.1.1语句的分类 61
5.1.2赋值语句 63
5.1.3变量赋初值 64
5.2字符数据的输入与输出 64
5.2.1 putchar函数——字符数据输出函数 65
5.2.2 getchar函数——字符数据输入函数 65
5.2.3 getch函数——另一个字符数据输入函数 66
5.3格式化数据的输入与输出 67
5.3.1 printf函数——格式化数据的输出 67
5.3.2 scanf函数——格式化数据的输入 74
5.4小结 77
第6章 结构化程序的设计 79
6.1顺序结构程序的设计 79
6.1.1顺序结构 79
6.1.2顺序结构程序设计应用举例 79
6.2选择结构程序的设计 81
6.2.1 if选择结构 82
6.2.2 switch选择结构 90
6.2.3条件运算符与条件表达式 95
6.2.4选择结构程序设计应用举例 96
6.3循环结构程序设计 100
6.3.1 while循环语句 101
6.3.2 do-while循环语句 102
6.3.3 for循环语句 104
6.3.4 break语句 109
6.3.5 continue语句 110
6.3.6 goto语句 112
6.3.7循环结构的嵌套 113
6.3.8循环结构程序设计应用举例 116
6.4小结 120
第7章 数组 121
7.1一维数组 121
7.1.1定义一维数组 121
7.1.2引用一维数组 122
7.1.3初始化一维数组 123
7.1.4一维数组应用举例 123
7.2二维数组 127
7.2.1定义二维数组 127
7.2.2引用二维数组 128
7.2.3初始化二维数组 129
7.2.4二维数组应用举例 130
7.3字符数组与字符串 135
7.3.1定义字符数组与初始化 135
7.3.2引用字符数组 136
7.3.3字符数组与字符串 136
7.3.4字符数组的输入与输出 137
7.3.5字符串的相关函数 138
7.3.6字符串应用举例 143
7.4小结 147
第8章 函数 149
8.1函数初识与函数的分类 149
8.1.1函数初识 149
8.1.2函数的分类 150
8.2函数的定义 150
8.2.1无参函数的定义 150
8.2.2有参函数的定义 151
8.2.3有参函数传统的定义方式 152
8.3函数的参数与函数返回值 152
8.3.1实际参数与形式参数 152
8.3.2函数返回值 154
8.4函数的调用 156
8.4.1函数的一般调用 156
8.4.2函数原型 159
8.4.3函数的嵌套调用 162
8.5函数的递归调用 165
8.5.1递归调用的定义 165
8.5.2递归调用应用举例 166
8.6数组作为函数的参数 169
8.6.1数组元素作为函数参数 169
8.6.2数组名作为函数参数 171
8.6.3多维数组名作为函数参数 174
8.7变量的作用域 176
8.7.1局部变量 176
8.7.2全局变量 177
8.8变量的存储类别 181
8.8.1自动变量 181
8.8.2静态变量 182
8.8.3寄存器变量 183
8.8.4外部变量 184
8.9内部函数与外部函数 187
8.9.1内部函数 187
8.9.2外部函数 187
8.10小结 189
第9章 指针 190
9.1地址和指针 190
9.1.1什么是地址 190
9.1.2什么是指针——间接存取 191
9.2指针与变量 192
9.2.1定义指针变量 192
9.2.2引用指针变量 192
9.2.3指针变量作为函数的参数 195
9.3指针与数组 198
9.3.1指向数组元素的指针与指向数组的指针 198
9.3.2指向多维数组的指针变量 201
9.3.3数组名(指针)作为函数参数 205
9.3.4指针数组 214
9.3.5二级指针 215
9.4指针与字符串 217
9.4.1字符串指针 217
9.4.2字符串指针作为函数参数 218
9.4.3字符指针数组 220
9.4.4指针数组作为mam的参数 222
9.5指针与函数 223
9.5.1函数指针——指向函数的指针 224
9.5.2函数指针作为函数的参数 225
9.5.3指针函数——返回指针值的函数 228
9.5.4 void指针 230
9.6指针与const 230
9.6.1常量指针——指向常量的指针 230
9.6.2指针常量——指针不可以改变 231
9.6.3常量指针常量——指向常量的指针常量 232
9.7小结 233
第10章 结构体与联合体 234
10.1结构体 234
10.1.1定义结构体类型 234
10.1.2定义结构体变量 235
10.1.3引用结构体变量 237
10.1.4初始化结构体变量 238
10.1.5结构体应用举例 240
10.2结构体数组 241
10.2.1定义结构体数组 241
10.2.2初始化结构体数组 242
10.2.3结构体数组应用举例 243
10.3指针与结构体 246
10.3.1指向结构体变量的指针 246
10.3.2指向结构体数组的指针 248
10.3.3结构体变量作为函数的参数 249
10.3.4指向结构体变量的指针作为函数的参数 251
10.4用typedef定义类型 252
10.4.1使用typedef定义类型 252
10.4.2 typedef应用举例 254
10.5联合体 255
10.5.1定义联合体类型及变量 255
10.5.2引用联合体 256
10.5.3使用联合体应注意的问题 257
10.5.4联合体的应用举例 258
10.6枚举类型 261
10.6.1定义枚举类型及变量 261
10.6.2使用枚举类型的一些说明 261
10.6.3枚举类型应用举例 262
10.7小结 265
第11章 位运算 266
11.1位运算符与位运算 266
11.1.1位与运算 266
11.1.2位或运算 268
11.1.3异或运算 268
11.1.4取反运算 270
11.1.5左移运算 270
11.1.6右移运算 273
11.1.7位复合赋值运算符 275
11.2位段 275
11.2.1定义位段 275
11.2.2引用位段成员 276
11.3小结 277
第12章 预处理命令 278
12.1宏定义#define 278
12.1.1不带参数的宏定义 278
12.1.2带参数的宏定义 280
12.1.3条件编译命令中的运算符#和 282
12.2文件包含命令#include 283
12.2.1文件包含命令的两种方式 283
12.2.2文件包含命令应用举例 284
12.3条件编译命令 285
12.3.1条件编译命令——#ifdef 285
12.3.2条件编译命令——#ifndef 287
12.3.3条件编译命令——#if 287
12.4小结 288
第3篇 提高篇 291
第13章 链表 291
13.1什么是链表 291
13.1.1链表的基本概念 291
13.1.2动态内存分配 292
13.2链表的操作 293
13.2.1创建链表 293
13.2.2输出链表 296
13.2.3链表的查找操作 297
13.2.4链表的插入操作 298
13.2.5链表的删除操作 299
13.3链表应用举例 303
13.3.1直接插入排序——使用链表实现 303
13.3.2一元多项式的相加 309
13.4小结 312
第14章 文件 314
14.1文件与文件类型指针 314
14.1.1文件的分类 314
14.1.2文件类型指针 315
14.2打开文件与关闭文件 315
14.2.1打开文件 315
14.2.2关闭文件 316
14.3文件的读写 317
14.3.1 fgetc函数与fputc函数 317
14.3.2 fread函数与fwrite函数 319
14.3.3 fscanf函数与fprintf函数——格式化读写函数 323
14.3.4 fgets函数与fputs函数——字符串读写函数 325
14.4文件的定位 325
14.4.1 rewind函数——重置文件指针 326
14.4.2 fseek函数——定位文件指针 327
14.4.3 ftell函数——得到文件指针位置 329
14.5出错检测 329
14.5.1 ferror函数 330
14.5.2 clearerr函数 330
14.6小结 330
第15章 图形界面设计 331
15.1相关概念 331
15.1.1图形显示与适配器 331
15.1.2显示器的工作原理 332
15.2文本屏幕操作 333
15.2.1屏幕操作函数 333
15.2.2字符属性函数 336
15.2.3文本操作函数 338
15.2.4屏幕状态函数 341
15.3图形系统的初始化与关闭 343
15.3.1图形系统的初始化 343
15.3.2图形系统的关闭 346
15.4图形屏幕管理及属性 346
15.4.1图形屏幕管理 346
15.4.2设置图形属性 347
15.5基本绘图函数 349
15.5.1画点类函数 349
15.5.2画线类函数 350
15.5.3圆弧类函数 351
15.5.4多边形函数 352
15.5.5填充函数 354
15.6图形模式下的文本输出 356
15.6.1文本输出函数 356
15.6.2文本属性函数 357
15.6.3汉字的输出 359
15.7小结 362
第16章 键盘与鼠标操作 363
16.1键盘操作 363
16.1.1键盘编码 363
16.1.2键盘操作函数 364
16.2鼠标操作 366
16.2.1鼠标的工作原理 366
16.2.2鼠标综合应用举例 371
16.3小结 374
第17章 网络编程基础 375
17.1网络基础知识 375
17.1.1什么是计算机网络 375
17.1.2网络协议 375
17.1.3协议分层 376
17.1.4网络参考模型 377
17.1.5端口 379
17.2 Winsocket基础 379
17.2.1套接字(socket) 379
17.2.2基于TCP的socket编程 380
17.2.3基于UDP的socket编程 381
17.3 Winsocket的相关函数 381
17.3.1 WSAStartup函数——启动套接字库 381
17.3.2 socket函数——建立套接字 382
17.3.3 bind函数——绑定本地IP地址和端口 383
17.3.4 listen 函数——侦听客户端请求 384
17.3.5 accept函数——等待客户端的请求 384
17.3.6 send函数——发送数据 384
17.3.7 recv函数——接收数据 385
17.3.8 connect函数——建立连接 385
17.3.9 recvfrom函数——接收数据 385
17.3.10 sendto函数——发送数据 385
17.4基于TCP的简单网络程序 386
17.4.1服务器端应用程序的实现 386
17.4.2客户端应用程序的实现 389
17.5基于UDP的简单网络聊天程序 391
17.5.1服务器端应用程序的实现 391
17.5.2客户端应用程序的实现 393
17.6小结 395
第18章 常用算法设计 396
18.1算法基础 396
18.1.1什么是算法及算法的描述语言 396
18.1.2算法的特性 397
18.1.3算法设计的目标 398
18.1.4算法的时间复杂度和空间复杂度 398
18.2迭代算法 399
18.2.1算法思想 399
18.2.2求一个数的平方根 399
18.2.3谷角猜想 400
18.3递推算法 401
18.3.1认识递推 402
18.3.2斐波那契数列 402
18.3.3分西瓜 404
18.3.4该存多少钱 404
18.4穷举算法 405
18.4.1算法思想 405
18.4.2完全数 406
18.4.3背包问题 407
18.5递归算法 409
18.5.1算法思想 409
18.5.2数制转换 409
18.5.3组合问题 411
18.6分治算法 412
18.6.1算法思想 412
18.6.2求n个数的最大值和最小值 413
18.6.3赛程安排问题 415
18.7贪心算法 418
18.7.1算法思想 418
18.7.2加油站问题 419
18.7.3找零钱问题 420
18.8小结 422
第19章 简单数据结构——队列和栈 424
19.1队列 424
19.1.1队列的定义 424
19.1.2队列的表示与实现 425
19.1.3顺序循环队列 426
19.1.4顺序循环队列的实现 427
19.1.5链式队列的表示与实现 429
19.1.6队列的应用——商品货架模拟 432
19.2栈 436
19.2.1栈的定义 436
19.2.2顺序栈的存储结构与实现 436
19.2.3链式栈的存储结构与实现 439
19.2.4栈的应用举例——算术表达式求值 441
19.3小结 445
第20章 常用技术——排序 446
20.1排序的基础知识 446
20.1.1排序的相关概念 446
20.1.2排序算法的分类 447
20.2插入类排序 447
20.2.1直接插入排序 447
20.2.2折半插入排序 449
20.2.3希尔排序 450
20.3选择类排序 451
20.3.1简单选择排序 451
20.3.2堆排序 453
20.4交换类排序 460
20.4.1冒泡排序 460
20.4.2快速排序 462
20.5归并类排序 465
20.5.1二路归并排序的算法思想 465
20.5.2二路归并排序算法的实现 465
20.6分配类排序 468
20.6.1基数排序的算法思想 468
20.6.2基数排序算法的实现 470
20.7各种排序方法的比较 473
20.8小结 474