
《计算机程序设计艺术(第3卷)》([美国] Donald Knuth)电子书网盘下载免费在线阅读
资源链接:
链接:> 密码:yht7
书名:计算机程序设计艺术(第3卷)
作者:[美国] Donald Knuth
译者:苏运霖
豆瓣评分:99
出版社:国防工业出版社
出版年份:2002-9
页数:779
内容简介:第3卷的头一次修订对经典计算机排序和查找技术做了最全面的考察。它扩充了第1卷对数据结构的处理,以将大小数据库和内外存储器一并考虑;遴选了精心核验的计算机方法,并对其效率做了定量分析。第3卷的突出特点是对“最优排序”一节的修订和对排列论与通用散列法的讨论。
作者简介:DonaldEKnuth(唐纳德E克努特,中文名高德纳)是算法和程序设计技术的先驱者,是计算机排版系统TEX和METAFONT的发明者,他因这些成就和大量创造性的影响深远的著作(19部书和160篇论文)而誉满全球。作为斯坦福大学计算机程序设计艺术的荣誉退休教授,他当前正全神贯注于完成其关于计算机科学的史诗性的七卷集。这一伟大工程在1962年他还是加利福尼亚理工学院的研究生时就开始了。Knuth教授获得了许多奖项和荣誉,包括美国计算机协会图灵奖(ACM Turing Award),美国前总统卡特授予的科学金奖(Medal of Science),美国数学学会斯蒂尔奖(AMS Steele Prize),以及1996年11月由于发明先进技术而荣获的备受推崇的京都奖(Kyoto Prize)。Knuth教授现与其妻Jill生活于斯坦福校园内。
程序设计方法包括三个基本步骤:
第一步:分析问题。
第二步:画出程序的基本轮廓。
第三步:实现该程序。
(1) 编写程序;
(2) 测试和调试程序;
(3) 提供数据打印结果。
下面, 我们来说明每一步的具体细节。
第一步: 分析问题
在这一步, 你必须:
a作为解决问题的一种方法, 确定要产生的数据(输出)。 作为这一子步的一部分, 你应定义表示输出的变量。
b确定需产生输出的数据(称为输入), 作为这一子步的一部分,你应定义表示输入的变量。
c 研制一种算法, 从有限步的输入中获取输出。 这种算法定义为结构化的顺序 *** 作, 以便在有限步内解决问题。就数字问题而言, 这种算法包括获取输出的计算, 但对非数字问题来说, 这种算法包括许多文本和图象处理 *** 作。
第二步: 画出程序的基本轮廓
在这一步, 你要用一些句子(伪代码)来画出程序的基本轮廓。每个句子对应一个简单的程序 *** 作。对一个简单的程序来说,通过列出程序顺序执行的动作, 便可直接产生伪代码。然而, 对复杂一些的程序来说, 则需要将大致过程有条理地进行组织。对此, 应使用自上而下的设计方法。
当使用自上而下的设计方法时, 你要把程序分割成几段来完成。列出每段要实现的任务, 程序的轮廓也就有了, 这称之为主模块。当一项任务列在主模块时, 仅用其名加以标识, 并未指出该任务将如何完成。这方面的内容留给程序设计的下一阶段来讨论。将程序分为几项任务只是对程序的初步设计。整个程序设计归结为下图所示的流程图1。

