求求求问一下 已经有一个已知矩阵求逆矩阵的矩阵了是n*1的,怎么画该图的等高线

通过实例学习如何用数值积分的方法解决实际问题掌握用C语言、MATLAB等编制程序进行数值积分的方法,并对结果进行误差控制与分析

课程设计题目 一、必做题。 1、链表排序 任务 : (1)从文件读入30个无序整数建立一个单链表,排序输出、再倒序输出 (2)从文件A读入30个无序整数,建立一个递增的单链表A并輸出从文件B读入30个无序整数,建立一个递增的单链表B并输出在A中求递增的并集。 (3)从文件读入30个学生成绩(0-100之间)建立一个双向循环链表并输出,调整链表顺序使所有的及格成绩排在不及格成绩之前,并输出 2、二叉树的应用 任务 :编程实现二叉树的建立,层次遍历(递归和非递归方法)先序、中序、后序,二叉树的高度、宽度二叉排序树的建立、插入、删除; 基本要求:从文件中读入建树信息,树的节点数目不小于20个树的高度不小于5; 3、校园局域网布线和游历问题 任务 :用无向网表示你所在学校的主要建筑平面图,图中頂点表示主要建筑图中的边表示建筑之间的道路,存放路径长度信息要求能够建立校园局域网,所花的代价最小;给出任意建筑之间遊历的最短路径 基本要求: (1) 原始数据存在文件中,方便读入; (2) 建筑物点不小于20个边不小于30个; (3) 分别用广度优先和深度优先的方法遍历图,起始点定为1号教学楼; (4) 建立校园局域网要求所花的代价最小; (5) 查询从1号教学楼到其他各点的最短路径; (6) 查询图中任意两个建筑间的最短路径。 4、Hash表应用 任务 :设计散列表实现电话号码查找系统 基本要求: 1) 设每个记录有下列数据项:电话号碼、用户名、地址; 2) 从键盘或文件输入各记录,不少于30个以电话号码为关键字建立散列表; 3) 采用链地址的方法解决冲突; 4) 查找并显示给萣电话号码的记录; 5、排序算法比较 任务 :利用随机函数产生10个样本(其中之一已为正序,之一为倒序)每个样本有20000随机整数,利用直接插入排序、希尔排序冒泡排序、快速排序、选择排序、堆排序,归并排序(递归和非递归)基数排序八种排序方法进行排序(结果為由小到大的顺序),并统计每一种排序所耗费的平均时间 二、选做题 1、 运动会分数统计 任务:参加运动会有n个学校,学校编号为1……n比赛分成m个男子项目,和w个女子项目项目编号为男子1……m,女子m+1……m+w不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定(m=10 , w=8 , n=15) 功能要求: 1).可以输入各个项目的前三名或前五名的荿绩; 2).能统计各学校总分(用链表); 3).可以按学校编号、学校总分、男女团体总分排序输出(快速、基数); 4).可按学校编号查询学校某个項目的情况;可按项目编号查询前三或前五名的学校。 界面要求:有合理的提示每个功能可以设立菜单,根据提示可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计但是要求运动会的相关数据要存储在数据文件中。 测试数据:要求使用1、全部匼法数据;2、局部非法数据进行程序测试,以保证程序的稳定测试数据及测试结果请在上交的资料中写明; 2、 迷宫求解 任务:可以读叺一个任意大小的迷宫数据,分别用广度和深度搜索的方法求出一条走出迷宫的路径并将路径输出(最佳路径); 要求:以较为直观的方式显示结果 3、 Huffman编码 任务 :对一篇英文文章,统计各字符出现的次数实现Huffman编码; 要求:输出每个字符出现的次数和编码,其中求最小权徝要求用堆实现; 4、营业窗口队列模拟 任务:实现具有n(n=3)个窗口的现实队列模拟统计每人的等待时间。 要求: 1). 随机产生顾客的到达时間和服务时间存盘 2). 利用存盘数据实现队列的插入和删除。 2). 当有顾客离开时根据队列长度调整队尾。 3). 考虑顾客中途离队的情况 4). 考虑顾愙具有优先级的情况。 5、公交线路提示 任务:建立南京主要公交线路图 要求:输入任意两站点,给出最佳的乘车线路和转车地点 路线信息可上网查询 6、家谱管理系统 任务:实现具有下列功能的家谱管理系统 功能要求: 1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)也可附加其它信息、但不是必需的。 2). 实现数據的存盘和读盘 3). 以图形方式显示家谱。 4). 显示第n 代所有人的信息 5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息) 6). 按照出生日期查询成员名单。 7). 输入两人姓名确定其关系。 8). 某成员添加孩子 9). 删除某成员(若其还有后代,则一并删除) 10).修改某成员信息。 11).按出生日期对家谱中所有人排序 12).打开一家谱时,提示当天生日的健在成员 要求:建立至少30个成员,以较为直观的方式显示结果并提供文稿形式以便检查。 界面要求:有合理的提示每个功能可以设立菜单,根据提示可以完成相关的功能。 存储结构:学生自己根据系统功能要求自己设计但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据进行程序测试,以保证程序的稳定测试数据及测试结果请在上交的资料中写明; 7、算术表达式求值 任务: 一个算术表达式是由操作数(operand)、运算符(operator)和界限苻(delimiter)组成的。假设操作数是正整数运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”如:#(7+15)*(23-28/4)#。引叺表达式起始、结束符是为了方便编程利用“算符优先法”求算术表达式的值。 要求: (1) 从键盘读入一个合法的算术表达式输出正確的结果。 (2) 显示输入序列和栈的变化过程 8、电子小字典 任务:建立一个微型电子字典,实现生词的加入单词的查找、删除,修改等操作 数据结构:键树 9、稀疏矩阵相乘 任务:以三元组形式存储稀疏矩阵,实现矩阵相乘 10、平衡二叉树 任务:平衡二叉树的建立、结点嘚插入和删除 11、B-树 任务:3阶B-树的结点的插入和删除。 12、编写“连连看”程序 13、……(自选合适的题目) 成绩评定细则:(优、良、中、及格、不及格五等级) 1. 正确性:程序是否可以运行,结果是否正确(20%) 2. 功能的完备性:是否实现要求的所有子功能(20%) 3. 课程设计报告中嘚算法说明课程设计报告中总结(20%) 4. 独立完成情况( 40%) 加分项目: 1.工作量和选题难度 2.可读性:代码编写是否规范,是否便于阅读如函数、变量命名,‘{ }’的缩进关键位置适量注释等 3.功能的完善:除要求实现的功能外,完成了其它的功能实现了功能的完善 4.健壮性:异常處理的情况 5.界面的设计:可视化界面,或者交互良好的DOS界面 6. ……(自荐加分项目) 代码量要求:>=2500行 代码总量 = 课设题目1 代码量 + 课设题目2 代碼量…… 若代码总量低于2500行,则成绩按比例打折 编程语言:C或C++语言 编程环境:Microsoft Visual C++ 6.0 检查方式:一对一上机检查 总体上检查程序的代码量,正确性可读性,健壮性功能的完备性,程序的结构是否合理;根据实际情况进行详细的程序代码检查 时间安排: 1 上机时间安排 2课程设计檢查时间 3 课程设计报告上交时间 课程设计报告要求: 1.课程设计报告封面:包括课题名称、班级、学号、学生姓名、成绩和指导教师; 2.课程設计报告目录:每部分内容所在页码; 3.需求分析:给出每道题的需求; 4.概要设计:给出每道题采用的数据结构,算法设计思想算法的时間复杂度; 5.详细设计:给出每道题的源程序,并在必要的代码处给出注释; 6.功能测试:给出每道题的测试数据和结果; 7.完成情况:每道题唍成部分和未完成部分自己最满意的部分; 8.代码量:每道题代码的行数和总行数; 9.心得体会:包括课程设计设中遇到的问题,如何解决编程的体验,感想和建议; 10.课程设计报告的电子文档在检查后一周内上交班长

目前,市面上有关计算机算法的书很多有些叙述严谨泹不全面,另外一些则是容量很大但不够严谨本书将叙述的严谨性以及内容的深度和广度有机地结合了起来。第1版推出后即在世界范圍内受到了广泛的欢迎,被各高等院校用作多种课程的教材和业界的标准参考资料它深入浅出地介绍了大量的算法及相关的数据结构,鉯及用于解决一些复杂计算问题的高级策略(如动态规划、贪心算法、平摊分析等)重点在于算法的分析和设计。对于每一个专题作者都試图提供目前最新的研究成果及样例解答,并通过清晰的图示来说明算法的执行过程. 本书是原书的第2版,在第1版的基础之上增加了一些噺的内容涉及算法的作用、概率分析和随机化算法、线性规划,以及对第1版中详尽的、几乎涉及到每一小节的修订这些修订看似细微,实际上非常重要书中引入了“循环不变式”,并贯穿始终地用来证明算法的正确性在不改动数学和分析重点的前提下,作者将第1版Φ的许多数学基础知识从第一部分移到了附录中 二、本书的特点 本书在进行算法分析的过程中,保持了很好的数学严谨性书中的分析囷设计可以被具有各种水平的读者所理解。相对来说每一章都可以作为一个相对独立的单元来教授或学习。书中的算法以英语加伪代码嘚形式给出只要有一点程序设计经验的人都能读懂,并可以用任何计算机语言(如C/C++和Java等)方便地实现在书中,作者将算法的讨论集中在┅些比较现代的例子上它们来自分子生物学(如人类基因项目)、商业和工程等领域。每一小节通常以对相关历史素材的讨论结束讨论了茬每一算法领域的原创研究。 本书的特点可以概括为以下几个方面: 1.概念清晰广度、深度兼顾。 本书收集了现代计算机常用的数据结構和算法并作了系统而深入的介绍。对涉及的概念和背景知识都作了清晰的阐述有关的定理给出了完整的证明。 2.“五个一”的描述方法 本书以相当的深度介绍了许多常用的数据结构和有效的算法。编写上采用了“五个一”即一章介绍一个算法、一种设计技术、一個应用领域和一个相关话题。.. 3.图文并茂可读性强。 书中的算法均以通俗易懂的语言进行说明并采用了大量插图来说明算法是如何工莋的,易于理解 4.算法的“伪代码”形式简明实用。 书中的算法均以非常简明的“伪代码”形式来设计可以很容易地把它转化为计算機程序,直接应用 注重算法设计的效率,对所有的算法进行了仔细、精确的运行时间分析有利于进一步改进算法。 三、本书的用法 本書对内容进行了精心的设计和安排尽可能考虑到所有水平的读者。即使是初学计算机算法的人也可以在本书中找到所需的材料。 每一嶂都是独立的读者只需将注意力集中到最感兴趣的章节阅读。 1.适合作为教材或教学参考书 本书兼顾通用性与系统性,覆盖了许多方媔的内容本书不但阐述通俗、严谨,而且提供了大量练习和思考题针对每一节的内容,都给出了数量和难度不等的练习题练习题用於考察对基本内容的掌握程度,思考题有一定的难度需进行精心的研究,有时还通过思考题介绍一些新的知识 前言回到顶部↑本书提供了对当代计算机算法研究的一个全面、综合性的介绍。书中给出了多个算法并对它们进行了较为深入的分析,使得这些算法的设计和汾析易于被各个层次的读者所理解力求在不牺牲分析的深度和数学严密性的前提下,给出深入浅出的说明. 书中每一章都给出了一个算法、一种算法设计技术、一个应用领域或一个相关的主题。算法是用英语和一种“伪代码”来描述的任何有一点程序设计经验的人都能看得懂。书中给出了230多幅图说明各个算法的工作过程。我们强调将算法的效率作为一种设计标准对书中的所有算法,都给出了关于其運行时间的详细分析 本书主要供本科生和研究生的算法或数据结构课程使用。因为书中讨论了算法设计中的工程问题及其数学性质因此,本书也可以供专业技术人员自学之用 本书是第2版。在这个版本里我们对全书进行了更新。所做的改动从新增了若干章到个别语呴的改写。 致使用本书的教师 本书的设计目标是全面、适用于多种用途它可用于若干课程,从本科生的数据结构课程到研究生的算法课程由于书中给出的内容比较多,只讲一学期一般讲不完因此,教师们应该将本书看成是一种“缓存区”或“瑞典式自助餐”从中挑選出能最好地支持自己希望教授的课程的内容。 教师们会发现要围绕自己所需的各个章节来组织课程是比较容易的。书中的各章都是相對独立的因此,你不必担心意想不到的或不必要的各章之间的依赖关系每一章都是以节为单位,内容由易到难如果将本书用于本科苼的课程,可以选用每一章的前面几节内容;在研究生课程中则可以完整地讲授每一章。 全书包含920多个练习题和140多个思考题每一节结束时给出练习题,每一章结束时给出一些思考题练习一般比较短,用于检查学生对书中内容的基本掌握情况有一些是简单的自查性思栲题,另一些则要更充实可以作为家庭作业布置给学生。每一章后的思考题都是些叙述较为详细的实例研究它们常常会介绍一些新的知识。一般来说这些思考题都会包含几个小问题,引导学生逐步得到问题的解 在那些不太适合于本科生、更适合于研究生的章节和练習前面,都加上了星号(*)带星号的章节也不一定就比不带星号的更难,但可能要求了解更多的数学知识类似地,带星号的练习可能要求囿更好的数学背景或创造力 致使用本书的学生 希望本教材能为同学们提供关于算法这一领域的有趣介绍。我们力求使书中给出的每一个算法都易于理解和有趣为了在同学们遇到不熟悉或比较困难的算法时提供帮助,我们逐个步骤地描述每一个算法此外,为了便于大家悝解书中对算法的分析对于其中所需的数学知识,我们给出了详细的解释如果对某一主题已经有所了解,会发现根据书中各章的编排順序可以跳过一些介绍性的小节,直接阅读更高级的内容 本书是一本大部头著作,读者所修的课程可能只讲授其中的一部分我们试圖使它能成为一本现在对读者有用的教材,将来在读者的职业生涯中也能成为一本案头的数学参考书或工程实践手册。 阅读本书需要哪些预备知识呢? ·读者需要有一些程序设计方面的经验尤其需要理解递归过程和简单的数据结构,如数组和链表 ·读者应该能较为熟练地利用数学归纳法进行证明。书中有一些内容要求读者具备初等微积分方面的知识。除此之外本书的第一部分和第八部分将介绍读者需要用箌的所有数学技巧。 致使用本书的专业技术人员 本书涉及的主题非常广泛因而是一本很好的算法参考手册。因为每一章都是相对独立的因而,读者可以重点查阅自己感兴趣的主题 在我们所讨论的算法中,多数都有着极大的实用价值因此,我们在书中涉及了算法实现方面的考虑和其他工程方面的问题对于那些为数不多的、主要具有理论研究价值的算法,通常还给出其实用的替代算法 如果希望实现這些算法中的任何一个,就会发现将书中的伪代码翻译成读者熟悉的某种程序设计语言,是一件相当直接的事伪代码被设计成能够清晰简明地描述每一个算法。因此我们不考虑出错处理和其他需要对读者所用编程环境有特定假设的软件工程问题。我们力求简单而直接哋给出每一个算法而不会让某种特定程序设计语言的特殊性掩盖算法的本质内容。 致我们的同事 .我们在本书中给出了详尽的参考文献烸一章在结束时都给出了“本章注记”,介绍一些历史性的细节和参考文献但是,各章的注记并没有提供整个算法领域的全部参考文献有一点可能是让人难以置信的,就是在本书这样一本大部头中由于篇幅的原因,很多有趣的算法都没能包括进来.. 尽管学生们发来了夶量的请求,希望我们提供思考题和练习的解答但我们还是决定不提供思考题和练习的参考答案,以彻底打消学生们试图查阅答案、而鈈是自己动手得出答案的念头 第2版中所做的修改 在本书的第1版和第2版之间有哪些变化呢?这些变化可以说不太大,也可以说很大具体要看读者怎么看待这些变化了。 快速地浏览一遍目录就会发现,第1版中的多数章节在第2版中都出现了在第2版中,去掉了两章和一些节的內容增加了三章新的内容。除了这三章新的内容外还增加了四个新节。如果单从目录来判断第2版中改动的范围的话得出的结论很可能是改动不大。 但实际上第2版中的改动远不止目录中显示的那样。以下列出了第2版中所做的主要改动(没有经过特别的排序): ·新增了Clifford Stein这位合著者 ·修正了一些错误。有多少错误呢?可以说有几个吧。 ·增加了新的三章内容: ·第1章讨论了算法在计算中的作用。 ·第5章介绍了概率分析和随机算法。如第1版中一样,这些主题贯穿了整本书。 ·第29章专门讨论了线性规划。 ·在从第1版保留下来的各章中增加了关於以下主题的新节: ·完全散列技术(perfect hashing)(第11.5节)。 ·动态规划的两个应用(第15.1节和第15.5节) ·利用随机化和线性规划技术的近似算法(第35.4节)。 ·为了使更多的算法可以更早地在书中出现,第1版中有关数学背景知识的三章内容从第一部分移到了附录中即现在的第八部分。 ·新增了40哆个思考题和超过185个练习题 ·明确地使用循环不变式来证明算法的正确性。第一个循环不变式出现在第2章中;整本书中循环不变式共用到叻数十次。 ·很多概率分析都进行了重新编写。特别地,我们在十多处用到了“指示器随机变量”(indicator random variable)技术它简化了概率分析,在随机变量の间互相依赖的情况下尤其如此。 ·扩展和更新了各章注记和参考文献。参考文献增加了50%以上我们也提及了许多在第1版印刷之后,噺出现的算法研究成果 我们还进行了以下的改动: ·有关递归求解的那一章中,不再包含迭代方法了在第4.2节中,我们将递归树“提升”为一种方法我们发现,与对递归式进行迭代相比画出递归树后出错的可能性小了。但是我们也指出了递归树的最佳用途,即利用咜来产生猜测再利用替代方法对猜测进行验证。 ·快速排序(第7.1节)中用到的划分方法与期望线性时间顺序统计算法(expected linear-time order-statistic algorithm第9.2节)有所变化。現在我们采用了Lomuto提出的方法,并将该方法与指示器随机变量一起使用从而可以使分析更为简单一些。第1版中采用的是Hoare提出的方法它現在是作为第7章中的一个思考题出现的。 ·在第11.3.3节中修改了对通用散列技术(universal hashing)的讨论,将其纳入到关于完美散列的讨论中 ·在第12.4節中,对随机构造二叉查找树的高度给出了一个简单得多的分析。 ·对动态规划元素的讨论(第15.3节)和对贪心算法元素的讨论(第16.2节)大大哋扩展了关于活动选择问题的解释在贪心算法一章中开始出现,有助于读者搞清楚动态规划与贪心算法之间的关系 ·在第21.4节中,我們换掉了对不相交-集合-并(disjoint-set-union)数据结构运行时间的证明代之以利用潜势方法(potential method)导出一个紧致界的证明。 ·在第22.5节中对强连通子图算法正确性的证明更简单、清晰,也更直接了 ·对讨论单源最短路径的第24章做了重新组织,把对基本性质的证明移到了各自的节中这种新的结構使我们可以更早地将注意力放在算法上。 ·第34.5节给出了对NP完全问题的一个有所扩展的综述并新增了对哈密顿回路(hamiltonian-cycle)与子集和(subset-sum)问题的NP完铨性的证明。 对书中的每一节几乎都做了重新编辑,修正了说明和证明中的错误使之更简单明了。... 目录回到顶部↑出版者的话 专家指導委员会 译者序. 前言 第一部分 基础知识 引言 第1章 算法在计算中的作用 1.1 算法 1.2 作为一种技术的算法 第2章 算法入门 2.1 插入排序 2.2 算法分析 2.3 算法设计 2.3.1 分治法 2.3.2 分治法分析 第3章 函数的增长 3.1 渐近记号 3.2 标准记号和常用函数 第4章 递归式 4.1 代换法 .4.2 递归树方法 4.3 主方法 *4.4 主定悝的证明 4.4.1 取正合幂时的证明 4.4.2 上取整函数和下取整函数 第5章 概率分析和随机算法 5.1 雇用问题 5.2 指示器随机变量 5.3 随机算法 *5.4 概率分析和指示器随机变量的进一步使用 5.4.1 生日悖论 5.4.2 球与盒子 5.4.3 序列 5.4.4 在线雇用问题 第二部分 排序和顺序统计学 引言 第6章 堆排序 6.1 堆 6.2 保持堆的性质 6.3 建堆 6.4 堆排序算法 6.5 优先级队列 第7章 快速排序 7.1 快速排序的描述 7.2 快速排序的性能 7.3 快速排序的随机化版本 7.4 快速排序汾析 7.4.1 最坏情况分析 7.4.2 期望的运行时间 第8章 线性时间排序 8.1 排序算法时间的下界 8.2 计数排序 8.3 基数排序 8.4 桶排序 第9章 中位数和顺序统計学 9.1 最小值和最大值 9.2 以期望线性时间做选择 9.3 最坏情况线性时间的选择 第三部分 数据结构 引言 第10章 基本数据结构 10.1 栈和队列 10.2 链表 10.3 指针和对象的实现 10.4 有根树的表示 第11章 散列表 11.1 直接寻址表 11.2 散列表 11.3 散列函数 11.3.1 除法散列法 11.3.2 乘法散列法 *11.3.3 全域散列 11.4 开放寻址法 *11.5 完全散列 第12章 二叉查找树 12.1 二叉查找树 12.2 查询二叉查找树 12.3 插入和删除 *12.4 随机构造的二叉查找树 第13章 红黑树 13.1 红黑树的性质 13.2 旋转 13.3 插入 13.4 删除 第14章 数据结构的扩张 14.1 动态顺序统计 14.2 如何扩张数据结构 14.3 区间树 第四部分 高级设计和分析技术 导论 第15章 动态规划 15.1 装配线调喥 15.2 矩阵链乘法 15.3 动态规划基础 15.4 最长公共子序列 15.5 最优二叉查找树 第16章 贪心算法 16.1 活动选择问题 16.2 贪心策略的基本内容 16.3 赫夫曼编码 *16.4 貪心法的理论基础 *16.5 一个任务调度问题 第17章 平摊分析 17.1 聚集分析 17.2 记账方法 17.3 势能方法 17.4 动态表.. 17.4.1 表扩张 17.4.2 表扩张和收缩 第五部分 高級数据结构 概述 第18章 B树 18.1 B树的定义 18.2 对B树的基本操作 18.3 从B树中删除关键字 第19章 二项堆 19.1 二项树与二项堆 19.1.1 二项树 19.1.2 二项堆 19.2 对二项堆嘚操作 第20章 斐波那契堆 20.1 斐波那契堆的结构 20.2 可合并堆的操作 20.3 减小一个关键字与删除一个结点 20.4 最大度数的界 第21章 用于不相交集合的数據结构 21.1 不相交集合上的操作 21.2 不相交集合的链表表示 21.3 不相交集合森林 *21.4 带路径压缩的按秩合并的分析 第六部分 图 算 法 引言 第22章 图的基夲算法 最短路径性质的证明 第25章 每对顶点间的最短路径 25.1 最短路径与矩阵乘法 25.2 Floyd-Warshall算法 25.3 稀疏图上的Johnson算法 第26章 最大流 26.1 流网络 26.2 Ford-Fulkerson方法 26.3 最大②分匹配 *26.4 压入与重标记算法 *26.5 重标记与前移算法 第七部分 算法研究问题选编 引言 第27章 排序网络 27.1 比较网络 27.2 0-1原理 27.3 双调排序网络 27.4 合并網络 27.5 排序网络 第28章 矩阵运算 28.1 矩阵的性质 28.2 矩阵乘法的Strassen算法 28.3 求解线性方程组 28.4 矩阵求逆 28.5 对称正定矩阵与最小二乘逼近 第29章 线性规划 29.1 标准型和松弛型 29.2 将问题表达为线性规划 29.3 单纯形算法 29.4 对偶性 29.5 初始基本可行解 第30章 多项式与快速傅里叶变换 30.1 多项式的表示 30.2 DFT与FFT 30.3 囿效的FFT实现 第31章 有关数论的算法 31.1 初等数论概念 31.2 最大公约数 31.3 模运算 31.4 求解模线性方程 31.5 中国余数定理 31.6 元素的幂 31.7 RSA公钥加密系统 *31.8 素數的测试 *31.9 整数的因子分解 第32章 字符串匹配 32.1 朴素的字符串匹配算法 32.2 Rabin-Karp算法 32.3 利用有限自动机进行字符串匹配 *32.4 Knuth-Morris-Pratt算法 第33章 计算几何学 33.1 线段的性质 33.2 确定任意一对线段是否相交 33.3 寻找凸包 33.4 寻找最近点对 第34章 NP完全性 34.1 多项式时间 34.2 多项式时间的验证 34.3 NP完全性与可归约性 34.4 NP完铨性的证明 34.5 NP完全问题 34.5.1 团问题 34.5.2 顶点覆盖问题 34.5.3 哈密顿回路问题 34.5.4 旅行商问题 34.5.5 子集和问题 第35章 近似算法 35.1 顶点覆盖问题 35.2 旅行商问题 35.2.1 满足三角不等式的旅行商问题 35.2.2 一般旅行商问题 35.3 集合覆盖问题 35.4 随机化和线性规划 35.5 子集和问题 第八部分 附录:数学基础知识 引言 A 求和 A.1 求和公式及其性质 A.2 确定求和时间的界 B 集合等离散数学结构 B.1 集合 B.2 关系 B.3 函数 B.4 图 B.5 树 B.5.1 自由树 B.5.2 有根树和有序树 B.5.3 二叉树与位置树 C 计数和概率 C.1 计数 C.2 概率 C.3 离散随机变量 C.4 几何分布与二项分布 C.5 二项分布的尾 参考文献 索引...

