市面上有很多介绍C语言的书,但这是第一本将C语言以简洁而实用的方式介绍给
读者的书籍。
用C语言进行编程不仅仅是在程序中使用正确的句法,编程的风格以及程序的调试
在编写程序的过程中也占有相当大的篇幅,从而有助于程序的良好运行且易于维护。本书不仅仅
向你介绍编程的机制,同时也告诉你如何创建易于阅读、调试和更改的程序。
本书也强调了实用的原则。例如,在C语言中有15种有关优先级的规则,而运用实用的原则可将
其简化为两条规则:
乘法和除法优先于加法和减法。
在所有该加括号的地方都加上括号。
与时下流行的观点相反,大多数程序员不是在花时间编写全新的代码,而是在花时间改写已有的
代码。本书告诉你在编写C程序时如何避免那些常见的、易于混淆的句法错误,并教会伪:在面对
具体应用程序时如何识别这些错误。你还将学会编写让人易于解读的程序代码。有关代码分析、
阅读他人程序代码的技巧,在本书中也有介绍。
在第三版中也介绍了有关Windows系统上常见的集成化开发环境,以及一些Unix编程工具,并
且以一个大型的统计生成程序为例讲述C语言中的所有概念和特性。
前言\r\n\r\n第一部分 基础\r\n\r\n第一章 什么是C\r\n\r\n编使原理\r\nC语言简史\r\nC如何工作\r\n如何学习C\r\n\r\n第二章 编程基础\r\n\r\n程序从概念到运行\r\n编写一个真正的程序\r\n使用命令行编译器编程\r\n使用集成开发环境(IDE)编程\r\n获取UNIX帮助\r\n获取集成开发环境帮助\r\n集成开发环境菜单\r\n编程练习\r\n\r\n第三章 风格\r\n\r\n基础编码练习\r\n编码盲从\r\n缩进与编码格式\r\n清晰\r\n简明\r\n小结\r\n\r\n第四章 基本定义与表达式\r\n\r\n程序要素\r\n程序的基本结构\r\n简单表达式\r\n变量和存储\r\n变量定义\r\n整型\r\n赋值语句\r\nprintf函数\r\n浮点型\r\n浮点数与整数的除法运算\r\n字符\r\n答案\r\n编程练习\r\n\r\n第五章 数组、修饰符与读取数字\r\n\r\n数组\r\n串\r\n读取串\r\n多维数组\r\n读取数字\r\n变量初始化\r\n整型\r\n浮点型\r\n常量说明\r\n十六进制与八进制常量\r\n快捷运算符\r\n副作用\r\n++x或x++\r\n更多的副作用问题\r\n答案\r\n编程练习\r\n\r\n第六章 条件和控制语句\r\n\r\nif语句\r\nelse语句\r\n怎样避免误用strcmp函数\r\n循环语句\r\nWhile语句\r\nbreak语句\r\ncontinue语句\r\n随处赋值的副作用\r\n答案\r\n编程练习\r\n\r\n第七章 程序设计过程\r\n\r\n设置\r\n程序规范\r\n代码设计\r\n原型\r\nMakefile\r\n测试\r\n调试\r\n维护\r\n修改\r\n代码分析\r\n注释程序\r\n使用调试器\r\n用文本编辑器浏览\r\n增加注释\r\n编程练习\r\n\r\n第二部分 简单程序设计\r\n\r\n第八章 更多的控制语句\r\n\r\nfor语句\r\nswitch语句\r\nswitch, break和continue\r\n答案\r\n编程练习\r\n\r\n第九章 变量作用域和函数\r\n\r\n作用域和类\r\n函数\r\n无参数的函数\r\n结构化程序设计\r\n递归\r\n答案\r\n编程练习\r\n\r\n第十章 C预处理器\r\n\r\n#define语句\r\n条件编译\r\n包含文件\r\n带参数的宏\r\n高级特征\r\n小结\r\n答案\r\n编程练习\r\n\r\n第十一章 位运算\r\n\r\n位运算符\r\n与运算符(&)\r\n按位或(\)\r\n按位异或(^)\r\n非运算符(~)\r\n左移与右移运算符(<<,>>)\r\n设置、清除和检测位\r\n位图图形\r\n答案\r\n编程练习\r\n\r\n第十二章 高级类型\r\n\r\n结构\r\n联合\r\ntypedef \r\n枚举类型\r\n强制类型转换\r\n位字段或紧缩结构\r\n结构数组\r\n小结\r\n编程练习\r\n\r\n第十三章 简单指针\r\n\r\n函数自变量指针\r\n常量指针\r\n指针和数组\r\n如何不使用指针\r\n用指针分隔字符串\r\n指针和结构\r\n命令行参数\r\n编程练习\r\n答案\r\n\r\n第十四章 文件输入/输出\r\n\r\n转换程序\r\n二进制和ASCII码文件\r\n行尾难题\r\n二进制I/O\r\n缓冲问题\r\n非缓冲I/O\r\n设计文件格式\r\n答案\r\n编程练习\r\n\r\n第十五章 调试和优化\r\n\r\n调试\r\n交互调试器\r\n调试一个二分查找程序\r\n实时运行错误\r\n公开声明调试方法\r\n优化\r\n答案\r\n编程练习\r\n\r\n第十六章 浮点数\r\n\r\n浮点数格式\r\n浮点数加法/减法\r\n乘法\r\n除法\r\n上溢和下溢\r\n舍入误差\r\n精度\r\n舍入误差最小化\r\n判定精度\r\n精度和速度\r\n幂级数\r\n编程练习\r\n\r\n第三部分 高级编程观念\r\n\r\n第十七章 高级指针\r\n\r\n指针和结构\r\nfree函数\r\n链表\r\n结构指针运算符\r\n顺序链表\r\n双向链表\r\n树\r\n树的打印\r\n程序的剩余部分\r\n象棋程序中用到的数据结构\r\n答案\r\n编程练习\r\n\r\n第十八章 模块化编程\r\n\r\n模块\r\n公用和专用\r\nextern修饰符\r\n头文件\r\n模块体\r\n使用无限数组的程序\r\n用于多文件的Makefile\r\n使用无限数组\r\n把一项任务分成模块\r\n模块划分实例:文本编辑器\r\n编译器\r\n电子表格\r\n模块设计准则\r\n编程练习\r\n\r\n第十九章 旧式编译器\r\n\r\nK&R风格的函数\r\n库的发展\r\n遗漏的特性\r\nFree/Malloc的发展\r\nlint\r\n答案\r\n\r\n第二十章 移植问题\r\n\r\n模块化\r\n字大小\r\n字节顺序问题\r\n对齐问题\r\nNULL指针问题\r\n文件名问题\r\n文件类型\r\n小结\r\n答案\r\n\r\n第二十一章 C内的“角落”\r\n\r\ndo/While\r\ngoto\r\n: 指令\r\n, 运算符\r\n不稳定限定词\r\n答案\r\n\r\n第二十二章 组合到一起\r\n\r\n需求\r\n规范说明\r\n代码设计\r\n编码\r\n功能描述\r\n扩展\r\n测试\r\n修改\r\n最后的警告\r\n程序文件\r\n编程练习\r\n\r\n第二十三章 程序设计格言\r\n\r\n概述\r\n设计\r\n定义\r\nswitch语句\r\n预处理器\r\n风格\r\n编译\r\n最后的注解\r\n答案\r\n\r\n第四部分 其他语言特性\r\n\r\n附录一 ASCII表\r\n附录二 范围和参数传递转换\r\n附录三 运算符优先规则\r\n附录四 使用幂级数计算正弦函数的程序\r\n\r\n词汇表
本书讲述如何使用C语言进行真正的编程。c是目前软件开发者们最主要的编程语言。这也是它受到广泛传播并且成为标准的原因。现在也有新的编程语言出现,如C++,但这些语言仍然在演化中。C仍然是进行健壮的、可移植编程的首选语言。本书侧重介绍在实际编程过程中需要知道的技巧问题。它不仅告诉你有关C语言的机制,也告诉你用C进行编程的整个过程(包括程序的含义、设计、编码、方法、调试、发布、文档、维护和版本更新等)。
本书也介绍了用C编程的风格和艺术。要写出一个好的程序,需要做许多工作,而不仅仅是敲一些代码。这是一门有关写作和编程的技巧,并将其合二为一的艺术,从而使你写出的程序成为一件杰作。这样创作出来的作品才是真正的艺术。一个非常好的程序不仅仅要功能正确,而且应该简单易读。在程序中允许加进一些评论性的描述性文字。当清晰的评注被加进程序中时,这样的程序就会得到其他人的高度评价。
程序应该尽可能简单。程序员应该避免玩一些聪明的技巧。在本书中我们强调简单、实用的原则。例如,在C中有15条关于操作符的规则,但它们可以被简化为
1. 先乘除,后加减。
2. 括号优先于其他一切运算。
考虑两个程序:一个是由聪明的程序员使用了所有技巧编写的程序,程序没有包含任何注解,但是可以运行;另外一个程序有很好的注解和结构,但是它不能运行。两个程序哪一个更有用呢?从长远的角度看,应该是那个不能运行的程序,因为它存在的问题可以被解决掉。尽管那个聪明的程序员的程序现在可以运行,但迟早该程序会被修改的。那么到那时,最坏的事情就会出现——你不得不去修改一个充满技巧、但没有任何注解的程序。
这本书是针对那些没有编程经验,或者已经对C语言有所了解但是还想进——步提高他们的编程风格和程序可靠性的人所作的。在使用这本书之前,你应该知道如何使用计算机并且知道如何使用一些基本的工具,诸如文本编辑器和文件系统。对于那些想在UNIX操作系统上用generic“编译器或者自由软件基金会的gcc编译器编写和运行程序的读者,我们给出了一些特别的指导。对于MS-DOS/Windows的用户,我们也给出了包括Borland C++,Turbo C++和Microsoft Visual C++的使用说明(这些编译器可以对C和C++的代码进行编译)。在本书中也给出了一些使用编程工具make进行自动程序编译的例子。
这本书是如何组织的
在你学会跑步之前,你必须先学会走路。
在第一部分——基础中,你将会学习如何走路。本章只讲述如何编写一个非常简单的程序。读者从编程技巧和编程风格人手。下一步,你将学习如何使用变量和非常简单的判断和控制语句。在第七章程序设计过程中,我们才将编写真正程序的完整过程展现给读者。
在第二部分——简单程序设计中,我们介绍编程时所有需要的简单语句和运算符。读者还将学习到如何把这些语句组织成为简单函数的方法。
在第三部分——高级编程概念中,我们将介绍一些基本的说明和语句来构造高级类型的方法,如构造结构、联合和类。这一部分还将向读者介绍指针的概念。
最后,在第四部分我们还会介绍一些其他的语言特征。
第三版说明
自从《Practical C Programming》(译注)第一版出版后,C语言本身已经有了很大的变化。回想当初,ANSI编译器还很少见,而且当时K&R的语法结构很常见。但是现在情况完全相反。
第三版反映了整个业界已经将标准转向ANSI标准的编译器。本书中的所有程序和范例都已经更新为ANSI标准。实际上,较老的K&R语法仅在第十九章中有一些讨论。
本书中的一些其他变化和新添内容有
添加了一些其他的针对generic UNIX编译器、自由软件基金会的gcc编译器、Borland C++、Turbo C++和Microsoft Visual C++的编译器介绍。
第二十二章完全进行了重写。在本章中使用了一个统计程序,这对大多数的读者来讲是极有益的。
最后我要声明的是,我是一个很实际的人。我希望你能明白我的意思,语言是为目的服务的。在整本书中,我使用“他”来指某个程序员。少数人以“政治性纠正”的理由来表明这种用法带有大男子主义色彩。他们同时也声明在书弓,的某些段落中带有种族歧视,我认为这是不正确的。
请注意,当我使用“他”时,我是指某个程序员,并不代表性别。其次,当我建议一些功底很差的程序员应该被枪毙时,请读者勿从字面理解其意。
我的风格是以清楚明了、简单并带有一点幽默感的方式进行交流。如果这对你右所冒犯的话,在此表示歉意。