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