C/C++及其相关
-
高质量程序设计指南林锐,顾晓刚,谢义军编著高质量软件开发是国内计算机教育的薄弱环节,很多程序员虽然能熟练地掌握编程技术但是缺乏强烈的质量意识,不懂得在开发过程中内建高质量。这使得大部分企业只能依靠大量地测试和改错来提高软件产品的质量,为此付出了高昂的代价。因此,如何有效地提高软件产品的质量是IT企业面临的主要挑战之一。本书论述高质量软件开发方法与C++/C编程规范,共十五章,分两部分:(1)第一部分共四章,重点介绍软件质量和面向对象程序设计方法。(2)第二部分共十一章,重点阐述C++/C编程风格和一些技术专题。本书以幽默的笔调对软件工程和编程作了很好的论述。前期版本曾经在Internet上广泛流传,被国内IT企业的不少软件开发人员采用。本书的主要读者对象是IT企业的程序员和项目经理,以及高年级本科生和研究生。本书作者林锐博士是上海贝尔有限公司软件工程专家,他将从一名程序开发人员成长为软件工程专家的亲身感悟写成活泼生动的文字,将程序设计和软件工程的很多思想方法融于笑谈之中,内容风趣,令人耳目一新。该书早期版本曾在网上广泛流传,得到了国内很多程序员、大学教师和学生们的好评。作者数易其稿,最新版本添加了不少精彩章节。不仅介绍了高质量软件开发的思想方法,而且以幽默的笔调讲述程序员做人做事的道理,完全没有计算机书籍刻板的气息。尤其是附录那篇描述程序员成长的《大学十年》,令人激动,催人奋进。这是一本能打动程序员心灵的佳作。该书专注于"高质量"而不是"语法",是广大迫切需要提高软件产品质量,改进编程思想的程序员、IT企业技术主管的选择。 -
C语言编程基础王森主编编辑推荐:本书是根据教育部知识模块2001年颁布的《编程语言基础》课程教学大纲编写的。全书分成基础知识模块和选用模块两篇,共10章。基础知识模块包括绪论、基本数据类型和简单程序设计、表达式与运算符、数据的输入与输出、控制语句、数组、函数和文件;选用模块有编译预处理和指针。书中以TurboC为代表讲述C语言程序设计的基本知识和基本方法,针对中等职业教育层次,难易适中,实用性强,便于学生接受。书中每一章都有基本概念介绍、知识应用举例、编程技巧和算法分析、训练习题,以及上机指导与实习等内容,非常有利于学生理解、消化和掌握各单元的学习内容。本书除作为中等职业学校3,4年制计算机及应用专业的专业教材外,还可作为一般计算机爱好者的自学参考书。 -
全C编程(美)高永强编著本书把C和C++融为一体,从实用角度介绍程序设计和编程技术。它从教学和自学两方面的需求出发,利用300多个完整的程序例子,由浅入深,一步一步系统地讨论和介绍了C和 C++中基本和常用的语句、运算以及操作。由于本书打破了传统的人为设立在C和C++之间的“界限”,而本着“不管是 C还是 C++,哪个好用好学就用哪个”的思想,因此读者可以利用贯穿于书中的有效的学习方法,在较短的时间内同时掌握C和C++的基本和主要的编程概念和技术。 除以综合方式介绍程序设计和编程方法外,本书还具有如下几个特点:一是利用一章的篇幅详细介绍了怎样利用排错工具Debugger来学习程序和语言;二是在本书的后四章中着重讨论了面向对象的编程技术(Object-Oriented Programming);三是在几乎每章最后,都包括了解决实际问题的实例,综合性地介绍了如何利用在该章讨论过的概念。语句、运算以及操作来解决实际问题。在每章后安排的“边做边学练习”中,还进一步要求读者理解和掌握在本章程序例子中介绍的概念和编程技术。 本书是为初学语言和编程的读者编写的。它适合于大学、大专。中专以及培训中心作为教科书使用,可以作为自学课本,也可以作为专业人员的参考书。 -
二级考试要点、题型分析与训练王中平等著本书根据全国计算机等级考试二级C语方程序设计(2002年版)考试大纲编写。全书共分为两部分:第一部分,主要介绍计算机基础知识、网络与多媒体、DOS与Windows操作系统、C语言程序设计的考试要点,并在此基础上分析历届考试试题;第二部分,上机考试,给出了上机考试操作的全过程和三套仿真模拟试题,供读者参考。本书通俗易懂、深浅得当,适合于准备参加全国等级考试的人员作为应试参考书,也可作为各类全国计算机等级考试培训班的辅导教材。 -
数据结构与算法分析(美)Clifford A.Shaffer著;张铭,刘晓丹等译本书采用程序员最爱用的面向对象C++语言来描述数据结构和算法,并把数据结构原理和算法分析技术有机地结合在一起,系统介绍了各种类型的数据结构和排序、检索的各种方法。作者非常注意对每一种数据结构不同存储方法及有关算法进行分析比较。书中还引入了一些比较高级的数据结构与先进的算法分析技术,并介绍了可计算性理论的一般知识。本版的重要改进在于引入了参数化的模板,从而提高了算法中数据类型的通用性,支持高效的代码重用。本书概念清楚、逻辑性强、内容新颖,可作为大专院校计算机软件专业与计算机应用专业学生的教材和参考书,也可供计算机工程技术人员参考。译者序数据结构与算法分析是一门计算机专业十分重要的基础课,计算机科学各领域及各种应用软件都要使用相关的数据结构和算法。当面临一个新的设计问题时,设计者需要选择适当的数据结构,并设计出满足一定?奔浜涂占湎拗频挠行惴ā1臼樽髡甙咽萁峁购退惴ǚ治鲇谢厝嗪显谝槐窘滩闹校兄诙琳吒菸侍獾男灾恃≡窈侠淼氖萁峁梗⒍允奔淇占涓丛有越斜匾目刂啤*?本书采用当前流行的面向对象的C++语言来描述数据结构和算法,因为C++语言是程序员最广泛使用的语言。因此,程序员可以把本书中的许多?惴ㄖ苯佑τ糜诮吹氖导氏钅恐小>」?数据结构和算法在设计本质上还是很底层的东西,并不像软件工程大型项目设计那样,对面向对象方法具有直接的依赖性,因此有人会认为并不需要采用面向对象的高级技术来描述底层的算法,但是采用C++语言能够更好地体现抽象数据类型的概念,从而更本质地描述数据结构和算法。为了使本书清晰易懂,作者有意回避了C++的某些重要特性。这个版本的重要改进是引入了参数化的模板,从而提高了算法中数据类型的通用性,支持高效的代码重用。本书包括四大部分内容,第一部分是准备工作,介绍了一些基本概念和术语,以及基本的数学知识。第二部分介绍了最基本的数据结构,依次为线性表(包括栈和队列)、二叉树和树。对每种数据结构的讲解都从其数学特性入手,先介绍抽象数据类型,然后再讨论不同的存储方法,并且研究不同存储方法的可能算法。值得赞赏的是,作者结合算法分析来讨论各种存储方法和算法的利弊,摒弃那些不适宜的方法,这样就调动了读者思维,使其可从中学到考虑问题的方法。这种“授人以渔”的策略使读者在今后设计和应用数据结构时能够全面地考虑各种因素,并选择最佳方案。作为最常用的算法,排序和检索历来是数据结构讨论的重点问题。这在第三部分的第9章和第10章中进行了详尽的讨论。排序算法最能体现算法分析的魅力,它的算法速度要求非常高:其中内排序主要考虑的是怎样减少关键码之间的比较次数和记录交换次数,以提高排序速度;而外排序则考虑外存的特性,尽量减少访问操作,以提高排序速度。第8章证明了所有基于比较的排序算法的时间代价是Θ(nlogn),这也是排序问题的时间代价。检索则考虑怎样提高检索速度,这往往与存储方法有关。书中介绍了几种高效的数据结构,如自组织线性表、散列表、B树和B+树等,都具有极好的检索性能。第四部分介绍了数据结构的应用与一些高级主题,其中包括图、跳跃表、广义表和稀疏矩阵等更复杂的线性表结构、还包括Trie结构、AVL树等复杂树结构,以及kd树、PR四分树等空间数据结构。另外,第四部分还简单介绍了求和、递归关系分析和均摊分析等高级算法分析技术,这些技术对于提高程序员的算法分析能力具有重要作用。本书的前言及第1章至第7章由张铭翻译,第8章至第15章由刘晓丹翻译。另外,肖毅、柴雯、肖之屏、刘NFB35、赵培翔、李丽、王蜀安、张海东、刘振飞和李健等人也参加了本书的翻译工作,在此对他们的辛勤劳动表示感谢。由于水平有限,难免有不妥之处,欢迎批评指正。前言我们研究数据结构的目的是为了学会编写更高效的程序。既然现在的计算机速度一年比一年快,为什么还会需要高效率的程序呢?这是由于人类解决问题的雄心与能力是同步增长的。现代计算技术在计算能力和存储容量上的革命,仅仅提供了计算更复杂问题的有效工具,而程序的高效性要求永远也不会过时。程序高效性的要求不会,也不应该与合理的设计和简明清晰的编码相矛盾。高效程序的设计基于良好的信息组织和优秀的算法,而不是基于“编程小伎俩”。如果一个程序员没有掌握程序设计简明清晰的基本原理,就不可能编写出有效的程序。反过来讲,简洁的程序需要合理的数据组织和清晰的算法。大多数计算机科学系的课程设置都已意识到,要培养良好的程序设计技能,首先应该强调基本的软件工程原理。因此,一旦程序员学会了程序设计和实现简明清晰的原理,下一步就应该学习有效的数据组织和算法,以提高程序的效率。途径本书描述了许多用于表示数据的技术。这些技术体现在以下的原则中:1.〖ZK(#〗每一种数据结构和每一个算法都有其时间、空间的代价和效率。当面临一个新的设计问题时,设计者要透彻地掌握权衡时间、空间代价和算法有效性的方法,以适应问题的需要。这就要懂得算法分析的原理,而且还需要了解所使用的物理介质的特性(例如,数据存储在磁盘上与存储在主存中时,就有不同的考虑)。2.与代价和效率有关的是时空权衡。例如,人们通常增加空间代价来减少运行时间,反之亦然。程序员所面对的时空权衡问题普遍存在于软件设计和实现的各个阶段,因此必须把这个概念牢记在心。3.程序员应该充分了解一些现成的方法,以免进行不必要的重复开发工作。因此,学生们需要了解经常使用的数据结构和相关算法。4.数据结构服从于应用需求。学生们必须把分析应用需求放在第一位,然后再寻找一种与实际应用相匹配的数据结构。要做到这一点,需要应用上述三条原则。〖ZK)〗教学建议数据结构和算法设计的书籍往往囿于下面两种情形之一〖BFQ〗:〖BF〗一种是教材,一种是百科全书。有些书籍试图融合这两种编排,但通常是二者都没有组织好,而本书是作为教材来编写的。我相信了解那些用于选择或设计可解决问题的数据结构的基本原理十分重要,会比死记硬背书本内容重要得多。因此,本书中涵盖了大多数(但不是所有的)标准数据结构。为了阐述一些重要原理,也包括了某些并非广泛使用的数据结构。?硗猓臼橹谢菇樯芰?一些相对较新但即将得到广泛应用的数据结构。本书可作为本科生一个学期的教学内容,也可作为专业技术人员的自学教材。读者应该具备编程经验,最好学过相当于两个学期的结构化程序设计语言(如Pascal或C语言),并且最好懂得一些C++的基本知识。早已熟悉递归的读者具有一定的?攀啤O刃尥暌幻藕?的离散数学课程对于数据结构的学习也大有裨益。第2章中给出了一些理解本书所必备的数学预备知识。读者遇到不熟悉的数学问题时,可以查阅这一章中的相关内容。尽管本书应该一个学期完成,但书中超过了一个学期的内容,这样就可以为教师提供一些选择的余地。二年级学生的基本数据结构和算法分析背景不太多,可以给他们详细地讲解第1~12章的内容,再从第13章中选择一些专题来讲解,我就是这样来给二年级学生讲课的。背景知识更丰富的学生,可以先读第1章,跳过第2章中除“深入学习导读”之外的内容,简要地浏览第3章和第4章(请着重阅读4.1.3小节和4.2小节),然后详细阅读其余的章节。另外,教师可以根据程序设计实习的需要,选择第13章中的某些专题内容。第13章是针对进行较大的程序设计练习而编写的。我建议所有选修数据结构的学生,都应该做一些高级树结构或其他较复杂的动态数据结构的上机实习,如第12章中的跳跃表或稀疏矩阵。所有这些数据结构都没有二叉检索树难,学完第5章的学生都有能力来实现它们。本书尽量合理地安排内容顺序。教师可以根据需要自由地重新组织内容。读者掌握了第1至第6章后,以下的内容就相对独立了。显然,外排序依赖于内排序和磁盘文件系统。Kruskal最小支撑树算法使用了6.2小节关于UNION/FIND的算法。9.2小节的自组织线性表谈到了8.3小节讨论的缓冲区置换技术。第14章的讨论基于本书的例题。15.2小节依赖于图论知识。一般情况下,大多数主题都只依赖于同一章中讨论过的内容。关于C++本书中所有示例程序都是用C++来编写的,但也并不想难倒那些对C++不熟悉的读者。在努力保持C++优点的同时,我尽量使示例程序简明、清晰。C++在本书中只是作为阐释数据结构的工具,而且实际上只用了C++的一个小子集。特别是书中用到了C++隐蔽实现细节的特性,如类(class)、私有成员(privateclassmember)、构造函数(constructor)、析构函数(destructor)。这些特性支持着一个关键的概念,即体现于抽象数据类型(abstractdatatype)中的逻辑设计与体现于数据结构中的物理实现的分离。为了使本书清晰易懂,我完全回避了C++的某些重要特性,并有意排除或尽量少用一些经验丰富的C++程序员常用的特性,如类的层次(classhierarchy)、继承(inheritance)和虚函数(virtualfunction)。运算符和函数的重载(overloading)也很少使用。C的原始语义比C++所提供的一些类似功能要好一些。当然,上述C++的特性在实际程序中是合理的设计基础,但是它们只能掩盖而并没有加强本书中所阐述的原理。例如,类的继承在避免重复编码和降低程序错误率方面很重要,但是从教育学的标准观点来看,类的继承在若干类中分散了数据元素的描述,从而使得程序更难理解。因此,在本书中,当类的继承对阐述观点有明显作用时才使用继承来定义类(例如第531小节)。但这并不意味着程序员都应该遵从类似的原则,避免代码重复和减少错误是很重要的目标,不要把本书中的示例程序直接复制到你自己的程序中,只把它们看做是对数据结构原理的阐释即可。我需要做出的最痛苦的选择是:在示例代码中是否使用模板(t -
C++ BUILDER与RS-232串行通信控制范逸之,江文贤,陈立元编著本书使用C++Builder详细说明自动化的基础——RS-232串行通信,涉及以下内容:将C++Builder的应用扩展到硬件控制,以C++Builder开发串行通信的组件,控制调制解调器,通过串行端口来控制仪器,使串行通信扩展至分布式监控系统等。本书以循序渐进的方式介绍串行通信理论,从简单的串行概念和实验到复杂的仪器控制,都提供了完整的C++Builder范例。本书面向操作,重点突出,侧重应用。书中提供了完整的设计步骤和程序代码,并给予详细的注释,既适合有程序设计基础的读者使用,也适合没有程序设计基础的读者学习。本书可供自动化控制和通信领域的开发人员和其他相关技术人员使用或参考。 -
计算机图形学原理及实践(美)James D.Foley等著By uniquely combining current concepts and practical applications in computer graphics, four well-known authors provide in Computer Graphics: Principles and Practice the most comprehensive, authoritative, and up-to-date coverage of the field. The important algorithms in 3D and 3D graphics are detailed for easy implementation, including a close look at he more subtle special cases. There is also a thorough presentation of the mathematical principles of the mathematical principles of geometric transformations and viewing. In this book, the authors explore multiple perspectives on computer graphics: the user's, the application programmer's, the package implementer's, and the hardware designer's. For example, the issues of user-centered design are expertly addressed in three chapters on interaction techniques, dialogue design, and user interface software. Hardware concerns are examined in a chapter, contributed by Steven Molnar and Henry Fuchs, on advanced architectures for real-time,high-performance graphics. -
面向对象的C++程序设计李宁著本书以C++这种最典型的面向对象程序设计语言为媒介,全面地介绍了面向对象程序设计的基本理论、方法和技巧,同时也提供了运用C++语言解决实际问题的实际技能练习。本书每章后面都有习题,其中的部分程序设计题可安排为上机实习。本书配有光盘,其中包含了书中全部例题。本书适合于做计算机技术及应用类专业、工程技术类专业,以及其他理工科相关专业的本科或专科教材,也可作为相关技术人员的自学参考书。 -
趣味程序导学Visual C++董未名,杨柳,汤筠编著本书通过编写趣味游戏程序来引导读者学习Visual C++编程的方法和技巧,形式新颖活泼,别具一格。 全书从Visual C++语言基础知识和编制简单的程序入手,将Visual C++编程的知识点有机地分散在“幸运52 ”,“速算24”,“俄罗斯方块”,“拼图游戏”,“属于你的OICQ”等多个趣味游戏的程序设计示例中,引导读者轻松学习Visual C++编程的相关知识、编程思想及技巧,其中包括Visual C++中消息处理、多媒体、图形图像、数据库处理以及网络编程等内容。 本书以示例教学方式来组织内容,集趣味性、直观性和可操作性于一体,适用于Visual C++初学者及对游戏程序感兴趣的电脑爱好者。 -
Visual C++程序设计培训教程熊歆斌编著本书系统介绍了Visual C++的基础知识和编程技巧。全书主要分为三部分,第一部分“基础篇(第1-9章)”结合大量实例详细讲解了如何使用Visual C++ 6.0来编写Windows应用程序,以及Windows应用程序的基本特点,其中重点介绍了Windows的消息机制和MFC面向对象的实现;第二部分“提高篇(第10-16章)”介绍MFC应用程序的文档视图结构、多线程编程、ActiveX控件以及数据库的编程;第三部分“.NET篇(第17-18章)”让掌握了Visual C++ 6.0的读者迅速熟悉Visual Studio.NET的开发环境。最后的附录给出子初学者常见的问题、解答及本书练习题的参考答案。全书内容详实,重点突出,实例丰富,可操作性强,可以帮助初学者在快速入门后,通过实例练习达到 使用Visual C++编写Windows程序的中级水平。本书是Visual C++电视讲座的培训教材,适合初学者入门并进一步提高编程能力。