如果把主模块的每项任务扩展成一个模块, 并根据子任务进行定义的话, 那么, 程序设计就更为详细了(见图2)。这些模块称为主模块的子模块。程序中许多子模块之间的关系可象图2中那样归结为一张图。这种图称为结构图。
要画出模块的轮廓, 你可不考虑细节。如果这样的话, 你必须使用子模块, 将各个模块求精, 达到第三级设计。继续这一过程, 直至说明程序的全部细节。这一级一级的设计过程称为逐步求精法。在编写程序之前, 对你的程序进行逐步求精, 对你来说, 是很好的程序设计实践, 会使你养成良好的设计习惯。
我们则才描述了程序设计中自上而下的设计方法。实际上就是说, 我们设计程序是从程序的"顶部"开始一直考虑到程序的"底部"。
第三步: 实现该程序
程序设计的最后一步是编写源码程序。 在这一步,把模块的伪代码翻译成C语句。
对于源程序, 你应包含注释方式的文件编制, 以描述程序各个部分做何种工作。此外, 源程序还应包含调试程序段, 以测试程序的运行情况, 并允许查找编程错误。一旦程序运行情况良好, 可去掉调试程序段, 然而,文件编制应做为源程序的固定部分保留下来, 便于你或
#include <stdioh> / p : 数组指针 len : 数组长度 num : 要查找的数据 / int Search(int p, int len, int num) { for (int i = 0; i < len; i++) { if (p[i] == num) { return(i+1); } } return(-1); } void main() { int s[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; int x; scanf("%d", &x); printf("%d\n", Search(s, 10, x)); }
dim a as int16 ' 给定值声明 可根据 自己 需要 设置不同类型
a = 5 ‘设定 给定值
dim b() as int16 ’检查有相同值的数组
dim c() as int16 ‘包含相同值的集合
for i as int16 = 0 to bcount -1 从0开始 b数组集合数量-1
if a(i) = i then
’判断 数组元素 与给定值 是否相同 不论 是什么类型 一定要使用if语句 但不同类型数据的
'比较方式不同 此处仅为势力
c(ccount + 1) = i '如果相同把i复制给数组C
end if
next
汇编语言程序设计步骤: 1、 分析问题,抽象出描述问题的数据模型 2、 确定问题的算法思想 3、 画出流程图或结构图 4、 分配存储器和工作单元(寄存器) 5、 逐条编写程序 6、 静态检查,上机调试 例:编程查找考生的最高分,假设所有考生分数已存入计算机内存。 1、 分析问题 根据条件、特点、规律 →数学模型 本例分数已给定为0~200之间的整数集合(考虑加试分) ,记为{S},找max{S}(注: 简单问题不一定写数学模型) 。 2、 确定算法思想 最好利用现成算法和程序设计方法,若无,则需根据实践经验总结算法思想。如本例, 从成绩单第一分数往下看,边看边比较,记住较高分,舍弃较低分,直至看完,最高分存于 脑中。归纳算法思想:建立数据指针并指向数据区首地址。将第一数取入寄存器(如AL) , 与下一数比较,若下一数大则将其取入寄存器,否则调整指针,再与下一数比较,重复上述 过程,直至比较完毕,寄存器中即最高分。 读分数用MOV指令,比较用CMP指令,分析判断用条件转移指令。 3、 画流程图或结构图 有逻辑流程、算法流程、程序流程等,复杂问题需画模块结构。本例简单,只画出程序 流程图(用模块化结构的N-S流程图表示) : 本例的N-S流程图 图中初始化包括:设一个计数器,将分数个数减一后送计数器,每比较一次减一,至 零查找结束;建立一个指针指向数据区。 开始 初始化 取第一数到寄存器 与下一数比较 下一数大? 是 否 取大数到寄存器 修改指针,计数次数减一 返回到循环体开始,直到计数次数为0退出循环 结束 4、 分配存储器空间和工作单元(寄存器) 定义数据段、堆栈段、代码段等。工作单元一般用寄存器。本例:分数放数据段,建100 字节堆栈空间,BX作数据指针,CX作计数器,AL放最高分。 5、 逐条编写程序 DATA SEGMENT FEN DB 85,90,60,75,87,35,80,78,96,82…… ;存分数 MAX DB ;存最高分 DATA ENDS STACK SEGMENT PARA STACK ‘STACK’ DB 100 DUP() ;100字节堆栈 STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START PROC FAR PUSH DS MOV AX,0 PUSH AX ;为了返回DOS MOV AX,DATA MOV DS,AX ;置数据段寄存器 MOV BX,OFFSET FEN ;置数据指针 MOV CX,MAX-FEN ;置计数器初值 DEC CX ;N个分数比较N-1次 MOV AL,[BX] ;取第一个分数 LOP: INC BX ;调整指针 CMP AL,[BX] ;与下一数比较 JAE NEXT ;大于等于则转 MOV AL,[BX] ;否则取下一数 NEXT: LOOP LOP ;计数器减一, ;不为零转LOP MOV MAX,AL ;存放最高分 RET ;返回DOS START ENDP CODE ENDS END START 6、 静态检查,上机调试 选用指令尽量字节少,使其执行速度快。易错处应重点查,如比较次数、转移条件等。 确信无错后方可上机调试。
以上就是关于《计算机程序设计艺术(第3卷)排序与查找》pdf下载在线阅读,求百度网盘云资源全部的内容,包括:《计算机程序设计艺术(第3卷)排序与查找》pdf下载在线阅读,求百度网盘云资源、多个步骤实现一个功能程序如何设计、c语言程序设计题:函数的功能是查找x在s所指数组中下标的位置作为函数值返回,若x不存在,则返回-1等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)