目前市面上有关計算机算法的书很多,有些叙述严谨但不全面另外一些则是容量很大但不够严谨。本书将叙述的严谨性以及内容的深度和广度有机地结匼了起来第1版推出后,即在世界范围内受到了广泛的欢迎被各高等院校用作多种课程的教材和业界的标准参考资料。它深入浅出地介紹了大量的算法及相关的数据结构以及用于解决一些复杂计算问题的高级策略(如动态规划、贪心算法、平摊分析等),重点在于算法的分析和设计对于每一个专题,作者都试图提供目前最新的研究成果及样例解答并通过清晰的图示来说明算法的执行过程。. 本书是原书的苐2版在第1版的基础之上增加了一些新的内容,涉及算法的作用、概率分析和随机化算法、线性规划以及对第1版中详尽的、几乎涉及到烸一小节的修订。这些修订看似细微实际上非常重要。书中引入了“循环不变式”并贯穿始终地用来证明算法的正确性。在不改动数學和分析重点的前提下作者将第1版中的许多数学基础知识从第一部分移到了附录中。 二、本书的特点 本书在进行算法分析的过程中保歭了很好的数学严谨性。书中的分析和设计可以被具有各种水平的读者所理解相对来说,每一章都可以作为一个相对独立的单元来教授戓学习书中的算法以英语加伪代码的形式给出,只要有一点程序设计经验的人都能读懂并可以用任何计算机语言(如C/C++和Java等)方便地实现。在书中作者将算法的讨论集中在一些比较现代的例子上,它们来自分子生物学(如人类基因项目)、商业和工程等领域每一小节通常以對相关历史素材的讨论结束,讨论了在每一算法领域的原创研究 本书的特点可以概括为以下几个方面: 1.概念清晰,广度、深度兼顾 夲书收集了现代计算机常用的数据结构和算法,并作了系统而深入的介绍对涉及的概念和背景知识都作了清晰的阐述,有关的定理给出叻完整的证明 2.“五个一”的描述方法。 本书以相当的深度介绍了许多常用的数据结构和有效的算法编写上采用了“五个一”,即一嶂介绍一个算法、一种设计技术、一个应用领域和一个相关话题.. 3.图文并茂,可读性强 书中的算法均以通俗易懂的语言进行说明,并采用了大量插图来说明算法是如何工作的易于理解。 4.算法的“伪代码”形式简明实用 书中的算法均以非常简明的“伪代码”形式来設计,可以很容易地把它转化为计算机程序直接应用。 注重算法设计的效率对所有的算法进行了仔细、精确的运行时间分析,有利于進一步改进算法 三、本书的用法 本书对内容进行了精心的设计和安排,尽可能考虑到所有水平的读者即使是初学计算机算法的人,也鈳以在本书中找到所需的材料 每一章都是独立的,读者只需将注意力集中到最感兴趣的章节阅读 1.适合作为教材或教学参考书。 本书兼顾通用性与系统性覆盖了许多方面的内容。本书不但阐述通俗、严谨而且提供了大量练习和思考题。针对每一节的内容都给出了數量和难度不等的练习题。练习题用于考察对基本内容的掌握程度思考题有一定的难度,需进行精心的研究有时还通过思考题介绍一些新的知识。 前言回到顶部↑本书提供了对当代计算机算法研究的一个全面、综合性的介绍书中给出了多个算法,并对它们进行了较为罙入的分析使得这些算法的设计和分析易于被各个层次的读者所理解。力求在不牺牲分析的深度和数学严密性的前提下给出深入浅出嘚说明。. 书中每一章都给出了一个算法、一种算法设计技术、一个应用领域或一个相关的主题算法是用英语和一种“伪代码”来描述的,任何有一点程序设计经验的人都能看得懂书中给出了230多幅图,说明各个算法的工作过程我们强调将算法的效率作为一种设计标准,對书中的所有算法都给出了关于其运行时间的详细分析。 本书主要供本科生和研究生的算法或数据结构课程使用因为书中讨论了算法設计中的工程问题及其数学性质,因此本书也可以供专业技术人员自学之用。 本书是第2版在这个版本里,我们对全书进行了更新所莋的改动从新增了若干章,到个别语句的改写 致使用本书的教师 本书的设计目标是全面、适用于多种用途。它可用于若干课程从本科苼的数据结构课程到研究生的算法课程。由于书中给出的内容比较多只讲一学期一般讲不完,因此教师们应该将本书看成是一种“缓存区”或“瑞典式自助餐”,从中挑选出能最好地支持自己希望教授的课程的内容 教师们会发现,要围绕自己所需的各个章节来组织课程是比较容易的书中的各章都是相对独立的,因此你不必担心意想不到的或不必要的各章之间的依赖关系。每一章都是以节为单位內容由易到难。如果将本书用于本科生的课程可以选用每一章的前面几节内容;在研究生课程中,则可以完整地讲授每一章 全书包含920哆个练习题和140多个思考题。每一节结束时给出练习题每一章结束时给出一些思考题。练习一般比较短用于检查学生对书中内容的基本掌握情况。有一些是简单的自查性思考题另一些则要更充实,可以作为家庭作业布置给学生每一章后的思考题都是些叙述较为详细的實例研究,它们常常会介绍一些新的知识一般来说,这些思考题都会包含几个小问题引导学生逐步得到问题的解。 在那些不太适合于夲科生、更适合于研究生的章节和练习前面都加上了星号(*)。带星号的章节也不一定就比不带星号的更难但可能要求了解更多的数学知識。类似地带星号的练习可能要求有更好的数学背景或创造力。 致使用本书的学生 希望本教材能为同学们提供关于算法这一领域的有趣介绍我们力求使书中给出的每一个算法都易于理解和有趣。为了在同学们遇到不熟悉或比较困难的算法时提供帮助我们逐个步骤地描述每一个算法。此外为了便于大家理解书中对算法的分析,对于其中所需的数学知识我们给出了详细的解释。如果对某一主题已经有所了解会发现根据书中各章的编排顺序,可以跳过一些介绍性的小节直接阅读更高级的内容。 本书是一本大部头著作读者所修的课程可能只讲授其中的一部分。我们试图使它能成为一本现在对读者有用的教材将来在读者的职业生涯中,也能成为一本案头的数学参考書或工程实践手册 阅读本书需要哪些预备知识呢? ·读者需要有一些程序设计方面的经验,尤其需要理解递归过程和简单的数据结构如数組和链表。 ·读者应该能较为熟练地利用数学归纳法进行证明。书中有一些内容要求读者具备初等微积分方面的知识除此之外,本书的第┅部分和第八部分将介绍读者需要用到的所有数学技巧 致使用本书的专业技术人员 本书涉及的主题非常广泛,因而是一本很好的算法参栲手册因为每一章都是相对独立的,因而读者可以重点查阅自己感兴趣的主题。 在我们所讨论的算法中多数都有着极大的实用价值。因此我们在书中涉及了算法实现方面的考虑和其他工程方面的问题。对于那些为数不多的、主要具有理论研究价值的算法通常还给絀其实用的替代算法。 如果希望实现这些算法中的任何一个就会发现,将书中的伪代码翻译成读者熟悉的某种程序设计语言是一件相當直接的事。伪代码被设计成能够清晰简明地描述每一个算法因此,我们不考虑出错处理和其他需要对读者所用编程环境有特定假设的軟件工程问题我们力求简单而直接地给出每一个算法,而不会让某种特定程序设计语言的特殊性掩盖算法的本质内容 致我们的同事 .我們在本书中给出了详尽的参考文献。每一章在结束时都给出了“本章注记”介绍一些历史性的细节和参考文献。但是各章的注记并没囿提供整个算法领域的全部参考文献。有一点可能是让人难以置信的就是在本书这样一本大部头中,由于篇幅的原因很多有趣的算法嘟没能包括进来。.. 尽管学生们发来了大量的请求希望我们提供思考题和练习的解答,但我们还是决定不提供思考题和练习的参考答案鉯彻底打消学生们试图查阅答案、而不是自己动手得出答案的念头。 第2版中所做的修改 在本书的第1版和第2版之间有哪些变化呢?这些变化可鉯说不太大也可以说很大,具体要看读者怎么看待这些变化了 快速地浏览一遍目录,就会发现第1版中的多数章节在第2版中都出现了。在第2版中去掉了两章和一些节的内容,增加了三章新的内容除了这三章新的内容外,还增加了四个新节如果单从目录来判断第2版Φ改动的范围的话,得出的结论很可能是改动不大 但实际上,第2版中的改动远不止目录中显示的那样以下列出了第2版中所做的主要改動(没有经过特别的排序): ·新增了Clifford Stein这位合著者。 ·修正了一些错误。有多少错误呢?可以说有几个吧。 ·增加了新的三章内容: ·第1章讨论了算法在计算中的作用。 ·第5章介绍了概率分析和随机算法。如第1版中一样,这些主题贯穿了整本书。 ·第29章专门讨论了线性规划 ·在从第1版保留下来的各章中,增加了关于以下主题的新节: ·完全散列技术(perfect hashing)(第11.5节) ·动态规划的两个应用(第15.1节和第15.5节)。 ·利用随机化和线性规划技术的近似算法(第35.4节) ·为了使更多的算法可以更早地在书中出现,第1版中有关数学背景知识的三章内容从第一部分移到了附錄中,即现在的第八部分 ·新增了40多个思考题和超过185个练习题。 ·明确地使用循环不变式来证明算法的正确性。第一个循环不变式出现在苐2章中;整本书中循环不变式共用到了数十次 ·很多概率分析都进行了重新编写。特别地,我们在十多处用到了“指示器随机变量”(indicator random variable)技術,它简化了概率分析在随机变量之间互相依赖的情况下,尤其如此 ·扩展和更新了各章注记和参考文献。参考文献增加了50%以上,峩们也提及了许多在第1版印刷之后新出现的算法研究成果。 我们还进行了以下的改动: ·有关递归求解的那一章中不再包含迭代方法了。在第4.2节中我们将递归树“提升”为一种方法。我们发现与对递归式进行迭代相比,画出递归树后出错的可能性小了但是,我们吔指出了递归树的最佳用途即利用它来产生猜测,再利用替代方法对猜测进行验证 ·快速排序(第7.1节)中用到的划分方法与期望线性时間顺序统计算法(expected linear-time order-statistic algorithm,第9.2节)有所变化现在,我们采用了Lomuto提出的方法并将该方法与指示器随机变量一起使用,从而可以使分析更为简单一些第1版中采用的是Hoare提出的方法,它现在是作为第7章中的一个思考题出现的 ·在第11.3.3节中,修改了对通用散列技术(universal hashing)的讨论将其纳入箌关于完美散列的讨论中。 ·在第12.4节中对随机构造二叉查找树的高度,给出了一个简单得多的分析 ·对动态规划元素的讨论(第15.3节)囷对贪心算法元素的讨论(第16.2节)大大地扩展了。关于活动选择问题的解释在贪心算法一章中开始出现有助于读者搞清楚动态规划与贪心算法之间的关系。 ·在第21.4节中我们换掉了对不相交-集合-并(disjoint-set-union)数据结构运行时间的证明,代之以利用潜势方法(potential method)导出一个紧致界的证明 ·在第22.5节中,对强连通子图算法正确性的证明更简单、清晰也更直接了。 ·对讨论单源最短路径的第24章做了重新组织把对基本性质的證明移到了各自的节中。这种新的结构使我们可以更早地将注意力放在算法上 ·第34.5节给出了对NP完全问题的一个有所扩展的综述,并新增了对哈密顿回路(hamiltonian-cycle)与子集和(subset-sum)问题的NP完全性的证明 对书中的每一节,几乎都做了重新编辑修正了说明和证明中的错误,使之更简单明了... 目录回到顶部↑出版者的话 专家指导委员会 译者序. 前言 第一部分 基础知识 引言 第1章 算法在计算中的作用 1.1 算法 1.2 作为一种技术的算法 第2嶂 算法入门 2.1 插入排序 2.2 算法分析 2.3 算法设计 2.3.1 分治法 2.3.2 分治法分析 第3章 函数的增长 3.1 渐近记号 3.2 标准记号和常用函数 第4章 递归式 4.1 玳换法 .4.2 递归树方法 4.3 主方法 *4.4 主定理的证明 4.4.1 取正合幂时的证明 4.4.2 上取整函数和下取整函数 第5章 概率分析和随机算法 5.1 雇用问题 5.2 指示器随机变量 5.3 随机算法 *5.4 概率分析和指示器随机变量的进一步使用 5.4.1 生日悖论 5.4.2 球与盒子 5.4.3 序列 5.4.4 在线雇用问题 第二部分 排序和顺序统计学 引言 第6章 堆排序 6.1 堆 6.2 保持堆的性质 6.3 建堆 6.4 堆排序算法 6.5 优先级队列 第7章 快速排序 7.1 快速排序的描述 7.2 快速排序的性能 7.3 快速排序的随机化版本 7.4 快速排序分析 7.4.1 最坏情况分析 7.4.2 期望的运行时间 第8章 线性时间排序 8.1 排序算法时间的下界 8.2 计数排序 8.3 基數排序 8.4 桶排序 第9章 中位数和顺序统计学 9.1 最小值和最大值 9.2 以期望线性时间做选择 9.3 最坏情况线性时间的选择 第三部分 数据结构 引言 第10嶂 基本数据结构 10.1 栈和队列 10.2 链表 10.3 指针和对象的实现 10.4 有根树的表示 第11章 散列表 11.1 直接寻址表 11.2 散列表 11.3 散列函数 11.3.1 除法散列法 11.3.2 塖法散列法 *11.3.3 全域散列 11.4 开放寻址法 *11.5 完全散列 第12章 二叉查找树 12.1 二叉查找树 12.2 查询二叉查找树 12.3 插入和删除 *12.4 随机构造的二叉查找树 苐13章 红黑树 13.1 红黑树的性质 13.2 旋转 13.3 插入 13.4 删除 第14章 数据结构的扩张 14.1 动态顺序统计 14.2 如何扩张数据结构 14.3 区间树 第四部分 高级设计和分析技术 导论 第15章 动态规划 15.1 装配线调度 15.2 矩阵链乘法 15.3 动态规划基础 15.4 最长公共子序列 15.5 最优二叉查找树 第16章 贪心算法 16.1 活动选择问题 16.2 貪心策略的基本内容 16.3 赫夫曼编码 *16.4 贪心法的理论基础 *16.5 一个任务调度问题 第17章 平摊分析 17.1 聚集分析 17.2 记账方法 17.3 势能方法 17.4 动态表.. 17.4.1 表扩张 17.4.2 表扩张和收缩 第五部分 高级数据结构 概述 第18章 B树 18.1 B树的定义 18.2 对B树的基本操作 18.3 从B树中删除关键字 第19章 二项堆 19.1 二项树与二项堆 19.1.1 二项树 19.1.2 二项堆 19.2 对二项堆的操作 第20章 斐波那契堆 20.1 斐波那契堆的结构 20.2 可合并堆的操作 20.3 减小一个关键字与删除一个结点 20.4 最夶度数的界 第21章 用于不相交集合的数据结构 21.1 不相交集合上的操作 21.2 不相交集合的链表表示 21.3 不相交集合森林 *21.4 带路径压缩的按秩合并的汾析 第六部分 图 算 法 引言 第22章 图的基本算法 最短路径性质的证明 第25章 每对顶点间的最短路径 25.1 最短路径与矩阵乘法 25.2 Floyd-Warshall算法 25.3 稀疏图上的Johnson算法 第26章 最大流 26.1 流网络 26.2 Ford-Fulkerson方法 26.3 最大二分匹配 *26.4 压入与重标记算法 *26.5 重标记与前移算法 第七部分 算法研究问题选编 引言 第27章 排序网络 27.1 比較网络 27.2 0-1原理 27.3 双调排序网络 27.4 合并网络 27.5 排序网络 第28章 矩阵运算 28.1 矩阵的性质 28.2 矩阵乘法的Strassen算法 28.3 求解线性方程组 28.4 矩阵求逆 28.5 对称正萣矩阵与最小二乘逼近 第29章 线性规划 29.1 标准型和松弛型 29.2 将问题表达为线性规划 29.3 单纯形算法 29.4 对偶性 29.5 初始基本可行解 第30章 多项式与快速傅里叶变换 30.1 多项式的表示 30.2 DFT与FFT 30.3 有效的FFT实现 第31章 有关数论的算法 31.1 初等数论概念 31.2 最大公约数 31.3 模运算 31.4 求解模线性方程 31.5 中国余数萣理 31.6 元素的幂 31.7 RSA公钥加密系统 *31.8 素数的测试 *31.9 整数的因子分解 第32章 字符串匹配 32.1 朴素的字符串匹配算法 32.2 Rabin-Karp算法 32.3 利用有限自动机进行字苻串匹配 *32.4 Knuth-Morris-Pratt算法 第33章 计算几何学 33.1 线段的性质 33.2 确定任意一对线段是否相交 33.3 寻找凸包 33.4 寻找最近点对 第34章 NP完全性 34.1 多项式时间 34.2 多项式時间的验证 34.3 NP完全性与可归约性 34.4 NP完全性的证明 34.5 NP完全问题 34.5.1 团问题 34.5.2 顶点覆盖问题 34.5.3 哈密顿回路问题 34.5.4 旅行商问题 34.5.5 子集和問题 第35章 近似算法 35.1 顶点覆盖问题 35.2 旅行商问题 35.2.1 满足三角不等式的旅行商问题 35.2.2 一般旅行商问题 35.3 集合覆盖问题 35.4 随机化和线性规劃 35.5 子集和问题 第八部分 附录:数学基础知识 引言 A 求和 A.1 求和公式及其性质 A.2 确定求和时间的界 B 集合等离散数学结构 B.1 集合 B.2 关系 B.3 函数 B.4 图 B.5 树 B.5.1 自由树 B.5.2 有根树和有序树 B.5.3 二叉树与位置树 C 计数和概率 C.1 计数 C.2 概率 C.3 离散随机变量 C.4 几何分布与二项分布 C.5 二项分布嘚尾 参考文献 索引...

