本书译自《Teach Yourself C in 21 Days》第6版,该书的前五版都登上了畅销书排行榜,是初学者学习C语言的经典之作。本版按最新的标准(ISO/IEC:9899-1999),以循序渐进的方式介绍了C语言编程方面的知识,并提供了丰富的实例和大量的练习。通过学习实例,并将所学知识用于完成练习,读者将逐步了解、熟悉并精通C语言。
\r\n 本书包括四周的课程,前三周详细介绍了C语言,第四周是附加课程,简要地介绍了最流行的面向对象语言--C++、Java和C#,附加课程的内容在光盘中以pdf格式文件提供。第一周的课程介绍了C语言程序的基本元素,包括变量、常量、语句、表达式、函数和循环;第二周介绍了数组、指针、字符和字符串、结构和共用体、变量的作用域、输入/输出等;第三周介绍了有关指针和函数的高级主题、磁盘文件读写、字符串操纵函数、函数库、内存管理以及编译器的高级用法等。
\r\n
\r\n
第一周课程\r\n第1天课程 C语言初步 2\r\n1.1 C语言简史 2\r\n1.2 为何要使用C语言 2\r\n1.3 编程前的准备工作 3\r\n1.4 程序开发周期 4\r\n1.4.1 创建源代码 4\r\n1.4.2 编译源代码 4\r\n1.4.3 链接以创建可执行文件 5\r\n1.4.4 结束开发周期 6\r\n1.5 第一个C语言程序 7\r\n1.5.1 输入并编译hello.c 7\r\n1.6 总结 9\r\n1.7 问与答 9\r\n1.8 作业 10\r\n1.8.1 小测验 10\r\n1.8.2 练习 10\r\nTYPE&RUN1 打印程序清单 12\r\n第一个TYPE&RUN 12\r\n第2天课程 C语言程序的组成部分 14\r\n2.1 一个简短的C语言程序 14\r\n2.2 程序的组成部分 15\r\n2.2.1 main( )函数(第8~23行) 15\r\n2.2.2 #include编译指令(第2行) 15\r\n2.2.3 变量定义(第4行) 15\r\n2.2.4 函数原型(第6行) 16\r\n2.2.5 程序语句(第11、12、15、16、19、20、22和28行) 16\r\n2.2.6 函数定义(第26~29行) 16\r\n2.2.7 程序注释(第1、10、14、18和25行) 16\r\n2.2.8 使用花括号(第9、23、27和29行) 17\r\n2.2.9 运行程序 17\r\n2.2.10 有关精度的说明 18\r\n2.3 重温程序的组成部分 18\r\n2.4 总结 20\r\n2.5 问与答 20\r\n2.6 作业 20\r\n2.6.1 小测验 20\r\n2.6.2 练习 21\r\n第3天课程 存储信息:变量和常量 23\r\n3.1 计算机内存 23\r\n3.2 使用变量存储信息 24\r\n3.2.1 变量名 24\r\n3.3 数值变量的类型 25\r\n3.3.1 变量声明 27\r\n3.3.2 typedef关键字 27\r\n3.3.3 初始化变量 28\r\n3.4 常量 28\r\n3.4.1 字面常量 28\r\n3.4.2 符号常量 29\r\n3.5 总结 31\r\n3.6 问与答 32\r\n3.7 作业 32\r\n3.7.1 小测验 32\r\n3.7.2 练习 32\r\n第4天课程 语句、表达式和运算符 34\r\n4.1 语句 34\r\n4.1.1 空白对语句的影响 34\r\n4.1.2 创建空语句 35\r\n4.1.3 使用复合语句 35\r\n4.2 表达式 35\r\n4.2.1 简单表达式 35\r\n4.2.2 复杂表达式 36\r\n4.3 运算符 36\r\n4.3.1 赋值运算符 36\r\n4.3.2 数学运算符 37\r\n4.3.3 运算符优先级和圆括号 40\r\n4.3.4 子表达式的计算顺序 41\r\n4.3.5 关系运算符 41\r\n4.4 if语句 42\r\n4.4.1 else子句 44\r\n4.5 判断关系表达式 46\r\n4.5.1 关系运算符的优先级 47\r\n4.6 逻辑运算符 48\r\n4.7 再谈true/false值 48\r\n4.7.1 运算符的优先级 49\r\n4.7.2 复合赋值运算符 50\r\n4.7.3 条件运算符 50\r\n4.7.4 逗号运算符 51\r\n4.8 再谈运算符优先级 51\r\n4.9 总结 52\r\n4.10 问与答 52\r\n4.11 作业 53\r\n4.11.1 小测验 53\r\n4.11.2 练习 53\r\nTYPE&RUN2 猜数游戏 55\r\n第5天课程 使用函数封装代码 57\r\n5.1 函数是什么 57\r\n5.1.1 函数的定义 57\r\n5.1.2 函数的用法 57\r\n5.2 函数的工作原理 59\r\n5.3 函数和结构化编程 60\r\n5.3.1 结构化编程的优点 60\r\n5.3.2 规划结构化程序 60\r\n5.3.3 从顶向下的方法 61\r\n5.4 编写函数 61\r\n5.4.1 函数头 62\r\n5.4.2 函数的返回类型 62\r\n5.4.3 函数名 62\r\n5.4.4 参数列表 62\r\n5.4.5 函数体 64\r\n5.4.6 函数原型 67\r\n5.5 将参数传递给函数 67\r\n5.6 调用函数 68\r\n5.6.1 递归 69\r\n5.7 函数的位置 70\r\n5.8 内联函数 70\r\n5.9 总结 71\r\n5.10 问与答 71\r\n5.11 作业 72\r\n5.11.1 小测验 72\r\n5.11.2 练习 72\r\n第6天课程 基本的程序流程控制 74\r\n6.1 数组的基本知识 74\r\n6.2 控制程序的执行 75\r\n6.2.1 for语句 75\r\n6.2.2 嵌套for语句 79\r\n6.2.3 while语句 80\r\n6.2.4 嵌套while语句 82\r\n6.2.5 do…while循环 84\r\n6.3 嵌套循环 87\r\n6.4 总结 88\r\n6.5 问与答 88\r\n6.6 作业 88\r\n6.6.1 小测验 89\r\n6.6.2 练习 89\r\n第7天课程 信息读写基础 90\r\n7.1 在屏幕上显示信息 90\r\n7.1.1 printf( )函数 90\r\n7.1.2 格式化字符串 90\r\n7.1.3 转义序列 91\r\n7.1.4 使用puts( )显示消息 96\r\n7.2 使用scanf( )函数输入数值数据 97\r\n7.3 三字符序列 100\r\n7.4 总结 101\r\n7.5 问与答 101\r\n7.6 作业 102\r\n7.6.1 小测验 102\r\n7.6.2 练习 102\r\n第一周复习 104\r\n第二周课程\r\n第8天课程 使用数值数组 110\r\n8.1 数组是什么 110\r\n8.1.1 一维数组 110\r\n8.1.2 多维数组 113\r\n8.2 命名和声明数组 114\r\n8.2.1 初始化数组 115\r\n8.2.2 初始化多维数组 116\r\n8.2.3 数组的最大长度 119\r\n8.3 总结 121\r\n8.4 问与答 121\r\n8.5 作业 121\r\n8.5.1 小测验 121\r\n8.5.2 练习 122\r\n第9天课程 指针 123\r\n9.1 指针是什么 123\r\n9.1.1 计算机内存 123\r\n9.1.2 创建指针 123\r\n9.2 指针和简单变量 124\r\n9.2.1 声明指针 124\r\n9.2.2 初始化指针 124\r\n9.2.3 使用指针 125\r\n9.3 指针和变量类型 126\r\n9.4 指针和数组 127\r\n9.4.1 作为指针的数组名 128\r\n9.4.2 数组元素的存储 128\r\n9.4.3 指针算术 130\r\n9.5 有关指针的注意事项 133\r\n9.6 数组下标表示法和指针 133\r\n9.7 将数组传递给函数 133\r\n9.8 总结 137\r\n9.9 问与答 137\r\n9.10 作业 138\r\n9.10.1 小测验 138\r\n9.10.2 练习 138\r\nTYPE&RUN3 让程序暂停 139\r\n第10天课程 字符和字符串 141\r\n10.1 char数据类型 141\r\n10.2 使用字符变量 141\r\n10.3 使用字符串 144\r\n10.3.1 字符数组 144\r\n10.3.2 初始化字符数组 144\r\n10.4 字符串和指针 144\r\n10.5 不存储在数组中的字符串 145\r\n10.5.1 编译时分配字符空间 145\r\n10.5.2 malloc( )函数 145\r\n10.5.3 使用malloc( )函数 146\r\n10.6 显示字符串和字符 148\r\n10.6.1 puts( )函数 149\r\n10.6.2 printf( )函数 149\r\n10.7 从键盘读取字符串 150\r\n10.7.1 使用gets( )函数输入字符串 150\r\n10.7.2 使用scanf( )函数输入字符串 152\r\n10.8 总结 154\r\n10.9 问与答 154\r\n10.10 作业 155\r\n10.10.1 小测验 155\r\n10.10.2 练习 156\r\n第11天课程 结构、共用体和TypeDef 157\r\n11.1 简单结构 157\r\n11.1.1 定义和声明结构 157\r\n11.1.2 存取结构的成员 158\r\n11.2 复杂结构 160\r\n11.2.1 包含其他结构的结构 160\r\n11.2.2 包含数组的结构 162\r\n11.3 结构数组 164\r\n11.4 初始化结构 167\r\n11.5 结构和指针 168\r\n11.5.1 将指针作为结构的成员 168\r\n11.5.2 创建指向结构的指针 170\r\n11.5.3 使用指针和结构数组 171\r\n11.5.4 将结构作为参数传递给函数 173\r\n11.6 共用体 174\r\n11.6.1 定义、声明和初始化共用体 175\r\n11.6.2 存取共用体的成员 175\r\n11.7 使用typedef给结构创建别名 179\r\n11.8 总结 179\r\n11.9 问与答 179\r\n11.10 作业 180\r\n11.10.1 小测验 180\r\n11.10.2 练习 180\r\n第12天课程 变量作用域 182\r\n12.1 作用域是什么 182\r\n12.1.1 演示作用域 182\r\n12.1.2 作用域为何重要 184\r\n12.2 外部变量 184\r\n12.2.1 外部变量的作用域 184\r\n12.2.2 何时使用外部变量 184\r\n12.2.3 extern关键字 184\r\n12.3 局部变量 185\r\n12.3.1 静态变量和动态变量 186\r\n12.3.2 函数参数的作用域 187\r\n12.3.3 外部静态变量 188\r\n12.3.4 寄存器变量 188\r\n12.4 局部变量和main( )函数 189\r\n12.5 应使用哪种存储类型 189\r\n12.6 局部变量和代码块 189\r\n12.7 总结 190\r\n12.8 问与答 191\r\n12.9 作业 191\r\n12.9.1 小测验 191\r\n12.9.2 练习 191\r\nTYPE&RUN4 机密消息 194\r\n第13天课程 高级程序流程控制 197\r\n13.1 提早结束循环 197\r\n13.1.1 break语句 197\r\n13.1.2 continue语句 199\r\n13.2 goto语句 200\r\n13.3 死循环 202\r\n13.4 switch语句 205\r\n13.5 退出程序 212\r\n13.5.1 exit( )函数 212\r\n13.6 在程序中执行操作系统命令 213\r\n13.7 总结 214\r\n13.8 问与答 215\r\n13.9 作业 215\r\n13.9.1 小测验 215\r\n13.9.2 练习 215\r\n第14天课程 操纵屏幕、打印机和键盘 217\r\n14.1 流和C语言 217\r\n14.1.1 何为程序的输入/输出 217\r\n14.1.2 什么是流 217\r\n14.1.3 文本流和二进制流 218\r\n14.1.4 预定义的流 218\r\n14.2 使用C语言的流函数 219\r\n14.2.1 例子 219\r\n14.3 读取键盘输入 220\r\n14.3.1 字符输入 220\r\n14.3.2 格式化输入 225\r\n14.4 控制屏幕输出 231\r\n14.4.1 使用putchar( )、putc( )和fputc( )输出字符 231\r\n14.4.2 使用puts( )和fputs( )输出字符串 233\r\n14.4.3 使用printf( )和fprintf( )格式化输出 234\r\n14.5 重定向输入/输出 238\r\n14.5.1 重定向输入 239\r\n14.6 何时使用fprintf( ) 239\r\n14.6.1 使用stderr 240\r\n14.7 总结 241\r\n14.8 问与答 241\r\n14.9 作业 242\r\n14.9.1 小测验 242\r\n14.9.2 练习 242\r\n第二周复习 244\r\n第三周课程\r\n第15天课程 有关指针的高级主题 252\r\n15.1 声明指向指针的指针 252\r\n15.2 指针和多维数组 253\r\n15.3 指针数组 259\r\n15.3.1 复习字符串和指针 259\r\n15.3.2 声明char类型指针数组 259\r\n15.3.3 范例 261\r\n15.4 函数指针 265\r\n15.4.1 声明函数指针 265\r\n15.4.2 初始化并使用函数指针 266\r\n15.5 链表 273\r\n15.5.1 有关链表的基本知识 273\r\n15.5.2 使用链表 274\r\n15.5.3 演示简单链表 278\r\n15.5.4 实现链表 280\r\n15.6 总结 286\r\n15.7 问与答 286\r\n15.8 作业 286\r\n15.8.1 小测验 287\r\n15.8.2 练习 287\r\n第16天课程 使用磁盘文件 289\r\n16.1 将流与磁盘文件关联起来 289\r\n16.2 磁盘文件的类型 289\r\n16.3 文件名 290\r\n16.4 打开文件 290\r\n16.5 读写文件数据 292\r\n16.5.1 格式化文件输入/输出 293\r\n16.5.2 字符输入/输出 296\r\n16.5.3 直接文件输入/输出 297\r\n16.6 文件缓冲技术:关闭和刷新文件 300\r\n16.7 顺序文件存取和随机文件存取 301\r\n16.7.1 ftell( )和rewind( )函数 301\r\n16.7.2 fseek( )函数 303\r\n16.8 检测文件尾 305\r\n16.9 文件管理函数 307\r\n16.9.1 删除文件 307\r\n16.9.2 给文件重命名 308\r\n16.9.3 复制文件 309\r\n16.10 使用临时文件 311\r\n16.11 总结 312\r\n16.12 问与答 312\r\n16.13 作业 313\r\n16.13.1 小测验 313\r\n16.13.2 练习 313\r\nTYPE&RUN5 计算字符数 314\r\n第17天课程 操纵字符串 318\r\n17.1 确定字符串的长度 318\r\n17.2 复制字符串 319\r\n17.2.1 strcpy( )函数 319\r\n17.2.2 strncpy( )函数 320\r\n17.2.3 strdup( )函数 321\r\n17.3 拼接字符串 322\r\n17.3.1 strcat( )函数 322\r\n17.3.2 strncat( )函数 324\r\n17.4 比较字符串 325\r\n17.4.1 比较两个完整字符串 325\r\n17.4.2 比较字符串的一部分 326\r\n17.4.3 比较字符串时忽略大小写 328\r\n17.5 查找字符串 328\r\n17.5.1 strchr( )函数 328\r\n17.5.2 strrchr( )函数 329\r\n17.5.3 strcspn( )函数 329\r\n17.5.4 strspn( )函数 330\r\n17.5.5 strpbrk( )函数 331\r\n17.5.6 strstr( )函数 331\r\n17.6 字符串转换 332\r\n17.7 其他字符串函数 333\r\n17.7.1 strrev( )函数 333\r\n17.7.2 strset( )和strnset( )函数 334\r\n17.8 将字符串转换为数字 334\r\n17.8.1 将字符串转换为int 335\r\n17.8.2 将字符串转换为long值 335\r\n17.8.3 将字符串转换为long long值 335\r\n17.8.4 将字符串转换为浮点数 335\r\n17.9 字符检测函数 336\r\n17.9.1 ANSI对大小写转换的支持 339\r\n17.10 总结 340\r\n17.11 问与答 340\r\n17.12 作业 341\r\n17.12.1 小测验 341\r\n17.12.2 练习 341\r\n第18天课程 有关函数的高级主题 343\r\n18.1 将指针传递给函数 343\r\n18.2 void类型的指针 346\r\n18.3 接受可变数目参数的函数 348\r\n18.4 返回指针的函数 350\r\n18.5 总结 352\r\n18.6 问与答 352\r\n18.7 作业 352\r\n18.7.1 小测验 352\r\n18.7.2 练习 353\r\n第19天课程 函数库 354\r\n19.1 数学函数 354\r\n19.1.1 三角函数 354\r\n19.1.2 指数函数和对数函数 354\r\n19.1.3 双曲线函数 355\r\n19.1.4 其他数学函数 355\r\n19.1.5 演示数学函数 355\r\n19.2 处理时间 356\r\n19.2.1 时间的表示 356\r\n19.2.2 时间函数 356\r\n19.2.3 使用时间函数 359\r\n19.3 处理错误 360\r\n19.3.1 assert( )宏 361\r\n19.3.2 头文件errno.h 362\r\n19.3.3 perror( )函数 362\r\n19.4 查找和排序 364\r\n19.4.1 使用bsearch( )进行查找 364\r\n19.4.2 使用qsort( )进行排序 365\r\n19.4.3 演示查找和排序 365\r\n19.5 总结 370\r\n19.6 问与答 370\r\n19.7 作业 370\r\n19.7.1 小测验 370\r\n19.7.2 练习 371\r\nTYPE&RUN6 计算抵押贷款的偿还金额 372\r\n第20天课程 管理内存 374\r\n20.1 类型转换 374\r\n20.1.1 自动类型转换 374\r\n20.1.2 显式转换 376\r\n20.2 分配内存的存储空间 377\r\n20.2.1 使用malloc( )函数分配内存 377\r\n20.2.2 使用calloc( )函数分配内存 379\r\n20.2.3 使用realloc( )函数分配更多的内存 380\r\n20.2.4 使用free( )函数释放内存 381\r\n20.3 操纵内存块 383\r\n20.3.1 使用memset( )函数初始化内存 383\r\n20.3.2 使用memcpy( )复制内存中的数据 383\r\n20.3.3 使用memmove( )函数移动内存中的数据 383\r\n20.4 位的用法 385\r\n20.4.1 移位运算符 385\r\n20.4.2 按位逻辑运算符 386\r\n20.4.3 求补运算符 387\r\n20.4.4 结构中的位字段 387\r\n20.5 总结 389\r\n20.6 问与答 389\r\n20.7 作业 390\r\n20.7.1 小测验 390\r\n20.7.2 练习 390\r\n第21天课程 编译器的高级用法 392\r\n21.1 使用多个源代码文件的编程 392\r\n21.1.1 模块化编程的优点 392\r\n21.1.2 模块化编程技术 392\r\n21.1.3 模块的组成部分 394\r\n21.1.4 外部变量和模块化编程 395\r\n21.1.5 使用.obj文件 395\r\n21.1.6 使用生成工具 396\r\n21.2 C语言的预处理器 396\r\n21.2.1 #define预处理器编译指令 397\r\n21.2.2 使用编译指令#include 400\r\n21.2.3 使用#if、#elif、#else和#endif 400\r\n21.2.4 使用#if…#endif来帮助调试 401\r\n21.2.5 避免将头文件包含多次 401\r\n21.2.6 #undef编译指令 402\r\n21.3 预定义的宏 402\r\n21.4 使用命令行参数 403\r\n21.5 总结 405\r\n21.6 问与答 405\r\n21.7 作业 405\r\n21.7.1 小测验 405\r\n21.7.2 练习 406\r\n第三周复习 407\r\n附加课程(具体内容见光盘) 413\r\n附录A ASCII字符集 414\r\n附录B C/C++中的保留字 418\r\n附录C 使用二进制和十六进制数 420\r\nC.1 十进制 420\r\nC.2 二进制 420\r\nC.3 十六进制 420\r\n附录D 移植性问题 422\r\nD.1 ANSI标准 422\r\nD.2 ANSI关键字 422\r\nD.3 区分大小写 422\r\nD.4 可移植的字符 424\r\nD.5 确保ANSI兼容性 424\r\nD.6 绕开ANSI标准 424\r\nD.7 使用可移植的数值变量 425\r\nD.7.1 最大值和最小值 426\r\nD.7.2 确定数字的类型 430\r\nD.7.3 转换字符的大小写:一个可移植性范例 434\r\nD.8 可移植的结构和共用体 434\r\nD.8.1 字对齐 434\r\nD.8.2 读写结构 435\r\nD.8.3 在可移植的程序中使用非-ANSI特性 436\r\nD.8.4 ANSI标准头文件 437\r\nD.9 总 结 438\r\nD.10 问与答 438\r\nD.11 作 业 438\r\nD.11.1 小测验 438\r\nD.11.2 练习 439\r\n附录E 常用的C语言函数 440\r\n附录F 作业答案 444\r\n第1天课程的答案 444\r\n小测验 444\r\n练习 444\r\n第2天课程的答案 445\r\n小测验 445\r\n练习 445\r\n第3天课程的答案 446\r\n小测验 446\r\n练习 446\r\n第4天课程的答案 447\r\n小测验 447\r\n练习 447\r\n第5天课程的答案 449\r\n小测验 449\r\n练习 449\r\n第6天课程的答案 452\r\n小测验 452\r\n练习 452\r\n第7天课程的答案 453\r\n小测验 453\r\n练习 453\r\n第8天课程的答案 457\r\n小测验 457\r\n练习 457\r\n第9天课程的答案 461\r\n小测验 461\r\n练习 461\r\n第10天课程的答案 463\r\n小测验 463\r\n练习 463\r\n第11天课程的答案 465\r\n小测验 465\r\n练习 466\r\n第12天课程的答案 467\r\n小测验 467\r\n练习 467\r\n第13天课程的答案 470\r\n小测验 470\r\n练习 471\r\n第14天课程的答案 471\r\n小测验 471\r\n练习 472\r\n第15天课程的答案 472\r\n小测验 472\r\n练习 473\r\n第16天课程的答案 473\r\n小测验 473\r\n练习 474\r\n第17天课程的答案 474\r\n小测验 474\r\n练习 474\r\n第18天课程的答案 475\r\n小测验 475\r\n练习 475\r\n第19天课程的答案 475\r\n小测验 475\r\n练习 476\r\n第20天课程的答案 476\r\n小测验 476\r\n练习 477\r\n第21天课程的答案 477\r\n小测验 477\r\n附加课程1的答案 478\r\n小测验 478\r\n附加课程2的答案 478\r\n小测验 478\r\n附加课程3的答案 478\r\n小测验 478\r\n附加课程4的答案 479\r\n小测验 479\r\n附加课程5的答案 479\r\n小测验 479\r\n附加课程6的答案 480\r\n小测验 480\r\n附加课程7的答案 480\r\n小测验 480\r\n练习 480\r\n附录G Dev-C++编译器 482\r\nG.1 Dev-C++简介 482\r\nG.2 在Microsoft Windows上安装Dev-C++ 482\r\nG.3 Dev-C++中的程序 484\r\nG.4 使用Dev-C++ 484\r\nG.4.1 针对C语言编程定制Dev-C++ 485\r\nG.4.2 在Dev-C++中输入并编译程序 486\r\nG.4.3 编译Dev-C++程序 488\r\nG.4.4 运行Dev-C++程序 488\r\nG.5 总 结 489\r\n
Bradley L.Jones在internet.com网站就职,负责管理Earth Web 软件开发频道,包括诸如Dev-eloper.com、CodeGurn.com和Gamelan.com等网站。 Bradley领导开发了用于各种平台(从Palm OS
到大型机系统)的小型和分布式系统。Bradley拥有使用C、C#、C++、XML、SQL Server、PowerBuil-der、Visual Basic、ASP和Satellite Forms等工具进行开发工作的经验。他编写的其他图书包括《
Teach Yourself Advanced C in 21 Days》和《21天学通C#》。