21天学通C语言,pdf版
本书是为初中级程序员编写的,可作为学习C语言的教程或参考资料。
目录:第一周课程
第1天课程 C语言初步 2
1.1 C语言简史 2
1.2 为何要使用C语言 2
1.3 编程前的准备工作 3
1.4 程序开发周期 4
1.4.1 创建源代码 4
1.4.2 编译源代码 4
1.4.3 链接以创建可执行文件 5
1.4.4 结束开发周期 6
1.5 第一个C语言程序 7
1.5.1 输入并编译hello.c 7
1.6 总结 9
1.7 问与答 9
1.8 作业 10
1.8.1 小测验 10
1.8.2 练习 10
TYPE&RUN1 打印程序清单 12
第一个TYPE&RUN 12
第2天课程 C语言程序的组成部分 14
2.1 一个简短的C语言程序 14
2.2 程序的组成部分 15
2.2.1 main( )函数(第8~23行) 15
2.2.2 #include编译指令(第2行) 15
2.2.3 变量定义(第4行) 15
2.2.4 函数原型(第6行) 16
2.2.5 程序语句(第11、12、15、16、19、20、22和28行) 16
2.2.6 函数定义(第26~29行) 16
2.2.7 程序注释(第1、10、14、18和25行) 16
2.2.8 使用花括号(第9、23、27和29行) 17
2.2.9 运行程序 17
2.2.10 有关精度的说明 18
2.3 重温程序的组成部分 18
2.4 总结 20
2.5 问与答 20
2.6 作业 20
2.6.1 小测验 20
2.6.2 练习 21
第3天课程 存储信息:变量和常量 23
3.1 计算机内存 23
3.2 使用变量存储信息 24
3.2.1 变量名 24
3.3 数值变量的类型 25
3.3.1 变量声明 27
3.3.2 typedef关键字 27
3.3.3 初始化变量 28
3.4 常量 28
3.4.1 字面常量 28
3.4.2 符号常量 29
3.5 总结 31
3.6 问与答 32
3.7 作业 32
3.7.1 小测验 32
3.7.2 练习 32
第4天课程 语句、表达式和运算符 34
4.1 语句 34
4.1.1 空白对语句的影响 34
4.1.2 创建空语句 35
4.1.3 使用复合语句 35
4.2 表达式 35
4.2.1 简单表达式 35
4.2.2 复杂表达式 36
4.3 运算符 36
4.3.1 赋值运算符 36
4.3.2 数学运算符 37
4.3.3 运算符优先级和圆括号 40
4.3.4 子表达式的计算顺序 41
4.3.5 关系运算符 41
4.4 if语句 42
4.4.1 else子句 44
4.5 判断关系表达式 46
4.5.1 关系运算符的优先级 47
4.6 逻辑运算符 48
4.7 再谈true/false值 48
4.7.1 运算符的优先级 49
4.7.2 复合赋值运算符 50
4.7.3 条件运算符 50
4.7.4 逗号运算符 51
4.8 再谈运算符优先级 51
4.9 总结 52
4.10 问与答 52
4.11 作业 53
4.11.1 小测验 53
4.11.2 练习 53
TYPE&RUN2 猜数游戏 55
第5天课程 使用函数封装代码 57
5.1 函数是什么 57
5.1.1 函数的定义 57
5.1.2 函数的用法 57
5.2 函数的工作原理 59
5.3 函数和结构化编程 60
5.3.1 结构化编程的优点 60
5.3.2 规划结构化程序 60
5.3.3 从顶向下的方法 61
5.4 编写函数 61
5.4.1 函数头 62
5.4.2 函数的返回类型 62
5.4.3 函数名 62
5.4.4 参数列表 62
5.4.5 函数体 64
5.4.6 函数原型 67
5.5 将参数传递给函数 67
5.6 调用函数 68
5.6.1 递归 69
5.7 函数的位置 70
5.8 内联函数 70
5.9 总结 71
5.10 问与答 71
5.11 作业 72
5.11.1 小测验 72
5.11.2 练习 72
第6天课程 基本的程序流程控制 74
6.1 数组的基本知识 74
6.2 控制程序的执行 75
6.2.1 for语句 75
6.2.2 嵌套for语句 79
6.2.3 while语句 80
6.2.4 嵌套while语句 82
6.2.5 do…while循环 84
6.3 嵌套循环 87
6.4 总结 88
6.5 问与答 88
6.6 作业 88
6.6.1 小测验 89
6.6.2 练习 89
第7天课程 信息读写基础 90
7.1 在屏幕上显示信息 90
7.1.1 printf( )函数 90
7.1.2 格式化字符串 90
7.1.3 转义序列 91
7.1.4 使用puts( )显示消息 96
7.2 使用scanf( )函数输入数值数据 97
7.3 三字符序列 100
7.4 总结 101
7.5 问与答 101
7.6 作业 102
7.6.1 小测验 102
7.6.2 练习 102
第一周复习 104
第二周课程
第8天课程 使用数值数组 110
8.1 数组是什么 110
8.1.1 一维数组 110
8.1.2 多维数组 113
8.2 命名和声明数组 114
8.2.1 初始化数组 115
8.2.2 初始化多维数组 116
8.2.3 数组的最大长度 119
8.3 总结 121
8.4 问与答 121
8.5 作业 121
8.5.1 小测验 121
8.5.2 练习 122
第9天课程 指针 123
9.1 指针是什么 123
9.1.1 计算机内存 123
9.1.2 创建指针 123
9.2 指针和简单变量 124
9.2.1 声明指针 124
9.2.2 初始化指针 124
9.2.3 使用指针 125
9.3 指针和变量类型 126
9.4 指针和数组 127
9.4.1 作为指针的数组名 128
9.4.2 数组元素的存储 128
9.4.3 指针算术 130
9.5 有关指针的注意事项 133
9.6 数组下标表示法和指针 133
9.7 将数组传递给函数 133
9.8 总结 137
9.9 问与答 137
9.10 作业 138
9.10.1 小测验 138
9.10.2 练习 138
TYPE&RUN3 让程序暂停 139
第10天课程 字符和字符串 141
10.1 char数据类型 141
10.2 使用字符变量 141
10.3 使用字符串 144
10.3.1 字符数组 144
10.3.2 初始化字符数组 144
10.4 字符串和指针 144
10.5 不存储在数组中的字符串 145
10.5.1 编译时分配字符空间 145
10.5.2 malloc( )函数 145
10.5.3 使用malloc( )函数 146
10.6 显示字符串和字符 148
10.6.1 puts( )函数 149
10.6.2 printf( )函数 149
10.7 从键盘读取字符串 150
10.7.1 使用gets( )函数输入字符串 150
10.7.2 使用scanf( )函数输入字符串 152
10.8 总结 154
10.9 问与答 154
10.10 作业 155
10.10.1 小测验 155
10.10.2 练习 156
第11天课程 结构、共用体和TypeDef 157
11.1 简单结构 157
11.1.1 定义和声明结构 157
11.1.2 存取结构的成员 158
11.2 复杂结构 160
11.2.1 包含其他结构的结构 160
11.2.2 包含数组的结构 162
11.3 结构数组 164
11.4 初始化结构 167
11.5 结构和指针 168
11.5.1 将指针作为结构的成员 168
11.5.2 创建指向结构的指针 170
11.5.3 使用指针和结构数组 171
11.5.4 将结构作为参数传递给函数 173
11.6 共用体 174
11.6.1 定义、声明和初始化共用体 175
11.6.2 存取共用体的成员 175
11.7 使用typedef给结构创建别名 179
11.8 总结 179
11.9 问与答 179
11.10 作业 180
11.10.1 小测验 180
11.10.2 练习 180
第12天课程 变量作用域 182
12.1 作用域是什么 182
12.1.1 演示作用域 182
12.1.2 作用域为何重要 184
12.2 外部变量 184
12.2.1 外部变量的作用域 184
12.2.2 何时使用外部变量 184
12.2.3 extern关键字 184
12.3 局部变量 185
12.3.1 静态变量和动态变量 186
12.3.2 函数参数的作用域 187
12.3.3 外部静态变量 188
12.3.4 寄存器变量 188
12.4 局部变量和main( )函数 189
12.5 应使用哪种存储类型 189
12.6 局部变量和代码块 189
12.7 总结 190
12.8 问与答 191
12.9 作业 191
12.9.1 小测验 191
12.9.2 练习 191
TYPE&RUN4 机密消息 194
第13天课程 高级程序流程控制 197
13.1 提早结束循环 197
13.1.1 break语句 197
13.1.2 continue语句 199
13.2 goto语句 200
13.3 死循环 202
13.4 switch语句 205
13.5 退出程序 212
13.5.1 exit( )函数 212
13.6 在程序中执行操作系统命令 213
13.7 总结 214
13.8 问与答 215
13.9 作业 215
13.9.1 小测验 215
13.9.2 练习 215
第14天课程 操纵屏幕、打印机和键盘 217
14.1 流和C语言 217
14.1.1 何为程序的输入/输出 217
14.1.2 什么是流 217
14.1.3 文本流和二进制流 218
14.1.4 预定义的流 218
14.2 使用C语言的流函数 219
14.2.1 例子 219
14.3 读取键盘输入 220
14.3.1 字符输入 220
14.3.2 格式化输入 225
14.4 控制屏幕输出 231
14.4.1 使用putchar( )、putc( )和fputc( )输出字符 231
14.4.2 使用puts( )和fputs( )输出字符串 233
14.4.3 使用printf( )和fprintf( )格式化输出 234
14.5 重定向输入/输出 238
14.5.1 重定向输入 239
14.6 何时使用fprintf( ) 239
14.6.1 使用stderr 240
14.7 总结 241
14.8 问与答 241
14.9 作业 242
14.9.1 小测验 242
14.9.2 练习 242
第二周复习 244
第三周课程
第15天课程 有关指针的高级主题 252
15.1 声明指向指针的指针 252
15.2 指针和多维数组 253
15.3 指针数组 259
15.3.1 复习字符串和指针 259
15.3.2 声明char类型指针数组 259
15.3.3 范例 261
15.4 函数指针 265
15.4.1 声明函数指针 265
15.4.2 初始化并使用函数指针 266
15.5 链表 273
15.5.1 有关链表的基本知识 273
15.5.2 使用链表 274
15.5.3 演示简单链表 278
15.5.4 实现链表 280
15.6 总结 286
15.7 问与答 286
15.8 作业 286
15.8.1 小测验 287
15.8.2 练习 287
第16天课程 使用磁盘文件 289
16.1 将流与磁盘文件关联起来 289
16.2 磁盘文件的类型 289
16.3 文件名 290
16.4 打开文件 290
16.5 读写文件数据 292
16.5.1 格式化文件输入/输出 293
16.5.2 字符输入/输出 296
16.5.3 直接文件输入/输出 297
16.6 文件缓冲技术:关闭和刷新文件 300
16.7 顺序文件存取和随机文件存取 301
16.7.1 ftell( )和rewind( )函数 301
16.7.2 fseek( )函数 303
16.8 检测文件尾 305
16.9 文件管理函数 307
16.9.1 删除文件 307
16.9.2 给文件重命名 308
16.9.3 复制文件 309
16.10 使用临时文件 311
16.11 总结 312
16.12 问与答 312
16.13 作业 313
16.13.1 小测验 313
16.13.2 练习 313
TYPE&RUN5 计算字符数 314
第17天课程 操纵字符串 318
17.1 确定字符串的长度 318
17.2 复制字符串 319
17.2.1 strcpy( )函数 319
17.2.2 strncpy( )函数 320
17.2.3 strdup( )函数 321
17.3 拼接字符串 322
17.3.1 strcat( )函数 322
17.3.2 strncat( )函数 324
17.4 比较字符串 325
17.4.1 比较两个完整字符串 325
17.4.2 比较字符串的一部分 326
17.4.3 比较字符串时忽略大小写 328
17.5 查找字符串 328
17.5.1 strchr( )函数 328
17.5.2 strrchr( )函数 329
17.5.3 strcspn( )函数 329
17.5.4 strspn( )函数 330
17.5.5 strpbrk( )函数 331
17.5.6 strstr( )函数 331
17.6 字符串转换 332
17.7 其他字符串函数 333
17.7.1 strrev( )函数 333
17.7.2 strset( )和strnset( )函数 334
17.8 将字符串转换为数字 334
17.8.1 将字符串转换为int 335
17.8.2 将字符串转换为long值 335
17.8.3 将字符串转换为long long值 335
17.8.4 将字符串转换为浮点数 335
17.9 字符检测函数 336
17.9.1 ANSI对大小写转换的支持 339
17.10 总结 340
17.11 问与答 340
17.12 作业 341
17.12.1 小测验 341
17.12.2 练习 341
第18天课程 有关函数的高级主题 343
18.1 将指针传递给函数 343
18.2 void类型的指针 346
18.3 接受可变数目参数的函数 348
18.4 返回指针的函数 350
18.5 总结 352
18.6 问与答 352
18.7 作业 352
18.7.1 小测验 352
18.7.2 练习 353
第19天课程 函数库 354
19.1 数学函数 354
19.1.1 三角函数 354
19.1.2 指数函数和对数函数 354
19.1.3 双曲线函数 355
19.1.4 其他数学函数 355
19.1.5 演示数学函数 355
19.2 处理时间 356
19.2.1 时间的表示 356
19.2.2 时间函数 356
19.2.3 使用时间函数 359
19.3 处理错误 360
19.3.1 assert( )宏 361
19.3.2 头文件errno.h 362
19.3.3 perror( )函数 362
19.4 查找和排序 364
19.4.1 使用bsearch( )进行查找 364
19.4.2 使用qsort( )进行排序 365
19.4.3 演示查找和排序 365
19.5 总结 370
19.6 问与答 370
19.7 作业 370
19.7.1 小测验 370
19.7.2 练习 371
TYPE&RUN6 计算抵押贷款的偿还金额 372
第20天课程 管理内存 374
20.1 类型转换 374
20.1.1 自动类型转换 374
20.1.2 显式转换 376
20.2 分配内存的存储空间 377
20.2.1 使用malloc( )函数分配内存 377
20.2.2 使用calloc( )函数分配内存 379
20.2.3 使用realloc( )函数分配更多的内存 380
20.2.4 使用free( )函数释放内存 381
20.3 操纵内存块 383
20.3.1 使用memset( )函数初始化内存 383
20.3.2 使用memcpy( )复制内存中的数据 383
20.3.3 使用memmove( )函数移动内存中的数据 383
20.4 位的用法 385
20.4.1 移位运算符 385
20.4.2 按位逻辑运算符 386
20.4.3 求补运算符 387
20.4.4 结构中的位字段 387
20.5 总结 389
20.6 问与答 389
20.7 作业 390
20.7.1 小测验 390
20.7.2 练习 390
第21天课程 编译器的高级用法 392
21.1 使用多个源代码文件的编程 392
21.1.1 模块化编程的优点 392
21.1.2 模块化编程技术 392
21.1.3 模块的组成部分 394
21.1.4 外部变量和模块化编程 395
21.1.5 使用.obj文件 395
21.1.6 使用生成工具 396
21.2 C语言的预处理器 396
21.2.1 #define预处理器编译指令 397
21.2.2 使用编译指令#include 400
21.2.3 使用#if、#elif、#else和#endif 400
21.2.4 使用#if…#endif来帮助调试 401
21.2.5 避免将头文件包含多次 401
21.2.6 #undef编译指令 402
21.3 预定义的宏 402
21.4 使用命令行参数 403
21.5 总结 405
21.6 问与答 405
21.7 作业 405
21.7.1 小测验 405
21.7.2 练习 406
第三周复习 407
附加课程(具体内容见光盘) 413
附录A ASCII字符集 414
附录B C/C++中的保留字 418
附录C 使用二进制和十六进制数 420
C.1 十进制 420
C.2 二进制 420
C.3 十六进制 420
附录D 移植性问题 422
D.1 ANSI标准 422
D.2 ANSI关键字 422
D.3 区分大小写 422
D.4 可移植的字符 424
D.5 确保ANSI兼容性 424
D.6 绕开ANSI标准 424
D.7 使用可移植的数值变量 425
D.7.1 最大值和最小值 426
D.7.2 确定数字的类型 430
D.7.3 转换字符的大小写:一个可移植性范例 434
D.8 可移植的结构和共用体 434
D.8.1 字对齐 434
D.8.2 读写结构 435
D.8.3 在可移植的程序中使用非-ANSI特性 436
D.8.4 ANSI标准头文件 437
D.9 总 结 438
D.10 问与答 438
D.11 作 业 438
D.11.1 小测验 438
D.11.2 练习 439
附录E 常用的C语言函数 440
附录F 作业答案 444
第1天课程的答案 444
小测验 444
练习 444
第2天课程的答案 445
小测验 445
练习 445
第3天课程的答案 446
小测验 446
练习 446
第4天课程的答案 447
小测验 447
练习 447
第5天课程的答案 449
小测验 449
练习 449
第6天课程的答案 452
小测验 452
练习 452
第7天课程的答案 453
小测验 453
练习 453
第8天课程的答案 457
小测验 457
练习 457
第9天课程的答案 461
小测验 461
练习 461
第10天课程的答案 463
小测验 463
练习 463
第11天课程的答案 465
小测验 465
练习 466
第12天课程的答案 467
小测验 467
练习 467
第13天课程的答案 470
小测验 470
练习 471
第14天课程的答案 471
小测验 471
练习 472
第15天课程的答案 472
小测验 472
练习 473
第16天课程的答案 473
小测验 473
练习 474
第17天课程的答案 474
小测验 474
练习 474
第18天课程的答案 475
小测验 475
练习 475
第19天课程的答案 475
小测验 475
练习 476
第20天课程的答案 476
小测验 476
练习 477
第21天课程的答案 477
小测验 477
附加课程1的答案 478
小测验 478
附加课程2的答案 478
小测验 478
附加课程3的答案 478
小测验 478
附加课程4的答案 479
小测验 479
附加课程5的答案 479
小测验 479
附加课程6的答案 480
小测验 480
附加课程7的答案 480
小测验 480
练习 480
附录G Dev-C++编译器 482
G.1 Dev-C++简介 482
G.2 在Microsoft Windows上安装Dev-C++ 482
G.3 Dev-C++中的程序 484
G.4 使用Dev-C++ 484
G.4.1 针对C语言编程定制Dev-C++ 485
G.4.2 在Dev-C++中输入并编译程序 486
G.4.3 编译Dev-C++程序 488
G.4.4 运行Dev-C++程序 488
G.5 总 结 489