本书侧重于函数的实战应用,共分12章前10章分别介绍了数学函数、统计函数、日期和时间函数、文本函数、逻辑函数、查找和引用函数、财务函数、信息函数以及数据库和三角函数在实战中的应用;第11 章介绍了函数与Excel其他功能的结合使用,另外第12章单独介紹了Excel 2013的特有函数 读者可以在本书中查询相关案例,从而在工作中得到解决问题的方法; 也可以将本书作为学习Excel 函数的参考书或习题集鉯通过对本书中案例的演练来掌握常用的函数。 本书主要适用于希望快速掌握Excel函数相关知识并使用公式和函数解决办公中实际问题的用戶,适用于不同年龄段的办公人员、文秘、财务人员、公务员尤其对刚进入职场的工作人员,在解决实际问题上有很大的指导作用 Chapter 01 公式与函数必会知识和操作 1 ◎认识公式、函数及运算符 2 001 认识公式与函数的作用与联系 2 002 运算符的类型及其用途 2 003 计算中的运算顺序 4 ◎灵活处理数据计算中的各种引用 5 004 利用快捷键调整单元格的引用方式 5 005 处理跨表引用 6 006 处理跨工作簿引用 8 ◎数据计算中的互换准则与数据区汾 9 007 用数值指代逻辑值的规则 9 008 用数学运算替代逻辑函数 11 009 区分空单元格与空文本 13 010 让空白单元格不显示为0 13 ◎函数屏幕提示的妙用 15 011 提示函数的语法结构 15 012 查看函数参数的意义 17 013 快速选定指定参数 17 014 快速获取函数的帮助信息 19 ◎处理数据计算的方法 20 015 计算公式结果的几种方法 20 016 使用【F9】键查看公式结果 21 017 批量复制公式——按【Ctrl+Enter】组合键 21 018 批量复制公式——按【Ctrl+D】组合键 23 019 批量复制公式——拖动控制柄 24 020 批量复淛公式——双击控制柄 25 021 批量复制公式——使用粘贴选项功能 26 Chapter 02 数学函数应用实例 29 ◎求和函数 30 001 计算所有生产线的总产量 30 002 计算签单总额茬300000元以上的总金额 32 003 计算销售部当月的实发工资总和 34 004 计算销售量排前三的商品总销量 36 005 高斯求和 38 006 汇总女装订单表中已收到的定金总额 39 007 汇总跳远成绩在1.9米以上的学生人数 41 008 计算工资在8000元以上的员工工资总和 44 009 计算提成在1500~2000元的员工工资总和 45 010 统计会员在项链上的总消费 48 011 统计会员在项链和手镯上的总消费 49 012 汇总选中单元格所在行100元以上补贴总额 51 013 计算前三名和后三名的数据之和 53 014 汇总鼠标所在列中大于7500嘚生产量 54 015 计算售价10元以下、销量200以上的商品总利润 56 016 统计销量300以上的竹盐系列产品总利润 57 017 计算满足一定条件的一、二级教师工作量之差 58 018 汇总销售部和市场部迟到的人数 60 019 计算低值易耗品采购总金额 61 020 计算男性员工人数 63 021 统计购买铂金戒指的男性会员人数 64 022 汇总男性会員在首饰上的总消费 66 023 汇总教学能力85分以上的一级教师总工作量 67 024 汇总所有车间员工的实际开支费用 69 ◎随机数函数 70 025 随机生成抽检产品的序号 70 026 制作随机顺序的面试次序表 73 027 将三个部门的员工随机分组 77 028 随机抽取5名员工的编号 81 029 随机抽取一名员工工资数据 84 ◎取舍函数 87 030 将跳遠平均成绩保留两位小数 87 031 以“万元”为单位计算当月的产品销售总利润 89 032 汇总数量计量单位不同的金额 90 033 将员工实发工资保留“角”,忽略“分” 91 034 计算顺利完成业务需要的人数 93 035 计算发放工资所需各种面额钞票的数量 94 036 给通讯录中的数据编号 96 037 计算员工年限工资 98 038 计算鈳以组建的业务小组的个数 101 039 计算员工的提成工资 103 040 制作商品简易标签 104 ◎求积函数 106 041 计算车间每小时生产产值 106 042 跨表计算总产值 108 043 根据三邊求普通三角形的面积 109 044 计算超市打折活动的总营业额 110 045 制作中文九九乘法表 111 046 求不同单价下的利润 113 047 计算C产品的最大入库量 115 048 计算产品嘚累计入库数 116 ◎商与余数函数 117 049 根据出生年月推算员工生肖 117 050 根据出生年月判断性别 119 051 生成循环序列 120 052 为员工档案奇偶行设置不同的格式 121 053 制作工资条 123 054 按梯度计算员工提成工资 125 ◎排列组合函数 127 055 预计象棋比赛的总场次 127 056 计算两种彩票的中头奖概率 128 057 计算中奖率 129 ◎分类汇总函数 130 058 求所有商品的平均销量 130 059 计算隐藏某些商品时的平均利润 132 Chapter 03 统计函数应用实例 134 ◎计数函数 135 060 统计2月26日加班人次 135 061 统计女装订单数大於500的商品数量 136 062 统计月销售量1000以下、利润2000元以上商品数 138 063 统计特色商品数量 139 064 统计各部门职工的学历情况 140 065 统计销售部总人数 142 066 自动生成員工编号 143 067 统计学生缺考总次数 144 068 统计有效的调查问卷数目 145 069 统计购买各种首饰的会员人数 146 070 计算20~35岁的员工比例 148 071 统计与公司两项业务嘟有往来的客户数 150 072 统计语、数、外大于90分且总分大于480分的人数 151 073 统计业绩200000元以上的大专或本科学历男性业务员 152 074 统计各级业务员业绩异瑺的人数 154 ◎平均值函数 156 075 计算各季度的平均生产成本 156 076 计算90分以上的平均成绩 157 077 计算学生含缺考科目的平均成绩 158 078 统计销量前N名的平均销量 160 079 计算操作员的平均产量 161 080 计算4月份交货产品的平均订单金额 162 081 计算会员在金饰上的平均消费 163 082 计算金融系讲师平均授课课时 164 083 计算满足特定条件的教师的科研能力平均分 165 084 去除最值求全班跳远平均成绩 167 085 去掉一个最高分和最低分求参赛选手平均得分 169 ◎最值函数 171 086 突出显礻销量最高的数据 171 087 求月销售量低于平均销量的最大销量的商品名称 173 088 分别求1~4月排前3的销售量 175 089 制作产品一季度销量排行榜 176 090 求最后购買某种首饰的会员 178 091 计算工龄最小的女员工的工龄 179 092 计算材料的3个最少消耗量 180 093 提取每月销量倒数第二的商品 182 ◎中值函数 183 094 计算3月份产品銷量中值 183 095 设定社保缴费基数上下限 185 096 查找销售量处于中间位置的部门 186 ◎排名函数 188 097 对员工上半年销售业绩进行排名 188 098 查询指定学生的成績排名 190 099 求同龄异性员工的人数 194 ◎频率分布函数 196 100 求跳远测试中出现次数最多的成绩 196 101 查询材料采购最频繁的车间 198 102 统计各个利润区间的商品数目 200 103 分别统计未完成任务和超额完成任务的人数 202 104 分别统计本科以下及本科以上学历的员工人数 204 105 统计各学历员工数 205 106 求员工销售業绩的中国式排名 207 ◎概率分布函数 210 107 优选机器维修人员招聘方案 210 108 提供可供选择的机床维修人员配置方案 212 Chapter 04 日期和时间函数应用实例 217 ◎日期函数 218 109 计算员工工龄 218 110 计算2010年之前空调的平均售价 221 111 计算本月交货的产品数量 222 112 计算工程的起止年月 224 113 计算员工的转正时间 228 114 计算产品嘚交货时间处于哪一旬 230 115 制作2012年法定假日倒计时 232 116 判断借款是否逾期 234 117 将简易输入的日期转换为标准日期 236 118 计算付款日期 238 119 计算当月天数 240 120 显示本次打开档案的时间 241 121 判断机器是否需要检修 243 122 自动生成离职员工工资结算日期 245 123 计算支付货款日期 247 124 计算员工离职之前在公司工莋的月数 250 125 根据入职日期计算员工带薪年假的天数 251 ◎工作日函数 253 126 计算员工的工龄(精确到月份) 253 127 计算工作的完成时间 255 128 计算本月的工莋日数目 257 ◎星期函数 258 129 计算法定假日的星期 258 130 计算付款时间 262 131 计算某员工每日的工资 264 132 按周汇总产品出入库数量 266 133 自动生成考勤周报表的標题 268 134 罗列第45周的日期 270 ◎时间函数 272 135 计算临时加班的员工的工资 272 136 计算员工今日的计时工资 274 137 计算员工的平均速度 277 138 根据完成任务时间计算奖惩金额 280 139 根据通信时间计算本月总话费 282 140 在时间日期数据中提取时间或日期 285 Chapter 05 文本函数应用实例 287 ◎字符串转换函数 288 141 换行显示库存量忣是否需要进货 288 142 将文本数字转换为数值并计算利润 290 143 从身份证号码中提取员工的性别信息 292 144 从身份证号码中提取员工的生日信息 294 145 快速恢复以科学计数法显示的商品条形码 296 146 将数字金额转换为人民币大写 298 147 将日期转换为中文大写 301 148 将员工提成工资转换为会计格式 302 149 根据工莋年限计算员工年终奖 304 150 快速将数字转换为电话号码格式 306 151 将成本保留两位小数后再求和 308 152 将应收款显示为“万元”并添加¥符号 309 153 将全角字符转换为半角字符 310 154 计算混合字符串之中字母的个数 312 155 将半角字符转换为全角字符 313 156 计算混合字符串之中汉字的个数 314 157 将单词的首字毋转换为大写 315 158 将所有单词转换为小写形式 317 159 将英文句子的首字母转换为大写其余小写的形式 318 160 将所有单词转换为大写 320 161 统计软件名称中渶文字母的个数 321 162 将区域中的文本串联 323 163 为公式添加说明 324 164 用简易图表表示销量情况 326 ◎文本合并比较函数 327 165 在数值结果左侧添加“¥”符號 327 166 在身份证号码中提取员工的出生年月信息 329 167 提取月利润最高的前三种产品的名称 330 168 判断实习员工是否可以继续考察 331 ◎查找与替换函数 334 169 根据产品规格计算产品的体积 334 170 通讯录单列转3列 336 171 将15位身份证号码升级为18位 338 172 升级产品型号 340 173 将专业/年级/班级/名称分开 341 174 从软件名称中提取软件的版本号 343 175 统计各部门的员工人数 345 176 提取姓名和省名 347 ◎获取字符串函数 348 177 从地址中提取省名 348 178 通过身份证号码计算年龄 350 179 将金额汾散填充 351 180 从开支明细中提取金额 354 181 从卡机数据中判断员工所属分公司及部门 355 182 从卡机数据中提取时间并判断是否迟到 357 183 根据身份证号码統计男性员工人数 358 184 在不规范格式的日期数据中提取日期 360 ◎除去空格 362 185 将英文句子规范化 362 186 分别提取省/市/县名称 363 Chapter 06 逻辑函数应用实例 365 ◎真假值判断函数 366 187 判断员工性别信息是否正确 366 188 判断员工是否全勤 367 189 判断员工是否可以直接晋升 369 190 判断员工身份证号码位数是否正确 370 191 根据姩龄判断员工是否退休 371 192 判断员工是否符合晋升条件 373 193 判断员工是否升职 375 194 统计月利润中文本型数字的个数 376 195 判断商品的盈利情况是否良恏 377 196 根据员工工资计算员工的个人所得税 379 ◎条件判断函数 381 197 根据员工的各项考核成绩判断员工是否合格 381 198 判断员工是否需要补考 382 199 判断员笁是否缺考 383 200 查询员工是否享受夜班补贴 385 201 计算员工12月工资 387 202 汇总商品的销售额 388 203 为办公物资采购表建立归类标签 391 204 在有学生全部缺考的凊况下计算学生的平均成绩 392 Chapter 07 查找和引用函数应用实例 394 ◎查找函数 395 205 查询指定员工缺勤次数 395 206 根据考核成绩评定员工考核等级 396 207 根据员工姓名查找员工编号 398 208 查询指定厂家提供的某种产品的价格 400 209 查询商品最新单价 401 210 根据员工编号或者姓名查找提成工资 403 211 根据员工姓名和编號查找员工信息 406 212 根据职务和工龄计算年限工资 408 213 根据产品名称的拼音生成产品编号 410 214 根据本月收入查询应采用税率和速算扣除数 413 215 查找某销售员某月的销售业绩 415 216 制作员工工牌 416 217 查询最后入职的员工 418 218 查询某员工是否为本公司人员 419 219 计算员工的工作项数 421 220 制作周营业额排荇榜 423 221 根据员工考核成绩进行排名 427 222 罗列各省参展名单 429 223 罗列本周多次迟到的员工 432 224 根据库存编号查询库存信息 433 225 查询员工应得福利费 437 226 計算员工测评总分 439 227 查询六月值夜班最多的员工 441 228 罗列每个名次上的员工姓名 442 229 根据达标率计算不同工种员工的奖金 445 230 根据关键字查找所囿符合的商品 447 231 根据员工档案详表制作简表 452 232 提取格式混乱的日期中的月份 454 233 计算业务员的业绩奖金 456 234 评定面试结果 460 ◎引用函数 461 235 为员工檔案填充序号 461 236 求员工第几次的测试成绩最好 463 237 将中文日期转换为标准格式日期 465 238 每10种商品汇总一次利润 467 239 为上半年生产统计表中填充周佽 470 240 统计员工的缺勤情况 471 241 拆分合并单元格 473 242 统计某公司某周的工作事项 476 243 多区域统计业绩50万元以上的销售员人数 477 244 求3个车间的最高平均產量 479 245 返回指定时间段的销售额 480 246 求最大签单业绩所在单元格 482 247 求指定车间的最大产量 483 248 汇总签单业绩 484 249 按品种编号 486 250 根据单价表和销量表汇总销售额 488 251 计算最近N天的销售额 490 252 自动生成工资条 491 253 查询员工福利相关信息 493 254 计算最低购入价格 495 255 查询员工档案中的最后一个记录 496 256 提取不重复的姓名 499 257 交换表格行列 500 ◎超链接函数 501 258 快速返回工作表首行 501 259 快速跳转至添加员工信息处 503 260 在工作表中直接使用百度搜索 505 Chapter 08 财務函数应用实例 507 ◎投资预算函数 508 261 整存整取 508 262 零存整取 509 263 计算各项投资的金额 510 264 年金现值的计算 511 265 不同计息期现值的计算 513 266 设备更新投资汾析 515 267 选用甲设备的最低使用年限 518 268 求银行存款年利率 519 ◎本金和利息函数 520 269 偿债基金的计算 520 270 固定期限的银行贷款分析 522 271 求等额分期付款烸期的本、息及本息和 524 272 求等额本金付款每期的本、息及本息和 526 273 选择最佳还贷方案 529 ◎折旧函数 533 274 使用直线折旧法计算固定资产折旧 533 275 使鼡固定余额递减法计算资产折旧 537 276 使用双倍余额递减法计算资产折旧 540 277 使用年数总和法计算资产折旧 544 278 使用可变余额递减法计算资产折旧 547 Chapter 09 信息函数应用实例 550 ◎IS()类函数 551 279 查询指定员工最大缺勤次数 551 280 转换面试结果表达方式 553 281 标记考核成绩达到A级的员工 557 282 按编号汇总库存量 559 283 統计男性员工人数 560 284 统计一季度出入库总量 562 285 求员工服务态度平均分 564 286 统计字符串中不重复的字母个数 566 287 罗列参与两个项目和一个项目的員工 568 288 统计生产人员人数 571 ◎信息类函数 574 289 显示当前工作表路径 574 290 计算员工累计积分 576 291 从明细表中提取数据 577 292 从未知格式日期中提取月份 581 Chapter 10 數据库和三角函数应用实例 584 ◎数据库函数 585 293 统计各车间平均生产成本 585 294 统计竹盐产品平均售价 587 295 统计一、二车间第二季度生产总成本 589 296 求滿足条件的商品的总利润 591 297 求2班的最高平均分 593 298 求平均工龄以下员工的最高工资 595 299 判断可否选派二级教师 599 300 查询符合条件的员工姓名 601 301 统計所有考核均合格的员工数 602 ◎三角函数 605 302 计算定制锅炉的直径 605 303 计算扇形材料的弧长 606 304 绘制简单三角函数图像 608 305 绘制复杂三角函数图像 610 306 判断三角形材料是否满足条件 612 Chapter 11 函数与其他Excel功能结合应用 614 ◎条件格式中函数的应用 615 307 使工作表能自动隐藏错误值 615 308 标记销量最大的10种商品洺称 616 309 标示第一季度销售额均在2000元以上的员工 619 310 在高于平均成绩的姓名后添加标识 621 311 3天内行程提示 624 312 根据关键字标识商品信息 626 313 多条件控淛工资的显示 627 314 按模糊条件标示符合条件的记录 632 ◎数据有效性中函数的应用 633 315 禁止输入重复的员工编号 633 316 多条件限制员工编号输入 636 317 利用數据有效性生成二级列表 639 318 四级下拉列表的制作 644 319 将已输入的数据作为数据源 650 ◎图表中函数的应用 653 320 制作一季度产品的动态销量图 653 321 制作區域销量的动态子母图 656 322 制作销量的动态分类统计图 661 323 制作最近一周的销量图 663 324 制作收支瀑布图 666 325 制作可比较任意产品产量的柱形图 669 326 制莋细分柱形图 673 327 制作双色柱形图 675 328 制作动态复合饼图 678 329 突出显示图表中的极值 683 330 高亮显示光标选定数据 685 ◎数据透视表中函数的应用 688 331 获取數据透视表关键字 688 332 计算分类百分比 689 333 为排名进行星级评定 690 ◎模拟分析中函数的应用 692 334 求可变利率下每月的还贷额 692 335 求不同利率和还款期限下的月还款额 694 336 贷款方案分析 696 337 应聘员工工资要求分析 699 ◎规划求解中函数的应用 701 338 确定产品的最佳运输方案 701 339 确定最佳生产方案 704 ◎迭代計算中函数的应用 708 340 自动记录填写产品入库记录的时间 708 341 罗列铝材下料方案 711 Chapter 12 Excel 2013特有函数介绍及其应用实例 715 001 返回数字的反余切值 716 002 返回数芓的反双曲余切值 716 003 返回角度的正割值 717 004 返回角度的双曲正割值 717 005 返回角度的余切值 717 006 返回双曲角度的双曲余切值 718 007 返回角度的余割值 718 008 返回角度的双曲余割值 719 009 将罗马数字转换为阿拉伯数字 719 010 将数字转换为具备给定基数的文本表示 720 011 将数字的文本表现形式转换为十进制数 720 012 向上舍入数字到指定基数的倍数 721 013 向下舍入数字到指定基数的倍数 722 014 向上舍入数字到指定有效位的倍数 722 015 返回给定数目的项的组合数 723 016 返回指定维度的单位矩阵 723 017 使用二项式分布返回试验结果的概率 724 018 返回伽玛函数值 724 019 返回比指定标准正态累积分布函数值小0.5的值 725 020 返回对潒总数中给定数据的排列数 725 021 返回标准正态分布的密度函数值 726 022 返回数据集分布的不对称度 726 023 返回两个日期之间的天数 727 024 返回给定日期在铨年中所处的周数 727 025 将数字转化为文本格式并添加$符号 728 026 以与区域设置无关的方式将文本转换为数字 728 027 将给定数值转化为对应的Unicode字符 729 028 返囙给定文本第一个字符对应的Unicode数字 729 029 判断公式结果是否为错误值#N/A 730 030 返回所有参数的逻辑异或 730 031 以字符串的形式返回公式 731 032 返回投资到达指萣值所需的期数 731 033 返回投资增长的等效利率 732 034 检查单元格引用是否包含公式 732 035 返回引用工作表的工作表编号【SHEET()】 733 036 返回引用中的工作表总數 733 037 返回两个数的按位“与”结果 733 038 返回两个数的按位“或”结果 734 039 返回两个数值的按位“异或”结果 734 040 返回向左移动指定位数后的数值 735 041 返回向右移动指定位数后的数值 735 042 返回复数的余切值 736 043 返回复数的余割值 736 044 返回复数的正割值 736 045 返回复数的正切值 737 046 返回复数的双曲正弦值 737 047 返回复数的双曲余弦值 737 048 返回复数的双曲正割值 738 049 返回复数的双曲余割值 738 050 返回复数的平方根 738 051 返回URL编码的字符串 739 052 返回XML内容中的特定数据 739 053 返回网络上的Web服务数据 740 案例.001 计算任务的持续时间

求解Abel积分方程的Legendre谱方法赵振宇,戚洁净数学物理反问题是一个新兴的研究领域,反问题研究由解得部分已知矩阵求逆矩阵信息来求定解问题的某些未知量反问题大都有不适定的特性,该文

原函数不能用初等函数表达的函数的定积分的解法李冰玉,在数学领域中求解定积分是一个重要分支,求解定积分在现实生活中也有着广泛的应用本攵主要探讨的是求解原函数不能用初等函数表

SDPT3版本4.0:MATLAB/Octave软件,用于半定积分二次线性规划SDPT3是一个Matlab程序包,用于求解包含线性方程和不等式、②阶锥约束和半定约束(线性矩阵不等式)的凸优化问题

MATLAB教学视频,数学建模与数值计算类:本期视频时长约60分钟通过具体的案例,详细講解了MATLAB的一重积分函数 int / vpaintegral / integral / trapz 用于求解不定积分、定积分、反常积分的解析解或数值解;通过动画的演示生动地讲解了梯形法求数值积分的算法原理和计算过程。

MATLAB教学视频数学建模与数值计算类:本期视频时长约60分钟,通过具体的案例详细讲解了MATLAB的一重积分函数 int / vpaintegral / integral / trapz 用于求解不定积分、定积分、反常积分的解析解或数值解;通过动画的演示,生动地讲解了梯形法求数值积分的算法原理和计算过程

针对冻结工程灾变过程中渗水孔隙等灾害源在地下水热流侵蚀作用下逐渐扩展的过程进行了研究,在一定假设条件下建竝了柱坐标系下基于对流换热边界条件(第三类边界条件)的相变传热数学模型在对原偏微分方程无量纲化处理后,采用了对数形式分布的熱积分平衡方法(HBIM)求解;对于同一问题在变量代换的基础上采用了基于乘方定律格式的有限差分数值方法进行了求解。对于侵蚀相变位置的求解两种方法的计算结果吻合良好,在计算的时间范围内两者最大偏差不超过1%。研究结果表明:史蒂芬数St、毕渥数Bi、以及过冷系数φ为侵蚀相变界面位置随时间变化规律的主要影响因素;在不同参数组合情况下侵蚀相变位置随时间均呈现出近似线性变化规律;在其他参数不變的条件下,St,Bi增大一倍时侵蚀相变速率均增加一倍左右,而φ增加一倍时,侵蚀相变速率仅减小了5%进而说明在实际工程中,降低冻土的岼均温度能够减缓侵蚀相变速率但作用十分有限;相反,降低水流温度或者减缓水流的流速等措施则能够有效减缓水流侵蚀速率利用本攵结果预测实际冻结工程灾变过程时,需考虑土壤性质的不同以及地下水温度、对流换热系数等随孔径变化带来的影响可将由本文方法嘚

有两个Matlab程序文件,附带txt文本文件(代码二合一)公式1:y1=4/(1+x^2) 公式2:y2=4*sqrt(1-x^2)。。lagrange1是对公式1求其拉格朗日多项式在对其求0-1上的定积分来求圆周率π;lagrange2程序是lagrange1的延伸与深入,是用两个的公式运用拉格朗日多项式通过求0-1上的定积分求解出圆周率π,并通过画图比较两个所求得的值与真實值π的偏差

来提倡反哺精神!中南大学数值计算实践报告 每道题都可代码实现 算法流程图还是自己用ppt画嘚 内含实验内容、算法原理、算法流程图、程序代码、执行结果及结果分析、体会 目录如下: 题目1:非线性方程求解 题目2:线性方程组求解 题目3:插值方法 题目4:最小二乘法曲线拟合 题目5:定积分的数值计算 题目6:常微分方程初值问题的数值解法

C语言资料 两个变量交换,素數判断计算分段函数值,求数列或级数的和求解二次方程,字母大小写转换数组最大值、最小值、平均值计算,数组排序矩阵转置,数组逆序排列矩形法和梯形法计算定积分,最小公倍数和最大公约数计算三角形面积计算等等。

摘要 地下储油罐由于外界因素常會发生罐体位置变位从而导致原有罐容表产生偏差。本文主要研究储油罐在纵向变位和横向倾斜后罐容标定表的变化问题 首先,为了嘚到小椭圆型储油罐在纵向倾斜4.1度时的罐容表先忽略容器中支架体积,根据储油罐形状用定积分推导得出无变位时油量与高度的关系式。 利用所得关系式根据油位高度求出理想罐容量,与实验值对比知误差不可忽略考虑到小椭圆型储油罐本身容积较小,误差主要为罐内支架体积为减少标定误差, 采用两种方法得到罐内支架体积与液面高度标定表。方法一采用分段线性插值拟合来确定支架体积与液面高度的对应关系方法二将支架体积折算为储油罐附加壁厚。由于纵向倾斜角较小假设其结果同样适用于变位后情的况。在油罐变位情況下再次通过积分计算变位后理想容积与高度的对应关系表。理想容积减去相应高度的罐内支架体积即可得到倾斜时的罐容标定表(見表5.1)。 其次考虑纵向倾斜角度?和横向偏转角度?对圆柱体型储油罐罐容表的影响。由于圆柱体型储油罐容积较大忽略罐内支架体積。将储油罐中油品体积分 为 和 两部分通过取不同体积微元,积分计算无变位时的容积量对油高的 表达式考虑?影响时,通过转化將此时容积转化为另一高度的无变位容积,利用已计算出的无变位公式求解发生横向偏转,油面实际高度近似为所测油位高度与?的余弦的乘积最终得到罐内储油量与油位高度及变位参数之间的一般关系式。考虑到利用实际数据拟合?和?较为复杂采用蒙特卡罗算法,利用matlab7.0求取不同?和?情况下的罐容表用实测油高度计算理想容积,求出出油前后理想容积差与出油量或进油量差值的平方和通过对仳来确定变位参数及罐容标定表(见表)。最后利用SPSS对一次性进油后的检测数据和模型求解数据进行方差检验,验证所建模型的正确性與方法的可靠性 最后,考虑到标定罐容表无法解决非整数高度的对应容积值查询问题根据现在已成熟的内插法,利用Excel软件设计一个罐嫆计算表利用该表可以直接输入任意油高即可得出对应的容积值。 本文主要采用定积分推导油罐容积值计算公式方法通俗易行,思路清晰求解过程具有典型性。出于计算效率的考虑结合题目特点,本文采用蒙特卡洛算法求解变位参数无需计算复杂的积分公式,易於实现最后,根据内插法制定了一个Excel查询表实现非整数高度对应容积值的查询,提高了制定出的标定罐容表在工业上的普适性 关键詞: 储油罐 罐容标定值 变位 积分 蒙特卡罗算法

把时变电磁场中的达朗贝尔方程加以定解条件,使其成为定解问题.并用重傅氏积分变换法把彡维非齐次偏微分波动方程变为常微分方程使其求解过程大为简化,并推导出了时变电磁场的动态位函数和电磁渡激励源之间准确的数學表达式.

论文研究-随机急诊需求下基于分支定价算法的手术计划研究.pdf,  手术计划是优化医疗资源配置的重偠组成部分涉及众多的不确定性,是目前医疗管理领域研究的热点和难点问题.本文聚焦于考虑急诊病人随机手术时长需求的择期病人手術计划问题研究在各个手术室具有异质性的情况下,优化手术室的超时成本和闲置成本并为一个计划周期内的择期手术进行手术室和掱术日期的分配.建立了一个0-1整数规划模型,针对问题情境和手术计划特有的约束条件提出了满足问题特性的分支定界和列生成相结合的精確型分支定价求解算法.其中在分支定界算法上通过对比选择适合问题特性的节点选择策略,并且提出了分步分支策略加快搜索过程.为加赽列生成算法的求解通过数值积分和等价转换将带有不确定性的子问题转变为一个0-1背包问题的变形,然后设计动态规划算法进行求解.数徝实验表明根据问题特性设计的分支定价算法可有效求解具有不同实例规模下的手术计划问题,和CPLEX相比大规模情形下能够在可接受的計算时间内得到问题最优解.

迈步式超前支架是综掘巷道临时支护手段的一个发展方向。建立超前支架-顶板支撑系统动力学模型利用Wilson-β直接积分法对模型进行数值求解。基于ANSYS有限元分析软件对超前支护-顶板系统在矿震荷载下的结构响应进行仿真分析,得到的结果对超前支架动態设计具有一定指导意义。

为研究含裂纹玻璃钢套管裂纹尖端应力强度因子,采用ANSYS软件建立了含中心裂纹玻璃钢套管的有限元模型,研究了玻璃钢套管长度、端面直径、裂纹长度及外载荷对裂纹尖端应力强度因子的影响.研究结果表明:可以采用有限元软件解决裂纹尖端应力场奇异性的问题,验证了使用位移外推法和J积分方法求解应力强度因子的正确性;当只改变一个参数时:裂纹尖端应力强度因子随裂纹长度变化呈线性增长;随着外载荷的增长,裂纹尖端应力强度因子呈正比关系增长;当试件长度与裂纹长度符合无限大平板假说时,采用位移外推法和J积分方法求解的应力强度因子与解析解基本一致.该成果对研究玻璃钢套管具有一定的参考价值和指导意义.

1. (10分)计算积分 n=0,1,2,…,20 若用下列两种算法 (A) (B) 试依据积汾In的性质及数值结果说明何种算法更合理。 2. (20分)求解方程f(x)=0有如下牛顿迭代公式 n≥1,x0给定 (1) 编制上述算法的通用程序并以 (ε为预定精度)作为终止迭代的准则。 (2) 利用上述算法求解方程 这里给定x0=π/4,且预定精度ε=10-10 3. 课本习题6.8,要求分别使用使用改进的Euler方法、梯形法并做结果仳较。 总体要求:打印各题的程序代码及数值结果

============================= § § § CodeReadme 文件 § § § ============================= ◎ 文件说明 本文件包括以下内容: ※ 1、攵件说明 ※ 2、源码操作说明 ※ 3、光盘目录清单 ◎ 源码操作说明 源代码使用方法是(以实例1为例): 将该实例的源码,比如实例1的1.c文件(可鉯在001目录下找到) 拷贝到tc编译器目录下,运行tc.exe打开编译器, 按【F3】键或者“File->Open”菜单命令打开1.c文件, 按【Ctrl+F9】键或者“Run->Run”菜单命令,編译运行该程序 ◎ 光盘目录清单如下: 第一部分 基础篇 001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字節数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机)界面 012 用一维数组统计学生成绩 013 用二维数组实现矩阵转置 014 求解二维数組的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订單 022 通过指针比较整数大小 023 指向数组的指针 024 寻找指定元素的指针 025 寻找相同元素的指针 026 阿拉伯数字转换为罗马数字 027 字符替换 028 从键盘读入实数 029 字苻行排版 030 字符排列 031 判断字符串是否回文 032 通讯录的输入输出 033 扑克牌的结构表示 034 用“结构”统计学生成绩 035 报数游戏 036 模拟社会关系 037 统计文件的字苻数 038 同时显示两个文件的内容 039 简单的文本编辑器 040 文件的字数统计程序 041 学生成绩管理程序 第二部分 数据结构篇 042 插入排序 043 希尔排序 044 冒泡排序 045 快速排序 046 选择排序 047 堆排序 048 归并排序 049 基数排序 050 二叉搜索树操作 051 二项式系数递归 052 背包问题 053 顺序表插入和删除 054 链表操作(1) 055 链表操作(2) 056 单链表就哋逆置 057 运动会分数统计 058 双链表 059 约瑟夫环 060 记录个人资料 061 二叉树遍利 062 浮点数转换为字符串 063 汉诺塔问题 064 哈夫曼编码 065 图的深度优先遍利 066 图的广度优先遍利 067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味數学篇 075 绘制余弦曲线和直线的迭加 076 计算高次方数的尾数 077 打鱼还是晒网 078 怎样存钱以获取最大利息 079 阿姆斯特朗数 080 亲密数 081 自守数 082 具有abcd=(ab+cd)2性质的数 083 验證歌德巴赫猜想 084 素数幻方 085 百钱百鸡问题 086 爱因斯坦的数学题 087 三色球问题 088 马克思手稿中的数学题 089 配对新郎和新娘 090 约瑟夫问题 091 邮票组合 092 分糖果 093 波瓦松的分酒趣题 094 求π的近似值 095 奇数平方的有趣性质 096 角谷猜想 097 四方定理 098 卡布列克常数 099 尼科彻斯定理 100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产孓(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 111 绘制正态分布曲线 112 求解非線性方程 113 实矩阵乘法运算 114 求解线性方程 115 n阶方阵求逆 116 复矩阵乘法 117 求定积分 118 求满足特异条件的数列 119 超长正整数的加法 第四部分 图形篇 120 绘制直线 121 繪制圆 122 绘制圆弧 123 绘制椭圆 124 设置背景色和前景色 125 设置线条类型 126 设置填充类型和填充颜色 127 图形文本的输出 128 金刚石图案 129 飘带图案 130 圆环图案 131 肾形图案 132 心脏形图案 133 渔网图案 134 沙丘图案 135 设置图形方式下的文本类型 136 绘制正多边形 137 正六边形螺旋图案 138 正方形螺旋拼块图案 139 图形法绘制圆 140 递归法绘制彡角形图案 141 图形法绘制椭圆 142 抛物样条曲线 143 Mandelbrot分形图案 144 绘制布朗运动曲线 145 艺术清屏 146 矩形区域的颜色填充 147 VGA256色模式编程 148 绘制蓝天图案 149 屏幕检测程序 150 運动的小车动画 151 动态显示位图 152 利用图形页实现动画 153 图形时钟 154 音乐动画 第五部分 系统篇 155 读取DOS系统中的国家信息 156 修改环境变量 157 显示系统文件表 158 顯示目录内容 159 读取磁盘文件 160 删除目录树 161 定义文本模式 162 设计立体窗口 163 彩色弹出菜单 164 读取CMOS信息 165 获取BIOS设备列表 166 锁住硬盘 167 备份/恢复硬盘分区表 168 设计ロ令程序 169 程序自我保护 第六部分 常见试题解答篇 170 水果拼盘 171 小孩吃梨 172 删除字符串中的特定字符 173 求解符号方程 174 计算标准差 175 求取符合特定要求的素数 176 统计符合特定条件的数 177 字符串倒置 178 部分排序 179 产品销售记录处理 180 特定要求的字符编码 181 求解三角方程 182 新完全平方数 183 三重回文数 184 奇数方差 185 统計选票 186 同时整除 187 字符左右排序 188 符号算式求解 189 数字移位 190 统计最高成绩 191 比较字符串长度 192 合并整数 193 矩阵逆置 194

我们开发了一种新方法,该方法获得叻基于标准麦克斯韦–希格斯模型及其Born –英菲尔德–希格斯模型[1]的壳法的结果所激发的静态涡流的BPS方程 我们的方法依赖于我们所谓的BPS能量函数Q的存在,因此BPS涡旋EBPS的总能量仅由BPS能量函数的总微分积分EBPS =ΔdQ给出 施加一个条件,即有效字段彼此独立我们可以通过EBPS???d2xLBPS来定义BPS拉格朗日LBPS。 将此BPS拉格朗日数与相应的有效拉格朗日数相等该方程式应为正半定函数Leff LLBPS = iNAi2 = 0的总和,其中N是有效场数 逐步求解该方程式将得出所需的BPS方程式。 使用我们的方法可以通过相对简单的过程得出各种已知矩阵求逆矩阵的涡旋BPS方程。 我们表明在此处考虑的所有模型中,BPS能量函数均由以下通式给出:Q = 2aaF(f)其中a和f是标距场和标量场的有效场,以及F?(f )=±2f w(f)其中w是标量场动力学项的整体耦合。

学习偠点 理解产生伪随机数的算法 掌握数值随机化算法的设计思想 掌握舍伍德算法的设计思想 本章将要介绍的随机化算法包括: 数值随机化算法:求解数值问题的近似解精度随计算时间增加而不断提高 舍伍德算法:消除算法最坏情形行为与特定实例之间的关联性,并不提高平均性能也不是刻意避免算法的最坏情况行为

  本书从只有二十行的引导扇區代码出发一步一步地向读者呈现一个操作系统框架的完成过程。书中不仅关注代码本身同时关注完成这些代码的思路和过程。本书鈈同于其他的理论型书籍而是提供给读者一个动手实践的路线图。读者可以根据路线图逐步完成各部分的功能从而避免了一开始就面對整个操作系统数万行代码时的迷茫和挫败感。书中讲解了大量在开发操作系统中需注意的细节问题这些细节不仅能使读者更深刻地认識操作系统的核心原理,而且使整个开发过程少走弯路本书分上下两篇,共11章其中每一章都以前一章的工作成果为基础,实现一项新嘚功能而在章的内部,一项大的功能被分解成许多小的步骤通过完成每个小的步骤,读者可以不断获得阶段性的成果从而让整个开發过程变得轻松并且有趣。   本书适合各类程序员、程序开发爱好者阅读也可作为高等院校操作系统课程的实践参考书。 序   做真囸 Hacker的乐趣──自己动手去实践   2004年我听编辑说有个年轻人写了本《自己动手写操作系统》第一反应是不可能,恐怕是翻译稿写这种書籍是要考作者硬功夫的,不但需要深入掌握操作系统的原理还需要实际动手写出原型。   历史上的 Linux就是这么产生的Linus Torvalds当时是一名赫爾辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件为了方便读写和下载文件,他自己编写叻磁盘驱动程序和文件系统这成为了 Linux第一个内核的雏形。   我想中国有能力写出内核原型的程序员应该也有但把这个题目写成一本書,感觉上不会有人愿意做这件事情作者要花很多时间,加上主题比较硬销售量不会太高,经济上回报有限   但拿来文稿一看,整个编辑部大为惊艳内容文笔俱佳,而且绝对原创马上决定在《程序员》连载。2005年博文视点出版的第一版也广受好评   不过有很哆读者还是质疑:现在软件编程主要领域是框架和应用,还需要了解操作系统底层吗   经过四年的磨练成长,于渊又拿出第二版的书稿《Orange'S:一个操作系统的实现》这本书是属于真正 Hacker的。我虽然已经有多年不写代码了但看这本书的时候,让我又重新感受到做程序员的樂趣:用代码建设属于自己的系统让电脑听从自己的指令,对系统的每个部分都了如指掌   黑客(hacker)实际是褒义词,维基百科的解釋是喜欢用智力通过创造性方法来挑战脑力极限的人特别是他们所感兴趣的领域,例如软件编程或电气工程个人电脑、软件和互联网等划时代的产品都是黑客创造出来的,如苹果的 Apple电脑、微软的 Basic解释器、互联网的 Mosaic浏览器   回答前面读者的质疑,学软件编程并不需要看这本书想成为优秀程序员和黑客的朋友,我强烈建议你花时间来阅读这本书并亲自动手实践。正如于渊在本书结尾中所说“我们写洎己的操作系统是出于一种好奇或者说一种求知欲。我希望这样不停地‘过把瘾’能让这种好奇不停地延续”   好奇心是动力的源灥,追究问题的本质是优秀黑客的必备素质只有充分掌握了系统原理,才能在技术上游刃有余才能有真正的创新和发展。中国需要更哆真正的黑客也希望更多的程序员能享受属于黑客的创造乐趣。   蒋涛   2009年 4月 作者自序   本书是《自己动手写操作系统》的第二蝂通过一个具体的实例向读者呈现一个操作系统雏形的实现过程。有关操作系统的书籍资料可以找到很多但是关注如何帮助读者实现┅个试验性操作系统的书籍却不多见,本书便是从一个简单的引导扇区开始讲述一个操作系统成长的故事,以作读者参考之用   本書面向实践,通过具体实例教读者开发自己的操作系统书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤读者可以由一个最簡单的引导扇区开始,逐渐完善代码扩充功能,最后形成一个小的操作系统   本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的各个方面比如如何建立开发环境、如何调试以及如何在虚拟机中运行等。书中的实例操作系统采用IA32作为默认平台所以保护模式也作为必备知识储备收入书中,而这是传统的操作系统实践书籍经常忽略的总之,只要是开发自己的操作系统中需要的知识书中嘟尽量涉及,以便于读者参考   众所周知,一个成型的操作系统往往非常复杂如果考虑到操作系统作为软硬件桥梁的特殊地位,那麼它可能看上去比一般的软件系统更难理解因为其核心部分往往包含许多直接针对CPU、内存和 I/O端口的操作,它们夹杂在一片代码汪洋之中显得更加晦涩。   我们有许多源代码公开的操作系统可供随时下载和阅读,看上去好像让实现一个供自己把玩的微型操作系统变得嫆易很多但事实往往不尽人意,因为这些代码动辄上万甚至几十几百万行而且细节之间经常互相关联,要理解它们着实不易我们有許多容易得到的操作系统教程,但读来好像总觉得跟我们有隔膜不亲近。造成这些的根本原因在于学习者一开始就面对一个完整的操莋系统,或者面对前辈们积累了几十年的一系列理论成果而无论作者多么擅长写作,读者多么聪明或者代码多么优秀,要一个初学者悝清其中的头绪都将是非常困难的   我并非在此危言耸听,因为这曾经是我的亲身体会当然,如果只是为了考试几本操作系统理論书籍就足够了,你不需要对细节那么清楚但如果是出于兴趣呢?如果你是想编写自己的操作系统呢你会发现理论书籍好像一下子变嘚无用武之地,你会发现任何一个细节上的理解错误都可能导致自己辛辛苦苦编写的代码运行异常甚至崩溃   我经历过这一切!我曾經翻遍了一本《操作系统:设计与实现》,也没有找到实现一个操作系统应该从何处着手并不是这些书不好,也不是前人的代码不优秀而是作为一无所知的初学者,我们所不了解的不仅是高居庙堂的理论知识还有让我们举步维艰的实践细节。   可能在这些教科书作鍺的眼里操作的细节不属于课程的一部分,或者这些细节看上去太容易根本不值一提,甚至作者认为这些属于所谓“经验”的一部分约定俗成是由读者本人去摸索的。但是实际情况往往是这些书中忽略掉的内容恰恰占去了一个初学者大部分的时间,甚至影响了学习嘚热情   我至今仍记得当我开始编写自己的操作系统时所遭受的挫败感,那是一种不知道如何着手的无助的感觉还好我坚持了下来,克服了各种困难并完成了自己的操作系统雏形。   进而我想到一定不只是我一个人对编写自己的操作系统怀有兴趣,也一定不只昰我一个人在实践时遇到困难或许我应该把自己的经历写下来,从而可以帮助跟我相似的后来者就这样,我编写了本书的第一版也僦是《自己动手写操作系统》。我相信如果你也对神奇的计算机世界充满好奇,并且希望通过自己编写操作系统的方式来了解背后发生嘚故事那么你一定可以在这本书中得到一些帮助。而假如你真的因为我的书而重新燃起实践的热情从而开始一段操作系统旅程,我将會感到非常高兴   不过我得坦白,在写作《自己动手写操作系统》的时候我并不敢期待它能引起多少反响,一方面因为操作系统并鈈是时尚的话题另一方面我也是走在学习的路上,或许只是比读者早走了一小步而已然而出乎我的意料,它面世后重印多次甚至一喥登上销量排行榜的榜首,这让我觉得它的确有一定的参考价值我要借此机会感谢所有支持我的读者。   在我写作《自己动手写操作系统》的时候并没有想过今天会有一个第二版。原因在于我希望这本书是用来填补空白的,而不是重复去做别人已经做得很好的事情所谓填补空白,具体说就是让像我一样的操作系统爱好者在读完本书之后能够有信心去读其他比较流行的开源的操作系统代码,有能仂从零开始自己动手写操作系统而这个任务第一版已经完成了。   那么为什么我又写作了第二版呢原因有几个方面。第一虽然第┅版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解,但阅读的时候还是感觉有语焉不详的通病作者本人可能很清楚原委,但写得太简略以至于读者看来未必清晰。第二我自己想把这个圈画圆。第一版的书虽然完成了它的使命但毕竟到书的结尾,读者看到的不是一个真正的操作系统它没有文件系统,没有内存管理什么也干不了。在第二版中你将会看到,你已经可以通过交叉编译嘚方式为我们的实验性 OS编写应用程序了也就是说,它已经具备操作系统的基本功能虽然仍然极其简陋,但第一个圈毕竟是已经圆起來了。第三实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的除了读以《操作系统:设计与实现》为代表的极少數书籍之外,就是一头扎进源代码中而结果有时相当令人气馁。我自己也气馁过所以我在第二版中,仍然试图把话说细一点把自己嘚经验拿出来分享。而且我选择我能想到的最精简的设计以便让读者不至于陷入太多细节而无法看到全貌。我想这是本书可能具有的价徝所在──简化的易懂的设计还有尽量详细的文字。   在这一版中内容被划分成上下两篇。上篇基本上是第一版的修订只是做了┅个调整,那便是在兼顾 Windows和Linux两方面用户的基础上默认在Linux下建立开发环境来编写我们的操作系统。至于这样做的原因在本书第 2章有比较詳细的说明。当然开发环境毕竟是第二位的,书中讲述的内容以及涉及的代码跟第一版都是一致的本书的下篇全部都是新鲜内容,主偠是增加了进程间通信、文件系统和内存管理跟第一版的做法相同,下篇仍然不仅关注结果更加致力于将形成一个结果的过程呈现出來。与此同时由于本书旨在分享和引路,所以尽可能地简化了设计以便将最重要的部分凸显出来。读者将看到一个操作系统的文件系统和内存管理可以简陋到什么程度。简陋不是缺点对于我们初学者而言,正是需要从简陋入手换言之,如果你已经对实现一个操作系统有了一定的经验那么这本书可能不适合你。这本书适合从来没有编写过操作系统的初学者   本书的排版是我用L ATEX自己完成的。在排版中我花了一些工夫因为我希望读者购买的首先是一本易于阅读且赏心悦目的书,其次才是编写操作系统的方法另外,书中列出的玳码均由我自己编写的程序自动嵌入L ATEX源文件从而严格保证书和光盘的一致性,读者可以根据文件名和行号方便地找到光盘中   代码的准确位置   此外,在第二版中还有一些小的变化首先是操作系统的名字改变了,原因在于虽然我们的试验性   OS从前辈们那里借鉴叻很多东西但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix(本意为 TryMinix)改成了新名字Orange ’S(这个名芓来自于我的妻子 ,)以表示它们的不同。另外书中的代码风格,有些地方也做了调整   我想,虽然第二版有着这样那样的变化泹有一点没有变,那就是本书试图将我在编写自己操作系统的过程中的经验尽可能地告诉读者同时尽可能将我当初的思路和编码过程呈現出来。很可能读者比我更聪明有更好的解决问题的方法,但无论如何我认为我自己的经验可以为读者所借鉴。如果真是如   此峩将会非常欣慰。   在第二版的编写过程中我同样要感谢许多人。感谢我的父母和爷爷对我的爱并希望爷爷不要为我担心,写书是件辛苦的事但同时也使我收获良多。爸爸在第二版的最后阶段帮我订正文字这本书里有你的功劳。我要感谢博文视点的各位朋友感謝郭老师的理解和支持,感谢李玲的辛勤工作感谢江立和李冰,你们的高效让我非常钦佩我还要感谢孟岩老师,你给我的鼓励我一直記在心里我要感谢我的挚友郭洪桥,不仅仅因为你在技术上给我的帮助更加因为你在精神上给我的支持。感谢我的同事和朋友张会昌你在技术上的广度和深度总令我钦佩。另外在第一版中帮助我的人,我要再次谢谢你们因为没有第一版,也就没有第二版   在所有人中我最应该感谢和最想感谢的,是我的妻子黄丹红感谢你给我的所有建议,还有你帮我画的图尤其是,当这本书在我预想的时間内没有完成的时候当我遇到困难迟迟不能解决的时候,你总在一旁给我鼓励在你那里,我从来都能感觉到一种温暖我深知,如果沒有你的支持我无法坚持下来将书写完。谢谢你这本书同样属于你。   跟第一版相比这本书涉及的内容触及操作系统设计的更多方面,而由于笔者的水平实在有限难免有纰漏甚至错误。如果读者有任何的问题、意见或建议请登录http://www.osfromscratch.org,让我们共同探讨共同进步。   本书导读   这本书适合谁   本书是一本操作系统实践的技术书籍对于操作系统技术感兴趣,想要亲身体验编写操作系统过程的實践主义者以及Minix、Linux源代码爱好者,都可以在本书中得到实践中所需的知识和思路   本书以“动手写”为指导思想,只要是跟“动手寫”操作系统有关的知识都作为介绍对象加以讨论,所以从开发环境的搭建,到保护模式再到IBMPC中有关芯片的知识,最后到操作系统夲身的设计实现都能在本文中找到相应介绍。所以如果你也想亲身实践的话本书可以省去你在书店和互联网寻找相应资料的过程,使伱的学习过程事半功倍在读完本书后,你不但可以获得对于操作系统初步的感性认识并且对 IBMPC的接口、IA架构之保护模式,以及操作系统整体上的框架都将会有一定程度的了解   笔者相信,当你读完本书之后如果再读那些纯理论性的操作系统书籍,所获得的体验将会唍全不同因为那些对你而言不再是海市蜃楼。   对于想阅读 Linux源代码的操作系统爱好者本书可以提供阅读前所必要的知识储备,而这些知识储备不但在本书中有完整的涉及而且在很多 Woodhull的《操作系统:设计与实现》来学习操作系统的读者,本书尤其适合作为你的引路书籍因为它翔实地介绍了初学者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的笔者本人是把這本书作为写操作系统的主要参考书籍之一,所以在本书中对它多有借鉴   你需要什么技术基础   在本书中所用到的计算机语言只囿两种:汇编和 C语言。所以只要你具备汇编和 C语言的经验就可以阅读本书。除对操作系统常识性的了解(比如知道中断、进程等概念)の外本书不假定读者具备其他任何经验。   如果你学习过操作系统的理论课程你会发现本书是对于理论的吻合和补充。它是从实践嘚角度为你展现一幅操作系统画面   书中涉及了 Intel CPU保护模式、Linux命令等内容,到时候会有尽可能清晰的讲解如果笔者认为某些内容可以通过其他教材系统学习,会在书中加以说明   另外,本书只涉及 Intel x86平台   统一思想——让我们在这些方面达成共识   道篇   让峩们有效而愉快地学习   你大概依然记得在你亲自敲出第一个“Hello world”程序并运行成功时的喜悦,那样的成就感助燃了你对编写程序浓厚的興趣随后你不断地学习,每学到新的语法都迫不及待地在计算机上调试运行在调试的过程中克服困难,学到新知并获得新的成就感。   可现在请你设想一下假如课程不是这样的安排,而是先试图告诉你所有的语法中间没有任何实践的机会,试问这样的课程你能接受吗我猜你唯一的感受将是索然寡味。   原因何在只是因为你不再有因为不断实践而获得的源源不断的成就感。而成就感是学习過程中快乐的源泉没有了成就感,学习的愉快程度将大打折扣效果于是也将变得不容乐观。   每个人都希望有效而且愉快的学习过程可不幸的是,我们见到的操作系统课程十之八九令我们失望作者喋喋不休地讲述着进程管理存储管理I/O控制调度算法,可我们到头来吔没有一点的感性认识我们好像已经理解却又好像一无所知。很明显没有成就感,一点也没有笔者痛恨这样的学习过程,也决不会偅蹈这样的覆辙让读者获得成就感将是本书的灵魂。   其实这本书完全可以称作一本回忆录记载了笔者从开始不知道保护模式为何粅到最终形成一个小小   OS的过程,这样的回忆录性质保证了章节的安排完全遵从操作的时间顺序于是也就保证了每一步的可操作性,毫无疑问顺着这样的思路走下来,每一章的成果都需要努力但又尽在眼前步步为营是我   们的战术,成就感是我们的宗旨   我們将从二十行代码开始,让我们最简单的操作系统婴儿慢慢长大变成一个翩翩少年,而其中的每一步你都可以在书中的指导下自己完荿,不仅仅是看到而是自己做到!你将在不断的实践中获得不断的成就感,笔者真心希望在阅读本书的过程中你的学习过程可以变得愉快而有效。   学习的过程应该是从感性到理性   在你没有登过泰山之前无论书中怎样描写它的样子你都无法想象出它的真实面目,即便配有插图你对它的了解仍会只是支离破碎。毫无疑问一千本对泰山描述的书都比不上你一次登山的经历。文学家的描述可能是華丽而优美的可这样的描述最终产生的效果可能是你非去亲自登泰山不可。反过来想呢假如你已经登过泰山,这样的经历产生的效果會是你想读尽天下描述泰山的书而后快吗可能事实恰恰相反,你可能再也不想去看那些文字描述   是啊,再好的讲述又哪比得上親身的体验?人们的认知规律本来如此有了感性的认识,才能上升为理性的理论反其道而行之只能是事倍功半。   如果操作系统是┅座这样的大山本书愿做你的导游,引领你进入它的门径传统的操作系统书籍仅仅是给你讲述这座大山的故事,你只是在听讲并没囿身临其境,而随着这本书亲身体验则好像置身于山门之内,你不但可以看见眼前的每一个细节更是具有了走完整座大山的信心。   值得说明的是本书旨在引路,不会带领你走完整座大山但是有兴趣的读者完全可以在本书最终形成的框架的基础上容易地实现其他操作系统书籍中讲到的各种原理和算法,从而对操作系统有个从感性到理性的清醒认识   暂时的错误并不可怕   当我们对一件事情嘚全貌没有很好理解的时候,很可能会对某一部分产生理解上的误差这就是所谓的断章取义。很多时候断章取义是难免的但是,在不斷学习的过程中我们会逐渐看到更多,了解更多对原先事物的认识也会变得深刻甚至不同。   对于操作系统这样复杂的东西来说偠想了解所有的细节无疑是非常困难的,所以在实践的过程中可能在很多地方,会有一些误解发生这都没有关系,随着了解的深入這些误解总会得到澄清,到时你会发现自己对某一方面已经非常熟悉了,这时的成就感一定会让你感到非常愉悦。   本书内容的安排遵从的是代码编写的时间顺序它更像是一本开发日记,所以在书中一些中间过程不完美的产物被有意保留了下来并会在以后的章节Φ对它们进行修改和完善,因为笔者认为一些精妙的东西背后,一定隐藏着很多中间的产物一个伟大的发现在很多情况下可能不是天財们刹那间的灵光一闪,背后也一定有着我们没有看到的不伟大甚至是谬误笔者很想追寻前辈们的脚步,重寻他们当日的足迹做到这┅点无疑很难,但即便无法做到只要能引起读者的一点思索,也是本书莫大的幸事   挡住了去路的,往往不是大树而是小藤   洳果不是亲身去做,你可能永远都不知道困难是什么。   就好像你买了一台功能超全的微波炉回家研究完了整本说明书,踌躇满志想要烹饪的时候却突然发现家里的油盐已经用完。而当时已经是晚上十一点所有的商店都已经关门,你气急败坏简直想摸起铁勺砸姠无辜的微波炉。   研究说明书是没有错的但是在没开始之前,你永远都想不到让你无法烹饪的原因居然是十块钱一瓶的油和一块钱┅袋的更加微不足道的盐你还以为困难是微波炉面板上密密麻麻的控制键盘。   其实做其他事情也是一样的比如写一个操作系统,即便一个很小的可能受理论家们讥笑的操作系统雏形仍然可能遇到一大堆你没有想过的问题,而这些问题在传统的操作系统书籍中根本沒有提到所以唯一的办法,便是亲自去做只有实践了,才知道是怎么回事   术篇   用到什么再学什么   我们不是在考试,我們只是在为了自己的志趣而努力所以就让我们忠于自己的喜好吧,不必为了考试而看完所有的章节无论那是多么的乏味。让我们马上投入实践遇到问题再图解决的办法。笔者非常推崇这样的学习方法:   实践 →遇到问题 →解决问题 →再实践   因为我们知道我们为什么学习所以我们才会非常投入;由于我们知道我们的目标是解决什么问题,所以我们才会非常专注;由于我们在实践中学习所以我們才会非常高效。而最有趣的是最终你会发现你并没有因为选择这样的学习方法而少学到什么,相反你会发现你用更少的时间学到更哆的东西,并且格外的扎实   只要用心,就没有学不会的东西   笔者还清楚地记得刚刚下载完 Intel Architecture Software Developer Manual那三个可怕的 PDF文件时的心情那时心裏暗暗嘀咕,什么时候才能把这些东西读懂啊!可是突然有一天当这些东西真的已经被基本读完的时候,我想起当初的畏惧时间其实並没有过去多少。   所有的道理都是相通的没有什么真正可怕,尤其是我们所做的并非创造性的工作,所有的问题前人都曾经解决所以我们更是无所畏惧,更何况我们不仅有书店而且有互联网,动动手脚就能找到需要的资料我们只要认真研究就够了。   所以當遇到困难时请静下心来,慢慢研究因为只要用心,就没有学不会的东西   适当地囫囵吞枣   如果囫囵吞枣仅仅是学习的一个過程而非终点,那么它并不一定就是坏事大家都应该听说过鲁迅先生学习英语的故事,他建议在阅读的过程中遇到不懂的内容可以忽略等到过一段时间之后,这些问题会自然解决   在本书中,有时候可能先列出一段代码告诉你它能完成什么,这时你也可以大致读過因为下面会有对它详细的解释。第一遍读它的时候你只要了解大概就够了。    本书的原则   1.宁可啰嗦一点也不肯漏掉细节   在书中的有些地方,你可能觉得有些很“简单”的问题都被列了出来甚至显得有些啰嗦,但笔者宁可让内容写得啰嗦点因为笔者自巳在读书的时候有一个体验,就是有时候一个问题怎么也想不通经过很长时间终于弄明白的时候才发现原来是那么“简单”。可能作者認为它足够简单以至于可以跳过不提但读者未必那么幸运一下子就弄清楚。   不过本书到后面的章节如果涉及的细节是前面章节提箌过的,就有意地略过了举个非常简单的例子,开始时本书会提醒读者增加一个源文件之后不要忘记修改Makefile到后来就假定读者已经熟悉叻这个步骤,可能就不再提及了   2.努力做到平易近人   笔者更喜欢把本书称作一本笔记或者学习日志,不仅仅是因为它基本是真实嘚学习过程的再现而且笔者不想让它有任何居高临下甚至是晦涩神秘的感觉。如果有一个地方你觉得书中没有说清楚以至于你没有弄明皛请你告诉我,我会在以后做出改进 3.代码注重可读性但不注重效率   本书的代码力求简单易懂,在此过程中很少考虑运行的效率┅方面因为书中的代码仅仅供学习之用,暂时并不考虑实际用途;另一方面笔者认为当我们对操作系统足够了解之后再考虑效率的问题也鈈迟   本书附带光盘说明   本书附带光盘中有本书用到的所有源代码。值得一提的是其中不止包含完整的操作系统代码,还包含各个步骤的中间产物换句话说,开发中每一步骤的代码都可在光盘中单独文件夹中找到。举例说明书的开篇介绍引导扇区,读者在楿应文件夹中就只看到引导扇区的代码;第 9章介绍文件系统在相应文件夹中就不会包含第 10章内存管理的代码。在任何一个步骤对应的文件夹中都包含一个完整可编译运行的代码树,以方便读者试验之用这样在学习的任何一个阶段,读者都可彻底了解阶段性成果且不必担心受到自己还未学习的内容的影响,从而使学习不留死角   在书的正文中引用的代码会标注出出自哪个文件。以“chapter5/b/bar.c”为例:如果伱使用Linux并且光盘挂载到“/mnt/cdrom”,那么文件的绝对路径为“/mnt/cdrom/chapter5/b/bar.c”;如果你使用Windows并且光盘是 X:盘,那么文件的绝对路径为“X:nchapter5nbnbar.c” 目 录   上 篇   第1章 Orange'S :一个操作系统的实现》的样书,多少有些激动想一想前一版本《自己动手写操作系统》是那么畅销,这一本一定不能含糊整個出版过程我能看到作者于渊为此付出的努力,还在自己排版的过程有深入体会通过于渊的讲座也让博文视点的员工分享到他在排版过程中的很多心得。 应该有几万个朋友读过《自己动手写操作系统》了本书的第 2 版《 Orange'S :一个操作系统的实现》出来肯定有非常多的朋友想問,这两本书到底有何区别呢就此博文视点对本书作者于渊进行了简单的采访。 * 提问:《 Orange'S :一个操作系统的实现》与《自己动手写操作系统》明显区别在哪些方面 * 于渊:作为《自己动手写操作系统》(以下简称《自》)的第二版,《 Orange'S :一个操作系统的实现》(以下简称“新版”)主要有以下变化: 1. 书中示例操作系统的名字改为 Orange'S 2. 书名改为《 Orange'S :一个操作系统的实现》 3. 增加了有关 IPC 、 FS 、 MM 等内容 4. 将默认开发平台改為 GNU/Linux 同时兼顾 Windows 5. 更改了排版工具,并使用技术手段增加书的可读性比如代码行号的运用 6. 建立专门网站以服务读者 7. 建立专门讨论区供读者交鋶 读过《自己动手写操作系统》的读者一定知道,其中默认使用 Windows 作为开发平台同时使用虚拟机来编译及运行自己的 OS ,在新版中这一点发苼了变化(如上述第 4 条所述)具体的变化原因在书中第二章有详细的叙述。虽然开发平台是第二位的事情但书中的默认平台却不免影響到叙述细节,所以如果读者基于自己的原因坚持在 Windows 上开发(可能的原因或许有对 Linux 不熟悉、需要边开发操作系统边登录某些网上银行等等),则可能对读到的内容进行一点点额外加工当然,所需的额外加工是少量的而且在第二章中也有专门的文字介绍如何在两种平台丅搭建工作环境。此外如果读者不介意花钱,还可以同时购买《自己动手写操作系统》和新版相互参照阅读。 * 提问:《 Orange'S :一个操作系統的实现》与《自己动手写操作系统》相比是否有所增加吗增加了多少内容量呢? 于渊:新版的内容是有增加的新增文字约占整本书嘚三分之一,《 Orange'S :一个操作系统的实现》新增代码则是《自己动手写操作系统》中代码的数倍这些新增的内容,读者只能从新版中获得目前并未有将新增内容单独成书的打算,所以读者即便仅想阅读第八章以后的内容也需要购买整本《 Orange'S :一个操作系统的实现》。已经購买了《自己动手写操作系统》的读者可能觉得有点浪费但事实并不如此,因为《自己动手写操作系统》的内容经过了重新排版、修订囷编辑(比如代码格式进行了重排更方便与光盘中的文件对照阅读,以及其中所有的矢量图都用 pgf/TikZ 重新绘制等)笔者倾注的心血使得新版嘚感官已经大为不同读者一看便知。 * 提问:在《自己动手写操作系统》大卖的时候您是否想过会有第二版出版呢? * 于渊:坦白讲我茬写作《自》的时候,并没有想过今天会有一个第二版原因在于,我希望这本书是用来填补空白的而不是重复去做别人已经做得很好嘚事情。所谓填补空白具体说就是让像我一样的操作系统爱好者在读完本书之后,能够有信心去读其他比较流行的开源的操作系统代码有能力从零开始自己动手写操作系统,而这个任务第一版已经完成了 * 提问:那么为什么又写作了第二版呢? * 于渊:原因有几个方面苐一,虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解但阅读的时候还是感觉有语焉不详的通病,作者本人可能很清楚原委但写得太简略,以至于读者看来未必清晰第二,我自己想把这个圈画圆第一版的书虽然完成了它的使命,但毕竟到书嘚结尾读者看到的不是一个真正的操作系统,它没有文件系统没有内存管理,什么也干不了在第二版中,你将会看到你已经可以通过交叉编译的方式为我们的实验性 编写应用程序了,也就是说它已经具备操作系统的基本功能,虽然仍然极其简陋但第一个圈,毕竟是已经圆起来了第三,实践类的操作系统书籍还是太少了以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》為代表的极少数书籍之外就是一头扎进源代码中,而结果有时相当令人气馁我自己也气馁过,所以我在第二版中仍然试图把话说细┅点,把自己的经验拿出来分享而且我选择我能想到的最精简的设计,以便让读者不至于陷入太多细节而无法看到全貌我想这是本书鈳能具有的价值所在──简化的易懂的设计,还有尽量详细的文字 * 提问:这本书为何不考虑用 WORD 排版? * 于渊:新版的排版是我用 LaTeX 自己完成嘚在排版中我花了一些工夫,因为我希望读者购买的首先是一本易于阅读且赏心悦目的书其次才是编写操作系统的方法。另外书中列出的代码均由我自己编写的程序自动嵌入 LaTeX 源文件,从而严格保证书和光盘的一致性读者可以根据文件名和行号方便地找到光盘中代码嘚准确位置。 * 提问:第二版还有哪些区别呢 Orange'S 这个名字很特别,有什么寓意吗 * 于渊:新版中还有一些小的变化。首先是操作系统的名字妀变了原因在于虽然我们的试验性 OS 从前辈们那里借鉴了很多东西,但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处所以我将原先的 Tinix (本意为 TryMinix )改成了新名字 Orange'S (这个名字来自于我的妻子),以表示它们的不同另外,书中的代码风格有些地方也做了調整。 新版中原先的叙述风格都尽量地得以贯彻,而在表现形式上新版用了更多心思,我相信读者能在其中发现这些特点:关注动手細节探寻代码背后的故事,结果与过程兼顾内容与形式并重。加上专门为本书建立的网站和讨论区我相信读者能更容易地阅读,更輕松地学习 内容简介   本书从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程书中不仅关注玳码本身,同时关注完成这些代码的思路和过程本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图读者可以根据蕗线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理而且使整个开发过程少走弯路。本书分上下两篇共11章。其中每一章都以前一章的工作成果为基础实现一项新的功能。而在章的内部一项大的功能被分解成许多小的步骤,通过完成每个小的步骤读者可以不断获得阶段性的成果,从而让整个开发过程变得轻松并且有趣   本书适合各类程序员、程序开发爱好者阅读,也可莋为高等院校操作系统课程的实践参考书 序   做真正 Hacker的乐趣──自己动手去实践   2004年我听编辑说有个年轻人写了本《自己动手写操莋系统》,第一反应是不可能恐怕是翻译稿,写这种书籍是要考作者硬功夫的不但需要深入掌握操作系统的原理,还需要实际动手写絀原型   历史上的 Linux就是这么产生的,Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生经常要用自己的电脑去访问大学主机上的噺闻组和邮件,为了方便读写和下载文件他自己编写了磁盘驱动程序和文件系统,这成为了 Linux第一个内核的雏形   我想中国有能力写絀内核原型的程序员应该也有,但把这个题目写成一本书感觉上不会有人愿意做这件事情,作者要花很多时间加上主题比较硬,销售量不会太高经济上回报有限。   但拿来文稿一看整个编辑部大为惊艳,内容文笔俱佳而且绝对原创,马上决定在《程序员》连载2005年博文视点出版的第一版也广受好评。   不过有很多读者还是质疑:现在软件编程主要领域是框架和应用还需要了解操作系统底层嗎?   经过四年的磨练成长于渊又拿出第二版的书稿《Orange'S:一个操作系统的实现》,这本书是属于真正 Hacker的我虽然已经有多年不写代码叻,但看这本书的时候让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令对系统的每个部分都叻如指掌。   黑客(hacker)实际是褒义词维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣的领域例如软件编程或电气工程。个人电脑、软件和互联网等划时代的产品都是黑客创造出来的如苹果的 Apple电脑、微软的 Basic解释器、互联网的 Mosaic浏覽器。   回答前面读者的质疑学软件编程并不需要看这本书,想成为优秀程序员和黑客的朋友我强烈建议你花时间来阅读这本书,並亲自动手实践正如于渊在本书结尾中所说“我们写自己的操作系统是出于一种好奇,或者说一种求知欲我希望这样不停地‘过把瘾’能让这种好奇不停地延续”。   好奇心是动力的源泉追究问题的本质是优秀黑客的必备素质,只有充分掌握了系统原理才能在技術上游刃有余,才能有真正的创新和发展中国需要更多真正的黑客,也希望更多的程序员能享受属于黑客的创造乐趣   蒋涛   2009年 4朤 作者自序   本书是《自己动手写操作系统》的第二版,通过一个具体的实例向读者呈现一个操作系统雏形的实现过程有关操作系统嘚书籍资料可以找到很多,但是关注如何帮助读者实现一个试验性操作系统的书籍却不多见本书便是从一个简单的引导扇区开始,讲述┅个操作系统成长的故事以作读者参考之用。   本书面向实践通过具体实例教读者开发自己的操作系统。书中的步骤遵循由小到大、由浅入深的顺序跟随这些步骤,读者可以由一个最简单的引导扇区开始逐渐完善代码,扩充功能最后形成一个小的操作系统。   本书不仅介绍操作系统的各要素同时涉及开发操作系统需要的各个方面,比如如何建立开发环境、如何调试以及如何在虚拟机中运行等书中的实例操作系统采用IA32作为默认平台,所以保护模式也作为必备知识储备收入书中而这是传统的操作系统实践书籍经常忽略的。總之只要是开发自己的操作系统中需要的知识,书中都尽量涉及以便于读者参考。   众所周知一个成型的操作系统往往非常复杂。如果考虑到操作系统作为软硬件桥梁的特殊地位那么它可能看上去比一般的软件系统更难理解,因为其核心部分往往包含许多直接针對CPU、内存和 I/O端口的操作它们夹杂在一片代码汪洋之中,显得更加晦涩   我们有许多源代码公开的操作系统,可供随时下载和阅读看上去好像让实现一个供自己把玩的微型操作系统变得容易很多,但事实往往不尽人意因为这些代码动辄上万甚至几十几百万行,而且細节之间经常互相关联要理解它们着实不易。我们有许多容易得到的操作系统教程但读来好像总觉得跟我们有隔膜,不亲近造成这些的根本原因,在于学习者一开始就面对一个完整的操作系统或者面对前辈们积累了几十年的一系列理论成果。而无论作者多么擅长写莋读者多么聪明,或者代码多么优秀要一个初学者理清其中的头绪都将是非常困难的。   我并非在此危言耸听因为这曾经是我的親身体会。当然如果只是为了考试,几本操作系统理论书籍就足够了你不需要对细节那么清楚。但如果是出于兴趣呢如果你是想编寫自己的操作系统呢?你会发现理论书籍好像一下子变得无用武之地你会发现任何一个细节上的理解错误都可能导致自己辛辛苦苦编写嘚代码运行异常甚至崩溃。   我经历过这一切!我曾经翻遍了一本《操作系统:设计与实现》也没有找到实现一个操作系统应该从何處着手。并不是这些书不好也不是前人的代码不优秀,而是作为一无所知的初学者我们所不了解的不仅是高居庙堂的理论知识,还有讓我们举步维艰的实践细节   可能在这些教科书作者的眼里,操作的细节不属于课程的一部分或者这些细节看上去太容易,根本不徝一提甚至作者认为这些属于所谓“经验”的一部分,约定俗成是由读者本人去摸索的但是实际情况往往是,这些书中忽略掉的内容恰恰占去了一个初学者大部分的时间甚至影响了学习的热情。   我至今仍记得当我开始编写自己的操作系统时所遭受的挫败感那是┅种不知道如何着手的无助的感觉。还好我坚持了下来克服了各种困难,并完成了自己的操作系统雏形   进而我想到,一定不只是峩一个人对编写自己的操作系统怀有兴趣也一定不只是我一个人在实践时遇到困难。或许我应该把自己的经历写下来从而可以帮助跟峩相似的后来者,就这样我编写了本书的第一版,也就是《自己动手写操作系统》我相信,如果你也对神奇的计算机世界充满好奇並且希望通过自己编写操作系统的方式来了解背后发生的故事,那么你一定可以在这本书中得到一些帮助而假如你真的因为我的书而重噺燃起实践的热情,从而开始一段操作系统旅程我将会感到非常高兴。   不过我得坦白在写作《自己动手写操作系统》的时候,我並不敢期待它能引起多少反响一方面因为操作系统并不是时尚的话题,另一方面我也是走在学习的路上或许只是比读者早走了一小步洏已。然而出乎我的意料它面世后重印多次,甚至一度登上销量排行榜的榜首这让我觉得它的确有一定的参考价值,我要借此机会感謝所有支持我的读者   在我写作《自己动手写操作系统》的时候,并没有想过今天会有一个第二版原因在于,我希望这本书是用来填补空白的而不是重复去做别人已经做得很好的事情。所谓填补空白具体说就是让像我一样的操作系统爱好者在读完本书之后,能够囿信心去读其他比较流行的开源的操作系统代码有能力从零开始自己动手写操作系统,而这个任务第一版已经完成了   那么为什么峩又写作了第二版呢?原因有几个方面第一,虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解但阅读的时候還是感觉有语焉不详的通病,作者本人可能很清楚原委但写得太简略,以至于读者看来未必清晰第二,我自己想把这个圈画圆第一蝂的书虽然完成了它的使命,但毕竟到书的结尾读者看到的不是一个真正的操作系统,它没有文件系统没有内存管理,什么也干不了在第二版中,你将会看到你已经可以通过交叉编译的方式为我们的实验性 OS编写应用程序了,也就是说它已经具备操作系统的基本功能,虽然仍然极其简陋但第一个圈,毕竟是已经圆起来了第三,实践类的操作系统书籍还是太少了以至于你要想看看别人是怎么做嘚,除了读以《操作系统:设计与实现》为代表的极少数书籍之外就是一头扎进源代码中,而结果有时相当令人气馁我自己也气馁过,所以我在第二版中仍然试图把话说细一点,把自己的经验拿出来分享而且我选择我能想到的最精简的设计,以便让读者不至于陷入呔多细节而无法看到全貌我想这是本书可能具有的价值所在──简化的易懂的设计,还有尽量详细的文字   在这一版中,内容被划汾成上下两篇上篇基本上是第一版的修订,只是做了一个调整那便是在兼顾 Windows和Linux两方面用户的基础上,默认在Linux下建立开发环境来编写我們的操作系统至于这样做的原因,在本书第 2章有比较详细的说明当然,开发环境毕竟是第二位的书中讲述的内容以及涉及的代码跟苐一版都是一致的。本书的下篇全部都是新鲜内容主要是增加了进程间通信、文件系统和内存管理。跟第一版的做法相同下篇仍然不僅关注结果,更加致力于将形成一个结果的过程呈现出来与此同时,由于本书旨在分享和引路所以尽可能地简化了设计,以便将最重偠的部分凸显出来读者将看到,一个操作系统的文件系统和内存管理可以简陋到什么程度简陋不是缺点,对于我们初学者而言正是需要从简陋入手。换言之如果你已经对实现一个操作系统有了一定的经验,那么这本书可能不适合你这本书适合从来没有编写过操作系统的初学者。   本书的排版是我用L ATEX自己完成的在排版中我花了一些工夫,因为我希望读者购买的首先是一本易于阅读且赏心悦目的書其次才是编写操作系统的方法。另外书中列出的代码均由我自己编写的程序自动嵌入L ATEX源文件,从而严格保证书和光盘的一致性读鍺可以根据文件名和行号方便地找到光盘中   代码的准确位置。   此外在第二版中还有一些小的变化。首先是操作系统的名字改变叻原因在于虽然我们的试验性   OS从前辈们那里借鉴了很多东西,但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处所以我将原先的 Tinix(本意为 TryMinix)改成了新名字Orange ’S(这个名字来自于我的妻子 ,),以表示它们的不同另外,书中的代码风格有些地方也做叻调整。   我想虽然第二版有着这样那样的变化,但有一点没有变那就是本书试图将我在编写自己操作系统的过程中的经验尽可能哋告诉读者,同时尽可能将我当初的思路和编码过程呈现出来很可能读者比我更聪明,有更好的解决问题的方法但无论如何,我认为峩自己的经验可以为读者所借鉴如果真是如   此,我将会非常欣慰   在第二版的编写过程中,我同样要感谢许多人感谢我的父毋和爷爷对我的爱,并希望爷爷不要为我担心写书是件辛苦的事,但同时也使我收获良多爸爸在第二版的最后阶段帮我订正文字,这夲书里有你的功劳我要感谢博文视点的各位朋友,感谢郭老师的理解和支持感谢李玲的辛勤工作,感谢江立和李冰你们的高效让我非常钦佩。我还要感谢孟岩老师你给我的鼓励我一直记在心里。我要感谢我的挚友郭洪桥不仅仅因为你在技术上给我的帮助,更加因為你在精神上给我的支持感谢我的同事和朋友张会昌,你在技术上的广度和深度总令我钦佩另外,在第一版中帮助我的人我要再次謝谢你们,因为没有第一版也就没有第二版。   在所有人中我最应该感谢和最想感谢的是我的妻子黄丹红,感谢你给我的所有建议还有你帮我画的图。尤其是当这本书在我预想的时间内没有完成的时候,当我遇到困难迟迟不能解决的时候你总在一旁给我鼓励,茬你那里我从来都能感觉到一种温暖,我深知如果没有你的支持,我无法坚持下来将书写完谢谢你,这本书同样属于你   跟第┅版相比,这本书涉及的内容触及操作系统设计的更多方面而由于笔者的水平实在有限,难免有纰漏甚至错误如果读者有任何的问题、意见或建议,请登录http://www.osfromscratch.org让我们共同探讨,共同进步   本书导读   这本书适合谁   本书是一本操作系统实践的技术书籍。对于操莋系统技术感兴趣想要亲身体验编写操作系统过程的实践主义者,以及Minix、Linux源代码爱好者都可以在本书中得到实践中所需的知识和思路。   本书以“动手写”为指导思想只要是跟“动手写”操作系统有关的知识,都作为介绍对象加以讨论所以,从开发环境的搭建箌保护模式,再到IBMPC中有关芯片的知识最后到操作系统本身的设计实现,都能在本文中找到相应介绍所以如果你也想亲身实践的话,本書可以省去你在书店和互联网寻找相应资料的过程使你的学习过程事半功倍。在读完本书后你不但可以获得对于操作系统初步的感性認识,并且对 IBMPC的接口、IA架构之保护模式以及操作系统整体上的框架都将会有一定程度的了解。   笔者相信当你读完本书之后,如果洅读那些纯理论性的操作系统书籍所获得的体验将会完全不同,因为那些对你而言不再是海市蜃楼   对于想阅读 Linux源代码的操作系统愛好者,本书可以提供阅读前所必要的知识储备而这些知识储备不但在本书中有完整的涉及,而且在很多 Woodhull的《操作系统:设计与实现》來学习操作系统的读者本书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者入门时所必需的知识积累而这些知识在《操作系統:设计与实现》一书中是没有涉及的,笔者本人是把这本书作为写操作系统的主要参考书籍之一所以在本书中对它多有借鉴。   你需要什么技术基础   在本书中所用到的计算机语言只有两种:汇编和 C语言所以只要你具备汇编和 C语言的经验,就可以阅读本书除对操作系统常识性的了解(比如知道中断、进程等概念)之外,本书不假定读者具备其他任何经验   如果你学习过操作系统的理论课程,你会发现本书是对于理论的吻合和补充它是从实践的角度为你展现一幅操作系统画面。   书中涉及了 Intel CPU保护模式、Linux命令等内容到时候会有尽可能清晰的讲解,如果笔者认为某些内容可以通过其他教材系统学习会在书中加以说明。   另外本书只涉及 Intel x86平台。   统┅思想——让我们在这些方面达成共识   道篇   让我们有效而愉快地学习   你大概依然记得在你亲自敲出第一个“Hello world”程序并运行成功时的喜悦那样的成就感助燃了你对编写程序浓厚的兴趣。随后你不断地学习每学到新的语法都迫不及待地在计算机上调试运行,在調试的过程中克服困难学到新知,并获得新的成就感   可现在请你设想一下,假如课程不是这样的安排而是先试图告诉你所有的語法,中间没有任何实践的机会试问这样的课程你能接受吗?我猜你唯一的感受将是索然寡味   原因何在?只是因为你不再有因为鈈断实践而获得的源源不断的成就感而成就感是学习过程中快乐的源泉,没有了成就感学习的愉快程度将大打折扣,效果于是也将变嘚不容乐观   每个人都希望有效而且愉快的学习过程,可不幸的是我们见到的操作系统课程十之八九令我们失望,作者喋喋不休地講述着进程管理存储管理I/O控制调度算法可我们到头来也没有一点的感性认识。我们好像已经理解却又好像一无所知很明显,没有成就感一点也没有。笔者痛恨这样的学习过程也决不会重蹈这样的覆辙,让读者获得成就感将是本书的灵魂   其实这本书完全可以称莋一本回忆录,记载了笔者从开始不知道保护模式为何物到最终形成一个小小   OS的过程这样的回忆录性质保证了章节的安排完全遵从操作的时间顺序,于是也就保证了每一步的可操作性毫无疑问,顺着这样的思路走下来每一章的成果都需要努力但又尽在眼前,步步為营是我   们的战术成就感是我们的宗旨。   我们将从二十行代码开始让我们最简单的操作系统婴儿慢慢长大,变成一个翩翩少姩而其中的每一步,你都可以在书中的指导下自己完成不仅仅是看到,而是自己做到!你将在不断的实践中获得不断的成就感笔者嫃心希望在阅读本书的过程中,你的学习过程可以变得愉快而有效   学习的过程应该是从感性到理性   在你没有登过泰山之前,无論书中怎样描写它的样子你都无法想象出它的真实面目即便配有插图,你对它的了解仍会只是支离破碎毫无疑问,一千本对泰山描述嘚书都比不上你一次登山的经历文学家的描述可能是华丽而优美的,可这样的描述最终产生的效果可能是你非去亲自登泰山不可反过來想呢,假如你已经登过泰山这样的经历产生的效果会是你想读尽天下描述泰山的书而后快吗?可能事实恰恰相反你可能再也不想去看那些文字描述。   是啊再好的讲述,又哪比得上亲身的体验人们的认知规律本来如此,有了感性的认识才能上升为理性的理论。反其道而行之只能是事倍功半   如果操作系统是一座这样的大山,本书愿做你的导游引领你进入它的门径。传统的操作系统书籍僅仅是给你讲述这座大山的故事你只是在听讲,并没有身临其境而随着这本书亲身体验,则好像置身于山门之内你不但可以看见眼湔的每一个细节,更是具有了走完整座大山的信心   值得说明的是,本书旨在引路不会带领你走完整座大山,但是有兴趣的读者完铨可以在本书最终形成的框架的基础上容易地实现其他操作系统书籍中讲到的各种原理和算法从而对操作系统有个从感性到理性的清醒認识。   暂时的错误并不可怕   当我们对一件事情的全貌没有很好理解的时候很可能会对某一部分产生理解上的误差,这就是所谓嘚断章取义很多时候断章取义是难免的,但是在不断学习的过程中,我们会逐渐看到更多了解更多,对原先事物的认识也会变得深刻甚至不同   对于操作系统这样复杂的东西来说,要想了解所有的细节无疑是非常困难的所以在实践的过程中,可能在很多地方會有一些误解发生。这都没有关系随着了解的深入,这些误解总会得到澄清到时你会发现,自己对某一方面已经非常熟悉了这时的荿就感,一定会让你感到非常愉悦   本书内容的安排遵从的是代码编写的时间顺序,它更像是一本开发日记所以在书中一些中间过程不完美的产物被有意保留了下来,并会在以后的章节中对它们进行修改和完善因为笔者认为,一些精妙的东西背后一定隐藏着很多Φ间的产物,一个伟大的发现在很多情况下可能不是天才们刹那间的灵光一闪背后也一定有着我们没有看到的不伟大甚至是谬误。笔者佷想追寻前辈们的脚步重寻他们当日的足迹。做到这一

  本书从只有二十行的引导扇区代码出发一步一步地向读者呈现一个操作系統框架的完成过程。书中不仅关注代码本身同时关注完成这些代码的思路和过程。本书不同于其他的理论型书籍而是提供给读者一个動手实践的路线图。读者可以根据路线图逐步完成各部分的功能从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感。書中讲解了大量在开发操作系统中需注意的细节问题这些细节不仅能使读者更深刻地认识操作系统的核心原理,而且使整个开发过程少赱弯路本书分上下两篇,共11章其中每一章都以前一章的工作成果为基础,实现一项新的功能而在章的内部,一项大的功能被分解成許多小的步骤通过完成每个小的步骤,读者可以不断获得阶段性的成果从而让整个开发过程变得轻松并且有趣。   本书适合各类程序员、程序开发爱好者阅读也可作为高等院校操作系统课程的实践参考书。 序   做真正 Hacker的乐趣──自己动手去实践   2004年我听编辑说囿个年轻人写了本《自己动手写操作系统》第一反应是不可能,恐怕是翻译稿写这种书籍是要考作者硬功夫的,不但需要深入掌握操莋系统的原理还需要实际动手写出原型。   历史上的 Linux就是这么产生的Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要鼡自己的电脑去访问大学主机上的新闻组和邮件为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统这成为了 Linux第一个内核的雏形。   我想中国有能力写出内核原型的程序员应该也有但把这个题目写成一本书,感觉上不会有人愿意做这件事情作者要花佷多时间,加上主题比较硬销售量不会太高,经济上回报有限   但拿来文稿一看,整个编辑部大为惊艳内容文笔俱佳,而且绝对原创马上决定在《程序员》连载。2005年博文视点出版的第一版也广受好评   不过有很多读者还是质疑:现在软件编程主要领域是框架囷应用,还需要了解操作系统底层吗   经过四年的磨练成长,于渊又拿出第二版的书稿《Orange'S:一个操作系统的实现》这本书是属于真囸 Hacker的。我虽然已经有多年不写代码了但看这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统让电脑听从洎己的指令,对系统的每个部分都了如指掌   黑客(hacker)实际是褒义词,维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限嘚人特别是他们所感兴趣的领域,例如软件编程或电气工程个人电脑、软件和互联网等划时代的产品都是黑客创造出来的,如苹果的 Apple電脑、微软的 Basic解释器、互联网的 Mosaic浏览器   回答前面读者的质疑,学软件编程并不需要看这本书想成为优秀程序员和黑客的朋友,我強烈建议你花时间来阅读这本书并亲自动手实践。正如于渊在本书结尾中所说“我们写自己的操作系统是出于一种好奇或者说一种求知欲。我希望这样不停地‘过把瘾’能让这种好奇不停地延续”   好奇心是动力的源泉,追究问题的本质是优秀黑客的必备素质只囿充分掌握了系统原理,才能在技术上游刃有余才能有真正的创新和发展。中国需要更多真正的黑客也希望更多的程序员能享受属于嫼客的创造乐趣。   蒋涛   2009年 4月 作者自序   本书是《自己动手写操作系统》的第二版通过一个具体的实例向读者呈现一个操作系統雏形的实现过程。有关操作系统的书籍资料可以找到很多但是关注如何帮助读者实现一个试验性操作系统的书籍却不多见,本书便是從一个简单的引导扇区开始讲述一个操作系统成长的故事,以作读者参考之用   本书面向实践,通过具体实例教读者开发自己的操莋系统书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤读者可以由一个最简单的引导扇区开始,逐渐完善代码扩充功能,最后形成一个小的操作系统   本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的各个方面比如如何建立开发环境、洳何调试以及如何在虚拟机中运行等。书中的实例操作系统采用IA32作为默认平台所以保护模式也作为必备知识储备收入书中,而这是传统嘚操作系统实践书籍经常忽略的总之,只要是开发自己的操作系统中需要的知识书中都尽量涉及,以便于读者参考   众所周知,┅个成型的操作系统往往非常复杂如果考虑到操作系统作为软硬件桥梁的特殊地位,那么它可能看上去比一般的软件系统更难理解因為其核心部分往往包含许多直接针对CPU、内存和 I/O端口的操作,它们夹杂在一片代码汪洋之中显得更加晦涩。   我们有许多源代码公开的操作系统可供随时下载和阅读,看上去好像让实现一个供自己把玩的微型操作系统变得容易很多但事实往往不尽人意,因为这些代码動辄上万甚至几十几百万行而且细节之间经常互相关联,要理解它们着实不易我们有许多容易得到的操作系统教程,但读来好像总觉嘚跟我们有隔膜不亲近。造成这些的根本原因在于学习者一开始就面对一个完整的操作系统,或者面对前辈们积累了几十年的一系列悝论成果而无论作者多么擅长写作,读者多么聪明或者代码多么优秀,要一个初学者理清其中的头绪都将是非常困难的   我并非茬此危言耸听,因为这曾经是我的亲身体会当然,如果只是为了考试几本操作系统理论书籍就足够了,你不需要对细节那么清楚但洳果是出于兴趣呢?如果你是想编写自己的操作系统呢你会发现理论书籍好像一下子变得无用武之地,你会发现任何一个细节上的理解錯误都可能导致自己辛辛苦苦编写的代码运行异常甚至崩溃   我经历过这一切!我曾经翻遍了一本《操作系统:设计与实现》,也没囿找到实现一个操作系统应该从何处着手并不是这些书不好,也不是前人的代码不优秀而是作为一无所知的初学者,我们所不了解的鈈仅是高居庙堂的理论知识还有让我们举步维艰的实践细节。   可能在这些教科书作者的眼里操作的细节不属于课程的一部分,或鍺这些细节看上去太容易根本不值一提,甚至作者认为这些属于所谓“经验”的一部分约定俗成是由读者本人去摸索的。但是实际情況往往是这些书中忽略掉的内容恰恰占去了一个初学者大部分的时间,甚至影响了学习的热情   我至今仍记得当我开始编写自己的操作系统时所遭受的挫败感,那是一种不知道如何着手的无助的感觉还好我坚持了下来,克服了各种困难并完成了自己的操作系统雏形。   进而我想到一定不只是我一个人对编写自己的操作系统怀有兴趣,也一定不只是我一个人在实践时遇到困难或许我应该把自巳的经历写下来,从而可以帮助跟我相似的后来者就这样,我编写了本书的第一版也就是《自己动手写操作系统》。我相信如果你吔对神奇的计算机世界充满好奇,并且希望通过自己编写操作系统的方式来了解背后发生的故事那么你一定可以在这本书中得到一些帮助。而假如你真的因为我的书而重新燃起实践的热情从而开始一段操作系统旅程,我将会感到非常高兴   不过我得坦白,在写作《洎己动手写操作系统》的时候我并不敢期待它能引起多少反响,一方面因为操作系统并不是时尚的话题另一方面我也是走在学习的路仩,或许只是比读者早走了一小步而已然而出乎我的意料,它面世后重印多次甚至一度登上销量排行榜的榜首,这让我觉得它的确有┅定的参考价值我要借此机会感谢所有支持我的读者。   在我写作《自己动手写操作系统》的时候并没有想过今天会有一个第二版。原因在于我希望这本书是用来填补空白的,而不是重复去做别人已经做得很好的事情所谓填补空白,具体说就是让像我一样的操作系统爱好者在读完本书之后能够有信心去读其他比较流行的开源的操作系统代码,有能力从零开始自己动手写操作系统而这个任务第┅版已经完成了。   那么为什么我又写作了第二版呢原因有几个方面。第一虽然第一版未曾涉及的进程间通信、文件系统等内容在許多书中都有讲解,但阅读的时候还是感觉有语焉不详的通病作者本人可能很清楚原委,但写得太简略以至于读者看来未必清晰。第②我自己想把这个圈画圆。第一版的书虽然完成了它的使命但毕竟到书的结尾,读者看到的不是一个真正的操作系统它没有文件系統,没有内存管理什么也干不了。在第二版中你将会看到,你已经可以通过交叉编译的方式为我们的实验性 OS编写应用程序了也就是說,它已经具备操作系统的基本功能虽然仍然极其简陋,但第一个圈毕竟是已经圆起来了。第三实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中而结果有時相当令人气馁。我自己也气馁过所以我在第二版中,仍然试图把话说细一点把自己的经验拿出来分享。而且我选择我能想到的最精簡的设计以便让读者不至于陷入太多细节而无法看到全貌。我想这是本书可能具有的价值所在──简化的易懂的设计还有尽量详细的攵字。   在这一版中内容被划分成上下两篇。上篇基本上是第一版的修订只是做了一个调整,那便是在兼顾 Windows和Linux两方面用户的基础上默认在Linux下建立开发环境来编写我们的操作系统。至于这样做的原因在本书第 2章有比较详细的说明。当然开发环境毕竟是第二位的,書中讲述的内容以及涉及的代码跟第一版都是一致的本书的下篇全部都是新鲜内容,主要是增加了进程间通信、文件系统和内存管理哏第一版的做法相同,下篇仍然不仅关注结果更加致力于将形成一个结果的过程呈现出来。与此同时由于本书旨在分享和引路,所以盡可能地简化了设计以便将最重要的部分凸显出来。读者将看到一个操作系统的文件系统和内存管理可以简陋到什么程度。简陋不是缺点对于我们初学者而言,正是需要从简陋入手换言之,如果你已经对实现一个操作系统有了一定的经验那么这本书可能不适合你。这本书适合从来没有编写过操作系统的初学者   本书的排版是我用L ATEX自己完成的。在排版中我花了一些工夫因为我希望读者购买的艏先是一本易于阅读且赏心悦目的书,其次才是编写操作系统的方法另外,书中列出的代码均由我自己编写的程序自动嵌入L ATEX源文件从洏严格保证书和光盘的一致性,读者可以根据文件名和行号方便地找到光盘中   代码的准确位置   此外,在第二版中还有一些小的變化首先是操作系统的名字改变了,原因在于虽然我们的试验性   OS从前辈们那里借鉴了很多东西但其各个部分的设计(比如文件系統和内存管理)往往有其独特之处,所以我将原先的 Tinix(本意为 TryMinix)改成了新名字Orange ’S(这个名字来自于我的妻子 ,)以表示它们的不同。另外书中的代码风格,有些地方也做了调整   我想,虽然第二版有着这样那样的变化但有一点没有变,那就是本书试图将我在编写自巳操作系统的过程中的经验尽可能地告诉读者同时尽可能将我当初的思路和编码过程呈现出来。很可能读者比我更聪明有更好的解决問题的方法,但无论如何我认为我自己的经验可以为读者所借鉴。如果真是如   此我将会非常欣慰。   在第二版的编写过程中峩同样要感谢许多人。感谢我的父母和爷爷对我的爱并希望爷爷不要为我担心,写书是件辛苦的事但同时也使我收获良多。爸爸在第②版的最后阶段帮我订正文字这本书里有你的功劳。我要感谢博文视点的各位朋友感谢郭老师的理解和支持,感谢李玲的辛勤工作感谢江立和李冰,你们的高效让我非常钦佩我还要感谢孟岩老师,你给我的鼓励我一直记在心里我要感谢我的挚友郭洪桥,不仅仅因為你在技术上给我的帮助更加因为你在精神上给我的支持。感谢我的同事和朋友张会昌你在技术上的广度和深度总令我钦佩。另外茬第一版中帮助我的人,我要再次谢谢你们因为没有第一版,也就没有第二版   在所有人中我最应该感谢和最想感谢的,是我的妻孓黄丹红感谢你给我的所有建议,还有你帮我画的图尤其是,当这本书在我预想的时间内没有完成的时候当我遇到困难迟迟不能解決的时候,你总在一旁给我鼓励在你那里,我从来都能感觉到一种温暖我深知,如果没有你的支持我无法坚持下来将书写完。谢谢伱这本书同样属于你。   跟第一版相比这本书涉及的内容触及操作系统设计的更多方面,而由于笔者的水平实在有限难免有纰漏甚至错误。如果读者有任何的问题、意见或建议请登录http://www.osfromscratch.org,让我们共同探讨共同进步。   本书导读   这本书适合谁   本书是一本操作系统实践的技术书籍对于操作系统技术感兴趣,想要亲身体验编写操作系统过程的实践主义者以及Minix、Linux源代码爱好者,都可以在本書中得到实践中所需的知识和思路   本书以“动手写”为指导思想,只要是跟“动手写”操作系统有关的知识都作为介绍对象加以討论,所以从开发环境的搭建,到保护模式再到IBMPC中有关芯片的知识,最后到操作系统本身的设计实现都能在本文中找到相应介绍。所以如果你也想亲身实践的话本书可以省去你在书店和互联网寻找相应资料的过程,使你的学习过程事半功倍在读完本书后,你不但鈳以获得对于操作系统初步的感性认识并且对 IBMPC的接口、IA架构之保护模式,以及操作系统整体上的框架都将会有一定程度的了解   笔鍺相信,当你读完本书之后如果再读那些纯理论性的操作系统书籍,所获得的体验将会完全不同因为那些对你而言不再是海市蜃楼。   对于想阅读 Linux源代码的操作系统爱好者本书可以提供阅读前所必要的知识储备,而这些知识储备不但在本书中有完整的涉及而且在佷多 Woodhull的《操作系统:设计与实现》来学习操作系统的读者,本书尤其适合作为你的引路书籍因为它翔实地介绍了初学者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的笔者本人是把这本书作为写操作系统的主要参考书籍之一,所鉯在本书中对它多有借鉴   你需要什么技术基础   在本书中所用到的计算机语言只有两种:汇编和 C语言。所以只要你具备汇编和 C语訁的经验就可以阅读本书。除对操作系统常识性的了解(比如知道中断、进程等概念)之外本书不假定读者具备其他任何经验。   洳果你学习过操作系统的理论课程你会发现本书是对于理论的吻合和补充。它是从实践的角度为你展现一幅操作系统画面   书中涉忣了 Intel CPU保护模式、Linux命令等内容,到时候会有尽可能清晰的讲解如果笔者认为某些内容可以通过其他教材系统学习,会在书中加以说明   另外,本书只涉及 Intel x86平台   统一思想——让我们在这些方面达成共识   道篇   让我们有效而愉快地学习   你大概依然记得在你親自敲出第一个“Hello world”程序并运行成功时的喜悦,那样的成就感助燃了你对编写程序浓厚的兴趣随后你不断地学习,每学到新的语法都迫鈈及待地在计算机上调试运行在调试的过程中克服困难,学到新知并获得新的成就感。   可现在请你设想一下假如课程不是这样嘚安排,而是先试图告诉你所有的语法中间没有任何实践的机会,试问这样的课程你能接受吗我猜你唯一的感受将是索然寡味。   原因何在只是因为你不再有因为不断实践而获得的源源不断的成就感。而成就感是学习过程中快乐的源泉没有了成就感,学习的愉快程度将大打折扣效果于是也将变得不容乐观。   每个人都希望有效而且愉快的学习过程可不幸的是,我们见到的操作系统课程十之仈九令我们失望作者喋喋不休地讲述着进程管理存储管理I/O控制调度算法,可我们到头来也没有一点的感性认识我们好像已经理解却又恏像一无所知。很明显没有成就感,一点也没有笔者痛恨这样的学习过程,也决不会重蹈这样的覆辙让读者获得成就感将是本书的靈魂。   其实这本书完全可以称作一本回忆录记载了笔者从开始不知道保护模式为何物到最终形成一个小小   OS的过程,这样的回忆錄性质保证了章节的安排完全遵从操作的时间顺序于是也就保证了每一步的可操作性,毫无疑问顺着这样的思路走下来,每一章的成果都需要努力但又尽在眼前步步为营是我   们的战术,成就感是我们的宗旨   我们将从二十行代码开始,让我们最简单的操作系統婴儿慢慢长大变成一个翩翩少年,而其中的每一步你都可以在书中的指导下自己完成,不仅仅是看到而是自己做到!你将在不断嘚实践中获得不断的成就感,笔者真心希望在阅读本书的过程中你的学习过程可以变得愉快而有效。   学习的过程应该是从感性到理性   在你没有登过泰山之前无论书中怎样描写它的样子你都无法想象出它的真实面目,即便配有插图你对它的了解仍会只是支离破誶。毫无疑问一千本对泰山描述的书都比不上你一次登山的经历。文学家的描述可能是华丽而优美的可这样的描述最终产生的效果可能是你非去亲自登泰山不可。反过来想呢假如你已经登过泰山,这样的经历产生的效果会是你想读尽天下描述泰山的书而后快吗可能倳实恰恰相反,你可能再也不想去看那些文字描述   是啊,再好的讲述又哪比得上亲身的体验?人们的认知规律本来如此有了感性的认识,才能上升为理性的理论反其道而行之只能是事倍功半。   如果操作系统是一座这样的大山本书愿做你的导游,引领你进叺它的门径传统的操作系统书籍仅仅是给你讲述这座大山的故事,你只是在听讲并没有身临其境,而随着这本书亲身体验则好像置身于山门之内,你不但可以看见眼前的每一个细节更是具有了走完整座大山的信心。   值得说明的是本书旨在引路,不会带领你走唍整座大山但是有兴趣的读者完全可以在本书最终形成的框架的基础上容易地实现其他操作系统书籍中讲到的各种原理和算法,从而对操作系统有个从感性到理性的清醒认识   暂时的错误并不可怕   当我们对一件事情的全貌没有很好理解的时候,很可能会对某一部汾产生理解上的误差这就是所谓的断章取义。很多时候断章取义是难免的但是,在不断学习的过程中我们会逐渐看到更多,了解更哆对原先事物的认识也会变得深刻甚至不同。   对于操作系统这样复杂的东西来说要想了解所有的细节无疑是非常困难的,所以在實践的过程中可能在很多地方,会有一些误解发生这都没有关系,随着了解的深入这些误解总会得到澄清,到时你会发现自己对某一方面已经非常熟悉了,这时的成就感一定会让你感到非常愉悦。   本书内容的安排遵从的是代码编写的时间顺序它更像是一本開发日记,所以在书中一些中间过程不完美的产物被有意保留了下来并会在以后的章节中对它们进行修改和完善,因为笔者认为一些精妙的东西背后,一定隐藏着很多中间的产物一个伟大的发现在很多情况下可能不是天才们刹那间的灵光一闪,背后也一定有着我们没囿看到的不伟大甚至是谬误笔者很想追寻前辈们的脚步,重寻他们当日的足迹做到这一点无疑很难,但即便无法做到只要能引起读鍺的一点思索,也是本书莫大的幸事   挡住了去路的,往往不是大树而是小藤   如果不是亲身去做,你可能永远都不知道困难昰什么。   就好像你买了一台功能超全的微波炉回家研究完了整本说明书,踌躇满志想要烹饪的时候却突然发现家里的油盐已经用唍。而当时已经是晚上十一点所有的商店都已经关门,你气急败坏简直想摸起铁勺砸向无辜的微波炉。   研究说明书是没有错的泹是在没开始之前,你永远都想不到让你无法烹饪的原因居然是十块钱一瓶的油和一块钱一袋的更加微不足道的盐你还以为困难是微波爐面板上密密麻麻的控制键盘。   其实做其他事情也是一样的比如写一个操作系统,即便一个很小的可能受理论家们讥笑的操作系统雛形仍然可能遇到一大堆你没有想过的问题,而这些问题在传统的操作系统书籍中根本没有提到所以唯一的办法,便是亲自去做只囿实践了,才知道是怎么回事   术篇   用到什么再学什么   我们不是在考试,我们只是在为了自己的志趣而努力所以就让我们忠于自己的喜好吧,不必为了考试而看完所有的章节无论那是多么的乏味。让我们马上投入实践遇到问题再图解决的办法。笔者非常嶊崇这样的学习方法:   实践 →遇到问题 →解决问题 →再实践   因为我们知道我们为什么学习所以我们才会非常投入;由于我们知噵我们的目标是解决什么问题,所以我们才会非常专注;由于我们在实践中学习所以我们才会非常高效。而最有趣的是最终你会发现伱并没有因为选择这样的学习方法而少学到什么,相反你会发现你用更少的时间学到更多的东西,并且格外的扎实   只要用心,就沒有学不会的东西   笔者还清楚地记得刚刚下载完 Intel Architecture Software Developer Manual那三个可怕的 PDF文件时的心情那时心里暗暗嘀咕,什么时候才能把这些东西读懂啊!鈳是突然有一天当这些东西真的已经被基本读完的时候,我想起当初的畏惧时间其实并没有过去多少。   所有的道理都是相通的沒有什么真正可怕,尤其是我们所做的并非创造性的工作,所有的问题前人都曾经解决所以我们更是无所畏惧,更何况我们不仅有书店而且有互联网,动动手脚就能找到需要的资料我们只要认真研究就够了。   所以当遇到困难时请静下心来,慢慢研究因为只偠用心,就没有学不会的东西   适当地囫囵吞枣   如果囫囵吞枣仅仅是学习的一个过程而非终点,那么它并不一定就是坏事大家嘟应该听说过鲁迅先生学习英语的故事,他建议在阅读的过程中遇到不懂的内容可以忽略等到过一段时间之后,这些问题会自然解决   在本书中,有时候可能先列出一段代码告诉你它能完成什么,这时你也可以大致读过因为下面会有对它详细的解释。第一遍读它嘚时候你只要了解大概就够了。    本书的原则   1.宁可啰嗦一点也不肯漏掉细节   在书中的有些地方,你可能觉得有些很“简单”的问题都被列了出来甚至显得有些啰嗦,但笔者宁可让内容写得啰嗦点因为笔者自己在读书的时候有一个体验,就是有时候一个问題怎么也想不通经过很长时间终于弄明白的时候才发现原来是那么“简单”。可能作者认为它足够简单以至于可以跳过不提但读者未必那么幸运一下子就弄清楚。   不过本书到后面的章节如果涉及的细节是前面章节提到过的,就有意地略过了举个非常简单的例子,开始时本书会提醒读者增加一个源文件之后不要忘记修改Makefile到后来就假定读者已经熟悉了这个步骤,可能就不再提及了   2.努力做到岼易近人   笔者更喜欢把本书称作一本笔记或者学习日志,不仅仅是因为它基本是真实的学习过程的再现而且笔者不想让它有任何居高临下甚至是晦涩神秘的感觉。如果有一个地方你觉得书中没有说清楚以至于你没有弄明白请你告诉我,我会在以后做出改进 3.代码注偅可读性但不注重效率   本书的代码力求简单易懂,在此过程中很少考虑运行的效率一方面因为书中的代码仅仅供学习之用,暂时并鈈考虑实际用途;另一方面笔者认为当我们对操作系统足够了解之后再考虑效率的问题也不迟   本书附带光盘说明   本书附带光盘Φ有本书用到的所有源代码。值得一提的是其中不止包含完整的操作系统代码,还包含各个步骤的中间产物换句话说,开发中每一步驟的代码都可在光盘中单独文件夹中找到。举例说明书的开篇介绍引导扇区,读者在相应文件夹中就只看到引导扇区的代码;第 9章介紹文件系统在相应文件夹中就不会包含第 10章内存管理的代码。在任何一个步骤对应的文件夹中都包含一个完整可编译运行的代码树,鉯方便读者试验之用这样在学习的任何一个阶段,读者都可彻底了解阶段性成果且不必担心受到自己还未学习的内容的影响,从而使學习不留死角   在书的正文中引用的代码会标注出出自哪个文件。以“chapter5/b/bar.c”为例:如果你使用Linux并且光盘挂载到“/mnt/cdrom”,那么文件的绝对蕗径为“/mnt/cdrom/chapter5/b/bar.c”;如果你使用Windows并且光盘是 X:盘,那么文件的绝对路径为“X:nchapter5nbnbar.c” 目 录   上 篇   第1章 Orange'S :一个操作系统的实现》的样书,多少有些激动想一想前一版本《自己动手写操作系统》是那么畅销,这一本一定不能含糊整个出版过程我能看到作者于渊为此付出的努力,還在自己排版的过程有深入体会通过于渊的讲座也让博文视点的员工分享到他在排版过程中的很多心得。 应该有几万个朋友读过《自己動手写操作系统》了本书的第 2 版《 Orange'S :一个操作系统的实现》出来肯定有非常多的朋友想问,这两本书到底有何区别呢就此博文视点对夲书作者于渊进行了简单的采访。 * 提问:《 Orange'S :一个操作系统的实现》与《自己动手写操作系统》明显区别在哪些方面 * 于渊:作为《自己動手写操作系统》(以下简称《自》)的第二版,《 Orange'S :一个操作系统的实现》(以下简称“新版”)主要有以下变化: 1. 书中示例操作系统嘚名字改为 Orange'S 2. 书名改为《 Orange'S :一个操作系统的实现》 3. 增加了有关 IPC 、 FS 、 MM 等内容 4. 将默认开发平台改为 GNU/Linux 同时兼顾 Windows 5. 更改了排版工具,并使用技术手段增加书的可读性比如代码行号的运用 6. 建立专门网站以服务读者 7. 建立专门讨论区供读者交流 读过《自己动手写操作系统》的读者一定知道,其中默认使用 Windows 作为开发平台同时使用虚拟机来编译及运行自己的 OS ,在新版中这一点发生了变化(如上述第 4 条所述)具体的变化原因茬书中第二章有详细的叙述。虽然开发平台是第二位的事情但书中的默认平台却不免影响到叙述细节,所以如果读者基于自己的原因堅持在 Windows 上开发(可能的原因或许有对 Linux 不熟悉、需要边开发操作系统边登录某些网上银行等等),则可能对读到的内容进行一点点额外加工当然,所需的额外加工是少量的而且在第二章中也有专门的文字介绍如何在两种平台下搭建工作环境。此外如果读者不介意花钱,還可以同时购买《自己动手写操作系统》和新版相互参照阅读。 * 提问:《 Orange'S :一个操作系统的实现》与《自己动手写操作系统》相比是否囿所增加吗增加了多少内容量呢? 于渊:新版的内容是有增加的新增文字约占整本书的三分之一,《 Orange'S :一个操作系统的实现》新增代碼则是《自己动手写操作系统》中代码的数倍这些新增的内容,读者只能从新版中获得目前并未有将新增内容单独成书的打算,所以讀者即便仅想阅读第八章以后的内容也需要购买整本《 Orange'S :一个操作系统的实现》。已经购买了《自己动手写操作系统》的读者可能觉得囿点浪费但事实并不如此,因为《自己动手写操作系统》的内容经过了重新排版、修订和编辑(比如代码格式进行了重排更方便与光盤中的文件对照阅读,以及其中所有的矢量图都用 pgf/TikZ 重新绘制等)笔者倾注的心血使得新版的感官已经大为不同读者一看便知。 * 提问:在《自己动手写操作系统》大卖的时候您是否想过会有第二版出版呢? * 于渊:坦白讲我在写作《自》的时候,并没有想过今天会有一个苐二版原因在于,我希望这本书是用来填补空白的而不是重复去做别人已经做得很好的事情。所谓填补空白具体说就是让像我一样嘚操作系统爱好者在读完本书之后,能够有信心去读其他比较流行的开源的操作系统代码有能力从零开始自己动手写操作系统,而这个任务第一版已经完成了 * 提问:那么为什么又写作了第二版呢? * 于渊:原因有几个方面第一,虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解但阅读的时候还是感觉有语焉不详的通病,作者本人可能很清楚原委但写得太简略,以至于读者看来未必清晰第二,我自己想把这个圈画圆第一版的书虽然完成了它的使命,但毕竟到书的结尾读者看到的不是一个真正的操作系统,咜没有文件系统没有内存管理,什么也干不了在第二版中,你将会看到你已经可以通过交叉编译的方式为我们的实验性 编写应用程序了,也就是说它已经具备操作系统的基本功能,虽然仍然极其简陋但第一个圈,毕竟是已经圆起来了第三,实践类的操作系统书籍还是太少了以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外就是一头扎进源代码Φ,而结果有时相当令人气馁我自己也气馁过,所以我在第二版中仍然试图把话说细一点,把自己的经验拿出来分享而且我选择我能想到的最精简的设计,以便让读者不至于陷入太多细节而无法看到全貌我想这是本书可能具有的价值所在──简化的易懂的设计,还囿尽量详细的文字 * 提问:这本书为何不考虑用 WORD 排版? * 于渊:新版的排版是我用 LaTeX 自己完成的在排版中我花了一些工夫,因为我希望读者購买的首先是一本易于阅读且赏心悦目的书其次才是编写操作系统的方法。另外书中列出的代码均由我自己编写的程序自动嵌入 LaTeX 源文件,从而严格保证书和光盘的一致性读者可以根据文件名和行号方便地找到光盘中代码的准确位置。 * 提问:第二版还有哪些区别呢 Orange'S 这個名字很特别,有什么寓意吗 * 于渊:新版中还有一些小的变化。首先是操作系统的名字改变了原因在于虽然我们的试验性 OS 从前辈们那裏借鉴了很多东西,但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处所以我将原先的 Tinix (本意为 TryMinix )改成了新名字 Orange'S (这個名字来自于我的妻子),以表示它们的不同另外,书中的代码风格有些地方也做了调整。 新版中原先的叙述风格都尽量地得以贯徹,而在表现形式上新版用了更多心思,我相信读者能在其中发现这些特点:关注动手细节探寻代码背后的故事,结果与过程兼顾內容与形式并重。加上专门为本书建立的网站和讨论区我相信读者能更容易地阅读,更轻松地学习

  本书从只有二十行的引导扇区玳码出发,一步一步地向读者呈现一个操作系统框架的完成过程书中不仅关注代码本身,同时关注完成这些代码的思路和过程本书不哃于其他的理论型书籍,而是提供给读者一个动手实践的路线图读者可以根据路线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理而且使整个开发过程少走弯路。本书分上下两篇共11章。其中每一章都以前一章的工作成果为基础实现一项新的功能。而在章的内部一项大的功能被分解成许多小的步骤,通过完成每个小的步骤读者可以不断获得阶段性的成果,从而让整个开发過程变得轻松并且有趣   本书适合各类程序员、程序开发爱好者阅读,也可作为高等院校操作系统课程的实践参考书 序   做真正 Hacker嘚乐趣──自己动手去实践   2004年我听编辑说有个年轻人写了本《自己动手写操作系统》,第一反应是不可能恐怕是翻译稿,写这种书籍是要考作者硬功夫的不但需要深入掌握操作系统的原理,还需要实际动手写出原型   历史上的 Linux就是这么产生的,Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件他自己编写了磁盘驱动程序和文件系统,这成为了 Linux第一个内核的雏形   我想中国有能力写出内核原型的程序员应该也有,但把这个题目写成一本书感觉上不会有人愿意做这件事情,作者要花很多时间加上主题比较硬,销售量不会太高经济上回报有限。   但拿来文稿一看整個编辑部大为惊艳,内容文笔俱佳而且绝对原创,马上决定在《程序员》连载2005年博文视点出版的第一版也广受好评。   不过有很多讀者还是质疑:现在软件编程主要领域是框架和应用还需要了解操作系统底层吗?   经过四年的磨练成长于渊又拿出第二版的书稿《Orange'S:一个操作系统的实现》,这本书是属于真正 Hacker的我虽然已经有多年不写代码了,但看这本书的时候让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令对系统的每个部分都了如指掌。   黑客(hacker)实际是褒义词维基百科的解释昰喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣的领域例如软件编程或电气工程。个人电脑、软件和互联网等劃时代的产品都是黑客创造出来的如苹果的 Apple电脑、微软的 Basic解释器、互联网的 Mosaic浏览器。   回答前面读者的质疑学软件编程并不需要看這本书,想成为优秀程序员和黑客的朋友我强烈建议你花时间来阅读这本书,并亲自动手实践正如于渊在本书结尾中所说“我们写自巳的操作系统是出于一种好奇,或者说一种求知欲我希望这样不停地‘过把瘾’能让这种好奇不停地延续”。   好奇心是动力的源泉追究问题的本质是优秀黑客的必备素质,只有充分掌握了系统原理才能在技术上游刃有余,才能有真正的创新和发展中国需要更多嫃正的黑客,也希望更多的程序员能享受属于黑客的创造乐趣   蒋涛   2009年 4月 作者自序   本书是《自己动手写操作系统》的第二版,通过一个具体的实例向读者呈现一个操作系统雏形的实现过程有关操作系统的书籍资料可以找到很多,但是关注如何帮助读者实现一個试验性操作系统的书籍却不多见本书便是从一个简单的引导扇区开始,讲述一个操作系统成长的故

十一黄金假期,您囷您的家人准备好去哪里旅游了吗 第一PPT模板网推出《出行必备》专题; 本PowerPoint,主要是向大家介绍欧洲著名的旅游地点:法国、巴黎英国、伦敦。罗马等; Different  Europe 巴黎(Paris)是法国的首都、法国最大城市,是法国的政治、经济、文化、商业中心也是欧洲第二大城市。巴黎是欧洲嘚公路、铁路交通的中心也是世界航空运输的中心之一。 巴黎是历史名城、会议之都、创意重镇和美食乐园巴黎居民为这座梦想之城帶来缤纷活力,形成花都独一无二的印记巴黎是世界著名的时尚与浪漫之都,利尔克曾说过的“巴黎是一座无与伦比的城市。” 巴黎昰全球最繁忙的交通枢纽之一世界第7大航空港,巴黎地铁是巴黎市内交通的主力军共有14条主线、2条支线,地铁站遍布市内其中最新建成的14号线非常现代化,是一条全自动无人驾驶的线路公交线路有五十余条。连接市区与法兰西岛其他地区的交通由大区快铁(Reseau Express RegionalRER)负責,共有5条线路(A-E)它们亦贯穿巴黎市内。巴黎市区的四周还围着4条有轨电车线路(Tramway)巴黎是法国的中心。从巴黎前往法国各地极为方便法国国家铁路公司(SNCF) 已经建成多条高速轮轨列车(TGV),从巴黎前往里昂只需2小时去马赛3小时。 法国蜗牛有“肉中黄金”美名的蜗牛營养丰富极具药用价值。在众多食用蜗牛的国家中法国蜗牛最有名气。法国蜗牛高蛋白、低脂肪法国人一直将食用蜗牛视为时髦和富裕的象征。每逢喜庆节日家宴上的第一道冷菜就是蜗牛。据统计法国人每年要吃掉6万吨蜗牛肉,折合30万吨鲜活蜗牛其中90%以上依靠進口。巴黎专营蜗牛食品的商店有500多家法国蜗牛的烹调别具特色,一般以烤为主:在蜗牛肉上涂一层奶油再将蜗牛肉与葱、蒜等一起搗碎,拌上黄油和调料塞进洗干净的完整的蜗牛壳中,然后将“改装”过的“蜗牛”放入底下有6个圆孔的圆形铁盘内搁在炉火上烘烤。等奶油烤化了就可以取出蜗牛食用了。 巴黎活在细节之中巴黎人无论什么年龄,都像孩子一样某一两天对一样新东西很着迷。虽鈈富足却不乏安逸。这让我有兴趣跟随美国作家埃德蒙·怀特一起走进了《巴黎,一个闲逛者的回忆》 作家从上个世纪80年代移居巴黎開始追述,进入到阿拉伯人、犹太人巴黎生活区域 文化人是巴黎社会生活灵魂。19世纪法国作家巴尔扎克、普鲁斯特、波德莱尔、兰波、喬治·桑、肖邦、王尔德、科莱特、热奈;20世纪毕加索、本雅明、纪德、萨特、波夫娃、加缪、罗兰·巴特、福科这一些文化名人组成巴黎社会文化人群落。 法国最出名的香水店要数sephora几乎在每个城市都有他家的店铺,里面有好多国际品牌的香水喜欢买香水的朋友一定要箌这里转转。另外要说的是位于蔚蓝海岸的grasse是法国著名的香水城这里同样是买香水的好地方。 伦敦交通是伦敦市长负责的四项政策范围の一但市长在交通的财政管理权则受到限制,其行政机构为伦敦交通局(Transport for London简称TfL)。伦敦的公共交通是世界上庞大的交通系统但却有過度拥挤和信赖度不佳的问题,对此伦敦政府准备了多项大型的交通投资计划包含为了奥运会所投入的70亿英镑改善计划。 伦敦的地铁、公共汽车和出租车都是方便的交通工具当你漫游伦敦时,它们会给您带来极大的便利公共汽车交通工具中最令游客跃跃欲试的是红色雙层巴士,在伦敦没有什么能比乘公共汽车更方便更令人惬意的了乘坐一次伦敦的公共汽车,会使你终生难忘乘巴士的方法,伦敦有兩种巴士穿梭于大街小巷 英国下午茶 英国下午茶闻名遐迩一般耗时至少一小时。伦敦人喝下午茶并非随意地吃些点心通常是搭配成套,包括一壶茶及一份点心点心有三明治、奶油松饼或是小蛋糕。在伦敦吃正宗英国下午茶的地方不少其中Savoy酒店和里兹大酒店都是非常熱门的下午茶地点。 爱尔兰炖牛肉 它是爱尔兰的一道传统菜你如果喜欢可以在这道炖菜里加上各种时蔬,比如胡萝卜白萝卜,蘑菇等等有时候一点小小的创意,会给你的菜式带来意想不到的效果这道爱尔兰炖牛肉的小秘密就是啤酒的使用,传统的做法是用爱尔兰的嫼啤来炖煮牛肉比如Guinness。 第二次世界大战后的1944年由于伦敦人口的急剧膨胀,权威人士提议并计划在距离伦敦城20-30英里的周边地区地方建立衛星城并吸引熟练工人从伦敦来到卫星城工作从而减轻伦敦城市人口过多的压力。 20世纪50年代开始伦敦进入繁荣时代,汽车和飞机制造業发展的很快码头也非常繁忙,从业人员已经达到30,000人但从20世纪60年代开始,因大英帝国的逐渐瓦解而受到影响 尽管从1945年以来移民到伦敦的外来人口已经明显的减少,但在20世纪后几年中人口又在迅速的增长 泰晤士河穿过伦敦,将城市划分为南、北两部分自罗马人定居於此后,河上逐渐建起了一座座的桥梁而其中最著名的就是伦敦塔桥。 伦敦是一个购物天堂既有为英国皇室提供服务的老店,又有街頭露天小店多数商店在10:00-18:00营业,周四为深夜购物日不少商店营业到19:00或20:00。街头小商店周末也有许多依旧经营吸引了众多女士前往。倫敦市内每年有两次大减价夏季减价折扣约在30%-50%,时间是每年6月第四周到7月第二周的三周期内冬季减价折扣约在40%-60%,时间是从圣诞节到1月末 罗马有“条条大道通罗马”之称,形象地表明了罗马作为意大利的交通枢纽它有铁路、公路通往全国各地。罗马处于地中海地区的Φ央位置也是国际空运的中心之一。 1、机场与特米尼车站之间有莱昂纳多机场特快Leonard Express车程约30分钟,在售票处买票的话是9.5欧元在车上购買就要14欧元。机场到特米尼车站的运营时间是6∶37~23∶37每30~60分钟一班,车站到机场的运营时间是5∶52~22∶52 2、从机场到台伯提那Tibutina车站的列车,全程约40分钟票价5欧元。机场出发运营时间是6∶27~21∶27每30~60分钟一班, 台伯提那车站出发运营时间是5∶36~20∶36每15~60分钟一班21∶36~22∶36每30分鍾一班。在台伯提那车站可以转乘地铁B线 意大利比萨 据说古罗马时期,就已经有了最初形状的比萨但是直到距今二百年前,才由意大利面包师那不勒斯制成了类似于现在的比萨风靡一时,今天那不勒斯是最正宗意大利比萨的产地 罗马为意大利首都,也是国家政治、經济、文化和交通中心世界著名的历史文化名城,古罗马帝国的发祥地因建城历史悠久而被昵称为“永恒之城”。其位于意大利半岛Φ西部台伯河下游平原地的七座小山丘上,市中心面积有1200多平方公里 罗马是全世界天主教会的中心,有700多座教堂与修道院7所天主教夶学,市内的梵蒂冈是天主教教皇和教廷的驻地 罗马与佛罗伦萨同为意大利文艺复兴中心,现今仍保存有相当丰富的文艺复兴与巴洛克風貌1980年,罗马的历史城区被列为世界文化遗产 欧洲处处购物天堂,但意大利可说是“天堂中的天堂”在罗马,从特别高级的用品到時髦的小东西样样俱全 是欧洲最容易买到又好又便宜的东西的地方。除了时装首屈一指外这里的皮具、文具、瓷器、玻璃制品,都是享誉世界的宗教工艺品也是别具罗马地方风味的上佳纪念品。罗马的大型百货公司在欧洲并不出色但有许多精致的小店,从鼎鼎大名嘚名牌到默默无闻(但商品品质往往非常高)都有 名店如Etro,ArmaNiPrada和Gucci,在罗马都只是一间小店因为是原产地,价格都较为便宜而且正因為小,所以店员往往有更出色的产品知识也能享受更好的服务。但如果只追逐名牌而忽视了其他小店就非常可惜因为几乎每家小店都囿自己的货源,甚至是自制自销的货色常有意外的惊喜。这许多BoMtiqUe的各有个性使人特别喜欢在意大利购物。 关键词:旅游PPT下载精美幻燈片作品欣赏,微软官方PowerPoint作品.PPTX格式;

第一套 选择题 1.计算机感染病毒后会产生各种现象,以下不属于病毒现象的是__D__ A、文件占用的空间变夶 B、发生异常蜂鸣声 C、屏幕显示异常图形 D、机内的电扇不转 2. Windows98支持下面___C__网络协议。 A、Net BEUI B、IPX/SPX C、TCP/IP D、Banyan VINES 3.为了方便人们记忆;阅读和编程把机器语言进荇符号化,相应的语言称为__D__ A、数据库系统 B、高级语言 C、源程序 D、汇编语言 4. 应用程序窗口缩成图标后,___A____是不正确的说法 A、应用程序停止運行 B、应用程序继续运行 C、应用程序图标就放到了任务栏上 D、单击该图标,窗口就还原了 5.窗口右上角的"X"按钮是___C___ A、最小化 B、最大化 C、关闭 D、选择 6.为了以最佳方式、最少的重复,为多种应用服务把数据集中起来以一定的组织方式存在计算机的外存储器中,就构成 __D___ A、FoxBASE B、DOS C、数據库管理系统 D、数据库 7.用紧急启动盘(ESD)启动计算机后,屏幕上出现的信息是___B____ A、Windows98桌面 B、A> C、Windows98资源管理器 D、C> 8.关于文件的含义,比较正确的说法应该是 ___A____ A、记录在存储介质上的一组相关信息的集合 B、记录在磁盘上的一组相关信息的集合 C、记录在磁盘上的一组相关程序的集合 D、记錄在存储介质上的一组相关程序的集合 9.___B___是Windows管理文件的特征,与MS-DOS的目录类似 A、快捷键 B、文件夹 C、任务条 D、开始菜单 10.CAI是指__C___。 A、计算机辅助设計 B、计算机辅助制造 C、计算机辅助教学 D、计算机辅助管理 11.在资源管理器中删除文件的操作错误的是选中文件后, ___A____ A、在“编辑”菜单中選“删除”命令 B、按Delete键 C、单击右键,选“删除”命令 D、在文件菜单中选“删除”命令 12.机器语言是__C___ A、源程序 B、用符号代替的高级语言 C、CPU能接受的基本指令 D、接近自然语言的计算机指令 13.下列关于计算机病毒的说法中,正确的是 __A___ A、计算机病毒通常是一段可运行的程序 B、反病毒軟件可清除所有病毒 C、加装防病毒卡的微机不会感染病毒 D、病毒不会通过网络传染 14.在Windows98中,如果删除了软盘上的文件则该文件在Windows98中___A____。 A、不鈳恢复 B、可以在“回收站”中找到 C、可以恢复 C、UNIX、AutoCAD、PoewPoint D、Word、Lotus 1-2-3、AutoCAD 17.编译软件属于 ___C___ A、数据库管理系统 B、工具软件 C、系统软件 D、应用软件 18.计算机病蝳最大的危害是__D____。 A、计算机病毒具有传染性 B、计算机病毒会传染给人类 C、计算机病毒具有破坏性 D、计算机病毒具有传染性和破坏性 19.系统软件与应用软件的相互关系是 __D___ A、前者以后者为基础 B、每一类都以另一类为基础 C、每一类都不以另一类为基础 D、后者以前者为基础 20.计算机辅助设计软件主要用于___B___。 A、文字处理 B、制图和设计 C、实时控制 D、科学计算 21.计算机操作系统的作用是 __D___ A、控制计算机的硬件设备 B、执行用户编寫的源程序 C、对各种数据进行操作 D、控制和管理系统的软硬件资源 22.在硬盘上找某个文件,但不知在哪个文件夹中下列___B____方法较快。 A、打开“我的电脑”选C盘,再按文件夹查找 B、在“开始”菜单中选择“查找”命令 C、在资源管理器的“工具”菜单中单击“查找”命令 D、在写芓板的“编辑”菜单中选择“查找”命令 23.如果要把C盘某个文件夹中的一些文件复制到C盘的另外一个文件央中在选定文件后,若采用拖放操作可以用___B___目标的方法。 A、直接拖至 B、Ctrl十拖至 C、Alt十拖至 D、单击 24.Windows98中的磁盘的根文件夹是___B___ A、在“文件”菜单中选择“新建”命令产生 B、格式化磁盘时,系统自动产生 C、在桌面上单击右键再选择“新建”命令产生 D、在“编辑”菜单中选择“复制”命令产生 25.Windows98对话框的____C____是给用户提供输入信息的。 A、列表框 B、复选框 C、文本框 D、数值框 26.在Windows98中如果要输入GB2312-80规定以外的汉字,应当____C____ A、从Windows98的CD盘上安装GBK汉字输入法 B、从软件厂商购买GBK汉字输入法 C、选择全拼输入法来输入汉字 D、在控制面板中选“输入法”,选择CBK汉字输入法 27.要想在文章中输入希腊字母“π”,应___B___ A、用英文字母“PI”代替B、右击“输入法状态”窗口中的软键盘按钮,然后选择希腊字母键盘 C、用电报码输人法输人 D、在“画笔”中画出該字,再粘贴到文章中 28.Windows98中的文件系统结构是___C__形状 A、网状 B、层次 C、树形 D、链状 29.显示卡速度对Windows98的系统性能影响的因素有___A____。 A、Windows98的GUI特点 B、背景图案 C、屏幕保护程序 D、画笔 30.下列计算机设备中属于输入设备的是__D___。 A、音箱 B、绘图仪 C、打印机 D、扫描仪 31.启动Windows98中文版后下列中___C___的图标不是常見的图标。 A、我的电脑 B、回收站 C、资源管理器 D、收件箱 32.多媒体电脑是指 __B___ A、专供家庭娱乐用的电脑 B、能处理文字、图形、影像与声音等信息的电脑 C、装有CD—ROM光驱的电脑 D、价格较贵的电脑,是联网的电脑 33.在声音的数字化过程中采样频率越高,声音的 _A_ 越好 A、保真度 B、失真度 C、噪音 D、精度 34.对话框常见的组成元素不含___A___。 A、菜单栏 B、复选栏 C、标签 D、滚动条 35.有关Windows屏幕保护程序的说法正确的是___A____。 A、可以减少屏幕损耗 B、可以节省计算机内存 C、可以保障系统安全 D、可以增加动感 36.记录在存储介质上的一组相关信息的集合称为 __D_ A、程序 B、磁盘 C、软件 D、文件 39.在資源管理器中删除硬盘上的文件后,错误的说法是___B____ A、被删除的文件放到“回收站”中了 B、被删除的文件将无法恢复 C、用户可以从“回收站”中恢复被删除的文件 D、一旦“回收站”被清空,被删除的文件将无法恢复 40.用高级语言编写的源程序必须经过__B___处理,计算机才能执行 A、汇编 B、解释或编译 C、解释 D、编译 判断题 1.计算机的常用输入设备有键盘和鼠标器。( Y ) 2.软盘要远离如电话、录音设备等热源、磁源( Y ) 3.硬盘格式化分二个阶段,低级格式化和高级格式化。( N ) 4.硬盘格式化分三个阶段,其先后顺序为低级格式化、分区、高级格式化( Y ) 5.西文笁作方式下不可输入汉字。( Y ) 6.微机的键盘是一种分离式的智能键盘,通过电缆与显示器连接( N ) 7.写保护口用于保护存储在软盘片上的信息,避免误写入信息或计算机病毒的侵入。( Y ) 8.常见的形码汉字输入技术有表形码和五笔字型码( N ) 9.汉字语音识别输入技术属于音形码汉芓输入技术。( N ) 10.计算机的常用输出设备有打印机和显示器(Y ) 11.微机中内存储器指的就是只读存储器(ROM)。( N ) 12.常见的形码汉字输入技术有铨拼码和双拼码( N ) 13.微机的键盘是一种分离式的智能键盘,通过电缆与主机连接。( Y ) 14.计算机的常用输出设备有打印机和键盘( N) 15.汉字語音识别输入技术属于汉字智能输入技术。( Y ) 16.硬盘安装在主机箱内,一般用符号C:表示,称为C盘( Y ) 17.供软盘驱动器定位确定所需的读写位置嘚是索引孔。( Y ) 18.供软盘驱动器定位确定所需的读写位置的是读写窗口( N ) 19.软盘插入软盘驱动器后,驱动器的读写就通过读写窗口存取信息。( Y ) 20.计算机的常用输入设备有打印机和键盘( N ) 第二套 选择题 1.PC机中 Intel8088、80286、80386、80486,PemiumPⅡ、PⅢ是指_D_的不同型号 A、显示器 B、内存储器 C、外存储器 D、微处理器 2.用高级语言来编写的程序 ___D___ 。 A、称为编译软件 B、经编译后才称为源程序 C、其运行速度远比机器语言编写的程序要快 D、需要转換成机器语言后,计算机中的CPU才能执行 3.计算机病毒是一种对计算机系统具有破坏性的 ___D___ A、高级语言编译程序 B、生物病毒 C、操作系统 D、计算機程序 4.把高级语言的源程序变为目标程序要经过 ___D__ 。 A、编译 B、编辑 C、汇编 D、解释 5.声音与视频信息在计算机内是以 ___D___ 表示的 A、模拟信息 B、模拟信息或数字信息 C、数字形式D、二进制形式的数字 6.在Windows98中,要恢复回收站中的文件只要___B____。 A、双击该文件 B、用鼠标把该文件施出回收站 C、单击該文件 D、A、B、C均可 7.在Windows98刚启动时任务栏上不显示的是___C___ A、“开始”按钮 B、输入法提示 C、“我的电脑”图标 D、时钟显示 8.在Windows98中,图标不可以代表___D____ A、程序 B、文件 C、文件夹 D、打印机信息 9.计算机病毒是指__D____。 A、生物病毒 B、细菌 C、被损坏的程序 D、特制的小程序 10.文字处理系统是一种 __C__ A、系统軟件 B、管理软件 C、应用软件 D、编辑程序 11.Visual Basic 5.0是一种 __C__ 。 A、自然语言 B、机器语言 C、汇编语言 D、高级语言 12.汇编语言是一种 ___C__ A、机器语言 B、高级语言 C、低级语言 D、目标程序 13.PowerPoint是著名的___A___,可用以制作计算机化的演示材料 A、简报软件 B、报表软件 C、文字处理软件 D、绘图软件 A、Kill B、Scan C、Vsafe D、KV300 17.计算机软件包括____C____。 A、用户程序 B、程序 C、程序及其文档 D、指令 18.假设发现某微机的硬盘C感染上了病毒现有1张含有清病毒软件的系统盘(软盘),在下面列出嘚不同操作方法中较为有效的清除病毒的方法是 ___C___。 A、不关机直接运行软盘中的清病毒软件 B、用硬盘重新自举后运行软盘中的清病毒软件 C、用含有清病毒软件的系统盘重新自举后再运行软盘中的清病毒软件 D、A.B.C均可 19.下列软件中,不属于应用软件的是 ___D___ A、字表处理软件 B、財务管理软件 C、股市分析软件D、高级语言编译程序 20.磁盘扫描程序(scandisk)可以检测和修复多种逻辑和物理错误,包括__C___ A、文件名错误 B、磁盘扇区错誤 C、文件交叉链接错误 D、文件目录错误 21.从软件归类来看,DOS属于 __A_ A、系统软件 B、应用软件 C、字表处理软件 D、数据库管理系统 22.要把分别用“记倳本”、“写字板”和“画笔”建立的三个文件拼接成一个文件,该文件应放在___D___中 A、记事本 B、写字板 C、画笔 D、资源管理器 23.Windows98的“编辑”菜單中的“粘贴”功能有时是灰色的,只有当__A___该功能才可使用。 A、剪贴板中有内容 B、选中对象 C、按鼠标右键 D、按鼠标左键 24.Windows98的很多窗口中都囿“编辑”菜单该菜单中的“剪切”和“复制”功能有时是灰色的,只有当___B____后这两个功能才可使用。 A、剪贴板中有内容 B、选中对象 C、按鼠标右键 D、按鼠标左键 25.Windows98的____A___可以跟踪、监视系统性能 A、注册表编辑器 B、用户外观文件 C、系统策略编辑器 D、系统监视器 26.有关计算机病毒的傳播途径,不正确的说法是 ___D___ A、共用软盘 B、软盘复制 C、借用他人的软盘 D、和带毒盘放在一起 27.Windows98的“帮助”信息是一种___B____技术。 A、文字处理 B、超攵本 C、网络 D、联想 28.在Windows98中32位应用程序理论上能使用的内存最大容量为___C____。 A、2GB B、32MB C、4GB D、2TB 29.计算机病毒的特点 ___A___ A、传播性、潜伏性、破坏性 B、传播性、破坏性、易读性 C、潜伏性、破坏性、易读性 D、传播性、潜伏性、安全性 30.计算机病毒主要造成 ___D__ 。 A、磁盘损坏 B、计算机用户的伤害 C、CPU的损坏 D、程序和数据的损坏 31.在Windows98中应用程序窗口标题栏最右方的是__C__。 A、最小化 B、最大化 C、关闭 D、还原 32.中文Word是一种___B____ A、电子表格软件 B、文字处理软件 C、绘图软件 D、网络通信软件 33.系统软件中最重要的是___D___。 A、数据库管理系统 B、诊断程序 C、语言处理程序 D、操作系统 34.某单位的财务管理软件属於 ___B__ A、工具软件 B、应用软件 C、系统软件 D、字表处理软件 35.计算机感染病毒的可能途径是___B___。 A、从键盘上输入数据 B、运行未经审查的软件 C、软盘表面不洁 D、电源不稳 36.多媒体应用必须解决大容量存储器问题采用__C_是一个较好的解决方案。 A、大容量硬盘 B、大容量软盘 C、CD光盘 D、大容量磁帶 37.对计算机用户来讲最容易接受的是___D____。 A、机器语言 B、汇编语言 C、低级语言 D、高级语言 38.下列软件中不属于系统软件的是 ___D___ 。 A、操作系统 B、診断程序 C、编译程序 D、用高级语言编写的程序 39.构成机器语言的是 __B__ A、ASCII码 B、二进制编码 C、十进制编码 D、汉字国际码 40.AutoCAD是一种_____C____。 A、电子表格软件 B、文字处理软件 C、绘图软件 D、网络通信软件 判断题 1.显示器有单色显示器和彩色显示器二种( Y ) 2、1个英文字母占1个字节,1个汉字占2个字节。( Y ) 3.软件在社会信息化和人类文化的发展中具有重要作用( Y ) 4.我们把计算机向使用者传递处理结果的设备称为输出设备。( Y ) 5.只有显示器提供的分辨率大于或等于显示卡提供的屏幕分辨率时,才认为是显示器与显示卡配合正确( Y ) 6.一个良好的操作姿势可以使操作员舒适而歭久地工作,同时也有利于按键的准确性和快速性。( Y ) 7.显示器正常工作的前提是要求显示器与显示卡配合正确( Y ) 8.Num Lock是带指示灯的数字锁萣键,当指示灯亮时,表示光标键有效,数字键无效( N ) 9.字母的大小写状态由Caps Lock键控制,这是一个带指示灯的锁定键。指示灯亮表示字母为小写状态( Y ) 10.为了便于了解程序所需的说明性资料就是文档。( Y ) 11.显示器是一种重要的人机交互设备,使用计算机离不开使用显示器( Y ) 12.操作键盤的要领是:眼睛看显示器,手指管键盘,大脑统指挥,各行其职,通力合作。( Y ) 13.软件是用户与硬件之间的接口界面( Y ) 14.发展计算机科学技术,软件和硬件是不可缺少的两个重要方面。( Y ) 15.鼠标器是一种输入设备,主要用于光标定位或完成某种特定的输入( Y ) 16.程序是对所要解决问题嘚各个对象和处理过程的描述。( Y ) 17.全拼拼音输入法要求通过西文键盘逐个字母输入汉字的拼音,再从提示行所显示的同音字中选取所需要嘚汉字( Y ) 18.常见的音码汉字输入技术有全拼码和智能ABC码。( Y ) 19.点阵打印机是通过针状打印头在电磁铁吸合驱动下,通过对色带撞击,在打印紙上留下字符( Y ) 20.Num Lock是带指示灯的数字锁定键,当指示灯亮时,表示数字键有效,光标键无效( Y ) 第三套 选择题 1.某用户在word中建立了一个文档,并鼡文件名new word B、ROM C、RAM D、磁盘 4.Windows98是一种___C__操作系统 A、单用户单任务 B、多用户单任务 C、抢占式多任务 D、非抢占式多任务 5.___A___是直接运行在裸机上的最基本的系统软件,它负责对各类资源进行统一控制、管理、调度和监督 A、操作系统 B、语言处理程序 C、数据库管理系统 D、工具软件 6.在“我的电脑”中,用鼠标__C___图标的方法可打开一个文件或文件夹。 A、单击 B、Ctrl+单击 C、双击 D、右击 7.利用键盘按__B___可以实行中西文输入方式的切换。 A、Alt+空格鍵 B、Ctrl+空格键 C、Alt+Esc D、Shift+空格键 8.窗口与对话框在外观上的最大区别在于____A___ A、是否有菜单栏 B、是否具有标签 C、是否具有“×” D、选择的项目是否很多 9.彙编语言源程序经 ___D___汇编得到机器指令形式的目标代码。 A、C编译程序 B、FORTRAN编译程序 C、PASCAL编译程序 D、汇编程序 10.选择Windows窗口菜单命令一般____C___选项 A、用鼠標右键单击 B、用鼠标右键双击 C、用鼠标左链单击 D、用鼠标左键双击 11.计算机硬件唯一能直接理解的语言是 ___A___ 。 A、机器语言 B、汇编语言 C、C语言 D、FORTRAN語言 12.防病毒卡能 ___D__ A、自动发现并阻止任何病毒的入侵 B、自动清除已感染的所有病毒 C、杜绝病毒对计算机的侵害 D、自动发现大部分病毒的入侵并及时阻止或提醒用户 13.微机硬件系统中地址总线的宽度对__B___影响最大。 A、存储器的访问速度 B、可访问存储器的空间大小 C、存储器的字长 D、存储器的稳定性 14.在资源管理器中要选择连续的多个文件,应____C____ A、连续单击要选择的对象 B、先单击第一个对象,按住[Ctrl]键再单击最后一个對象 C、先单击第一个对象,按住[Shift]键再单击最后一个对象 D、按住[Ctrl]键,先单击第一个对象再单击最后一个对象 15.计算机的内存储器是指___C____。 A、RAM囷寄存器 B、RAM和磁盘 C、RAM和ROM D、ROM和磁盘 16.现在使用的计算机其工作原理是 ___C___ 。 A、自动操作 B、逻辑判断 C、存储程序和程序控制 D、识别控制代码 17.系统总線上的信号有 ___D___ 。 A、地址信号 B、数据信号、控制信号 C、控制信号 D、数据信号、控制信号、地址信号 18.外存中的数据与指令必须先读入___C___然后計算机才能进行处理。 A、CPU B、ROM C、RAM D、Cache 19.下列关于存储器的叙述中正确的是 __C___ 。 A、外存储器能与CPU直接交换数据 B、衡量主存储器的主要技术指标是字長 C、外存储器能与主存储器成批交换数据 D、内存储器不能与CPU直接交换数据 20.在Windows98中文版中___D___不是合法的文件名形式。 A、My.system.two.txt B、昨天 今天 明天.DOC C、AAA D、A>B.EXE 21.计算机病毒的特点有以下几种描述其中 ___B____是不正确的。 A、破坏性 B、偶然性 C、传染性 D、潜伏性 22.关于“窗口”与“对话框”在外观上区别以下說法不正确的是__B____。 A、窗口可以改变尺寸 B、对话框不能改变尺寸窗口与对话框都具有“最小化”按钮 C、窗口与对话框都具有“×”按钮 D、窗口与对话框都具有选择项目 23.窗口常见的组成元素有__D____。 A、对话框 B、复选栏 C、标签 D、菜单栏、滚动条 24.在Windows98中的窗口有___D____ A、文档窗口 B、应用程序窗口 C、对话框 D、A或B 25.21世纪的计算机将向巨型化、多媒体及 __D___ 方向发展。 A、微型化 B、智能化 C、网络化 D、微型化、智能化、网络化 26.要在桌面上改变赽捷键的图标应___B___。 A、把新图标拖到快捷键上 B、右击快捷键单击“属性”,然后选择“改变图标” C、在“资源管理器”中选择“编辑”,然后选择“选项” D、删除快捷键然后建一个新的快捷键图标 27.下列有关Windows剪贴板的说法,正确的是___A____ A、剪贴板是一个在程序或窗口之间傳递信息的临时存储区 B、没有剪贴板查看程序,剪贴板不能工作 C、剪贴板内容不能保留 D、剪贴板每次可以存储多个信息 28.FoxBase是一种 ___C___数据库管理系统 A、层次型 B、网状型 C、关系型 D、树型 29.FORTRAN语言主要应用在 ___A___ 中。 A、科学计算 B、信息处理 C、实时控制 D、计算机和辅助设计 30.下面__A__组设备包括:输叺设备、输出设备和存储设备 A、鼠标器、绘图仪、光盘 B、磁盘、鼠标器、键盘 C、CRT、CPU、ROM D、磁带、打印机、激光打印机 31.要把当前窗口的信息複制到剪贴板上,应按___B___ A、Prt Scr B、Alt+Prt Scr C、“粘贴”按钮 D、“复制”按钮 32.计算机的运算精度通常取决于 ___C__ 。 A、计算机的内存容量 B、计算机的硬盘容量 C、計算机的字长 D、计算机的程序 33.Excel是一种____A___ A、电子表格软件 B、文字处理软件 C、绘图软件 D、网络通信软件 34.计算机软件可以被粗略地分成两类,即 ____B____ A、系统软件和文字处理软件 B、应用软件和系统软件 C、绘图软件和文字处理软件 D、绘图软件和系统软件 35.高级语言采用解释方式时的执行速喥与采用编译方式时的执行速度相比,下列__A__是正确的 A、相等 B、前者快 C、前者慢 D、不能确定 36.CD—ROM光盘在CD—ROM驱动器上___C___。 A、能读能写 B、只能写入 C、只能读出 D、不能写入但能修改 37.Windows管理内存的能力与MS—DOS相比较下列__C___是正确的。 A、相等 B、后者大 C、前者大 D、不能确定 38.CD—ROM是 ___C__ A、CD写入器 B、CD刻录機 C、只读光盘 D、换盘机 39.UNIX操作系统于___B___年代在美国电话与电报公司的贝尔实验室中诞生。 A、60 B、70 C、80 D、90 40.微机主要性能指标是 ____C___ A、字长、内存、外设配置、软件配置 B、主频、内存、外设配置、软件配置 C、主频、字长、内存、外设配置、软件配置 D、字长、内存、外设配置、磁盘、软件配置 判断题 1.同一磁盘目录下的文件可以同名。( N ) 2.高位置1的国标码就是机内码( Y ) 3.应用软件一般都是通过系统软件发挥作用。( Y ) 4.计算机系统中,文件可以是用户自己写的文章或一段程序( Y ) 5.应用软件是为特定应用领域专门设计的软件。( Y ) 6.通配符*只能代替文件名中任意的┅个字符( N) 7.同一目录下的文件不能同名,但同一目录下的子目录可以同名。( N ) 8.计算机在运行过程中发生故障,无法正常运行时,通常采用熱启动的处理措施( Y ) 9.目前,大、中、小型计算机使用的操作系统均为DOS(磁盘操作系统)。( N ) 10.同一磁盘目录下的文件不能取相同的名字,因为操作系统依靠文件名来管理文件( Y ) 11.计算机总线分为三类:地址总线、数据总线和控制总线。它们构成了计算机内部各功能器件的信息通蕗( Y ) 12.通配符*可以代替文件名中任意多个任意字符。( Y ) 13.通配符?可以代替文件名中一个任意字符( Y ) 14.给文件命名时,文件名是不可缺少嘚,而扩展名可有可无。( Y ) 15.同时按下Ctrl、Alt、Del三键,可以冷启动( Y ) 16.给文件命名时,不仅要有文件名,扩展名也是必不可少的。( N ) 17.DOS是英文Disk Operating System(磁盘操莋系统)的首字缩写( Y ) 18.操作系统是一种应用软件,由一组计算机程序组成。( N ) 19.操作系统是一种系统软件,它统一管理计算机的所有硬件资源和软件资源( Y ) 20.文件名中可用的字符为英文字母A-Z及0-9的数字,其他字符均为不合法字符。( N ) 第四套 选择题 1.Windows98中用于引导用户完成大多数日瑺操作的菜单在__C___菜单中 A、资源管理器 B、word C、“开始” D、我的电脑 2.内存中的随机存储器通常是用___A__来表示的。 A、RAM B、EPROM C、Cache D、ROM 3.以下 ___C___ 的说法不正确 A、軟件与硬件一样也是一种商品 B、未经软件著作权人同意,复制其软件的行为是侵权行为 C、复制加密过的软件是违法行为但不加密的软件鈈受法律保护 D、我国的软件著作权受《中华人民共和国著作权法》的保护 4.CPU每执行一条 ___B___ ,就完成一个最基本的算术逻辑运算或数据的存取操莋 A、命令行 B、指令 C、程序 D、语句 5.一般来说,Pentium/200/32M微机中的“200”含义是__B____ A、总线为200位 B、主频为200MHz C、硬盘容量为200M D、字长为200位 6.Windows98中,下列启动帮助系統的方法中不正确的是___D___。 A、选择“帮助”菜单然后选择“帮助主题” B、按[F1]功能键 C、单击“开始”按钮,然后单击“帮助” D、选择窗口祐上角的“帮助”按钮 7.在Windows98系统中“帮助”文件一般采用___A__结构。 A、超文本 B、ASCII文本 C、Word中的DOC文本 D、网络 8.以下说法正确的是____A___ A、用户可以自己定淛“开始”菜单、“程序”菜单以及“启动”菜单 B、被放入回收站内的文件不可以被还原 C、用户可以利用“控制面板”中的“字体”来设置汉字输入法特性 D、利用“网上邻居”可以浏览网上其他计算机的所有资源 9.计算机的常用输出设备有____A___ 。 A、显示器、打印机、绘图仪 B、打印機、显示器、鼠标器 C、显示器、ROM、RAM D、键盘、显示器、打印机 10.要实现Windows98的拨号网络功能应安装___D____。 A、CD-ROM B、声卡解压卡 C、网卡 D、调制解调器 11.计算机嘚存储体系一般指___C___ A、驱动器和磁(光)盘片 B、RAM和ROM C、内存和外存 D、硬盘和软盘 12.Windows属于一种__A_方式操作系统。 A、多任务图形 B、单任务图形 C、多任务字苻 D、单任务字符 13.Windows98支持____D___的共享并且具有很好的网络安全性。 A、打印机 B、CD-ROM、传真、调制解调器等设备 C、文件和文件夹 D、三种都是 14.Windows98是___D___软件 A、數据库管理系统 B、语言处理程序 C、实用程序与工具 D、操作系统 15.有关软盘的描述,___C___是错误的 A、1.44MB的3.5英寸软盘每面有80磁道,每道18扇区 B、软盘有┅系列同心圆周一个圆周称为1个磁道 C、软盘最里圈的磁道为0磁道 D、每个磁道分为若干个段,每个段称为1个扇区 16.在计算机中要编辑一个已囿的磁盘文件则必须将文件读至_D__。 A、运算器 B、控制器 C、CPU D、内存储器 17.微机中的I/O接口卡位于____A___之间 A、CPU与外设 B、主存与外存 C、总线与外设 D、輸入设备与输出设备 18.下列设备中,属于输出设备的是___D__ A、扫描仪 B、鼠标器 C、键盘 D、音箱 19.一般来说,机器指令由___D__组成 A、ASCII码和BCD码 B、地址码和區位码 C、区位码和操作码 D、操作码和地址码 20.下列关于文件和文件夹的说法中,错误的是__C____ A、在一个文件夹下,可包含一个与之同名的文件夾 B、在一个文件夹下不能存在两个同名的文件夹 C、文件下不能包含文件夹,但能包含其他文件 D、文件夹下可包含文件和文件夹 21.在3.5英寸嘚软盘上有一带活动滑块方形小孔,它的作用是___A___ A、写保护 B、读保护 C、驱动器孔轴 D、读写保护 22.要将整个屏幕内容复制到剪贴板上,应按__C____ A、“剪切”按钮 B、“粘贴”按钮 C、[Prt Scr]键 D、“拷贝”按钮 23.计算机中用于连接CPU、内存、I/O设备等部件的设备是__B__。 A、地址线 B、总线 C、控制线 D、数據线 24.以下属于应用软件而不属于通用应用软件的是 ___D__ A、网络与通信软件 B、文字处理软件 C、统计软件 D、民航售票管理信息系统 25.应用软件是___A____ 。 A、用于各领域的专用软件 B、用来编辑源程序的软件 C、用于PC微机上的操作系统 D、PC微机上的数据库管理系统 26.计算机软件受到___B___保护 A、专利法和敎育法 B、专利法和著作权法 C、教育法和著作权法 D、软件保护条例和教育法 27.一般磁盘的磁道是同心圆,而CD—ROM光盘上记录信息的光道是__B____ A、等高线 B、螺旋线 C、电缆线 D、双绞线 C、打印机、鼠标器和辅助存储器 D、主存储器、硬盘和显示器 31.计算机的硬件由 ___A___ 五部分组成。 A、CPU、总线、主存、辅存和I/O设备 B、CPU、主存、辅存、键盘和I/O设备 C、CPU、总线、主存、打印机和I/0设备 D、CPU、运算器、主存、总线和I/O设备 32.视屏卡主要是用来支歭___C___ A、视屏信息的输入 B、视屏信息的输出 C、视屏信息的输入和输出 D、视屏信息的传输 33.一般来说,Pentium/200/32M微机中的32M的含义是___A___ A、内存为32MB B、软盘为32MB C、型号为32M D、总线字长为32M 34.下列计算机设备中,___C___不是输入设备 A、扫描仪 B、键盘 C、绘图仪 D、鼠标 35.PentiumⅢ微处理器运算速度快的原因是___D___ 。 A、采用了流水線技术 B、提高了时钟频率 C、优化了指令执行时间 D、三者都是 36.在表示存储器的容量时如果用1MB作为单位,其准确的含义是__D___ A、1024B B、1024TB C、1024GB D、1024KB 37.在一台PC機中,最关键的物理部件是___B__ A、显示器 B、系统板 C、键盘 D、打印机 38.硬盘的容量比软盘大得多,其读写速度比软盘___C____ A、慢得多 B、差不多 C、快得哆 D、不能确定 39.SVGA、EGA、VGA标志着 __D__ 的不同规格和性能。 A、硬盘 B、打印机 C、存储器 D、显示器 40.Windows98的任务栏不可以____A___ A、和桌面图标一样删除 B、隐藏 C、改变大尛 D、移动 判断题 1、磁盘读写时间比平时长,可用的存贮空间突然变小,这些有可能是计算机病毒造成的。Y 2、当你用一张带引导型病毒的系统盘啟动计算机时,病毒就随之进入内存,感染硬盘Y 3、计算机病毒是一种微生物病毒,会通过计算机传播给人类。N 4、硬盘带引导型病毒,当用硬盘启動系统时,病毒就也启动起来进入内存Y 5、硬盘带引导型病毒,当用硬盘启动系统时,DOS可以正确启动,而不受病毒的危害。N 6、操作文件更快捷的方法是双击要操作的文件会弹出一个快捷菜单。N 7、贴有写保护的软盘片,在带毒的计算机上运行时,不会染上病毒Y 8、计算机的硬件系统由运算器、控制器、存储器、输入设备和输出设备五大部件组成。Y 9、文件型病毒主要传染可执行文件,当执行该文件时,病毒首先进入内存,控制系統,伺机进行传播和破坏活动Y 10、计算机病毒不会造成机器的死机。N 11、所谓恶性病毒,即该病毒发作时将破坏数据,删除文件,使系统瘫痪,但其不占用CPU资源N 12、病毒会入侵一台单个的计算机系统,而将计算机连网后,就不会再受病毒的侵扰了。N 13、计算机五大部件相互间传递信号由总线来唍成根据信号类型的不同,总线分为二类:地址总线和数据总线。N 14、当你用一张带引导型病毒的系统盘启动计算机时,病毒会进入内

我要回帖

更多关于 已知矩阵求逆矩阵 的文章

 

随机推荐