计算机软件技术基础(第三版)沈被娜-课后习题答案较全(共37页).doc
精选优质文档-倾情为你奉上第一章 信息与计算机 1.1 什么是信息?信息与数据的区别和联系在何处?信息定义之一:信息是现实世界中存在的客观实体、现象、关系进行描述的数据。 信息定义之二:信息是经过加工后并对实体的行为产生影响的数据。 与数据的区别和联系: 数据定义:数据是现实世界客观存在的实体或事物的属性值,即指人们听到的事实和看到的景象。 我们把这些数据收集起来,经过处理后,即得到人们需要的信息。信息和数据的关系可以归结为: 1. 信息是有一定含义的数据。 2. 信息是经过加工(处理)后的数据。 3. 信息是对决策有价值的数据。 1.2 信息有哪些基本属性?信息的基本属性有: 1. 事实性。 2. 等级性。 3. 可压缩性。 4. 可扩散性。 5. 可传输性。 6. 共享性。 7. 增值性和再生性。 8. 转换性。 1.3 计算机的主要特点是什么? 计算机最主要的特点是: 1. 高速自动的操作功能。 2. 具有记忆的能力。 3. 可以进行各种逻辑判断。 4. 精确高速的计算能力。 1.5 完整的计算机系统应该包括哪几部分? 目前最完整的计算机系统学说认为由五部分组成: 1. 人员 2. 数据 3. 设备 4. 程序 5. 规程 1.6 什么是计算机硬件?什么是计算机软件? 硬件:泛指实际存在的物理设备,包括计算机本身及其外围设备。 微型计算机的硬件系统:主机、外存储器、输入设备、输出设备、微机的系统总线。 软件:是指计算机程序、方法、规则的文档以及在计算机上运行它时所必须的数据。 计算机软件一般分为系统软件和应用软件。 1.8 软件技术发展的几个阶段各有什么特点?它与硬件的关系如何? 第一阶段:高级语言阶段 特点:这一时期,编译技术代表了整个软件技术,软件工作者追求的主要 目的是设计和实现在控制结构和数据结构方面表现能力强的高级语言。但在这一时期内,编译系统主要是靠手工编制,自动化程度很低。 硬件关系:此时期计算机的硬件要求仅能用机器指令来编制可运行的程序。 第二阶段:结构程序设计阶段 特点:在程序的正确性方面,提出了结构化程序设计思想使程序的可靠性 提高了。 程序设计方法论方面,提出由顶向下法和自底向上法。使程序模块 化,使问题的复杂性和人的思维统一起来了。 出现了软件生产管理。 硬件关系:磁盘问世,操作系统发展,非数值计算应用发展,通信设备完 善,网络发展,集成电路发展等使软件复杂性增加产生软件危机,在此背景下发展了软件技术。 第三阶段:自动程序设计阶段 特点:向集成化、一体化发展。出现了软件开发环境。程序设计基本方法 进一步改进。 硬件关系:集成电路迅速发展以及高分辨率终端的出现,为个人计算机发 展提供了条件,再加上人工智能、专家系统研究的发展,使程序设计进入成熟期。1.9 什么是多媒体计算机? 多媒体计算机包含那几项?什么是多媒体计算机?1. “媒体”的概念分为两部分,其一是信息存储的实体,其二是表现信息形式的载体;2. 多媒体计算机是以计算机为核心,可以综合处理数值计算、文本文件、图形图像、声音视频等多种信息的计算机系统。3. 多媒体是20世纪90年代计算机发展的新领域,它是计算机技术与图形图像、动画、声音和视频等领域顶尖技术结合的产物,它将人机交互的信息从单纯的视觉(文字、图形)扩大到两个以上的媒体信息B: 多媒体的基本要素: 文本,图形,图像,动画,音频,视频, 可以看出,它是电脑,电视机,游戏机,录放机,传真机和电话机的综合体第二章 常用数据结构及其运算2.1 什么是数据结构?它对算法有什么影响? 数据结构是指同一数据对象中各数据元素间存在的关系。 数据结构对算法的影响:算法的实现必须借助程序设计语言中提供的数据类型及其运算。一个算法的效率往往与数据的表达形式有关,因此数据结构的选择对数据处理的效率起着至关重要的作用。它是算法和程序设计的基本部分,它对程序的质量影响很大。2.2 何谓算法?它与程序有何区别?广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。计算机算法是通过计算机能执行的算法语言来表达的。和程序的区别:一个程序包括两个方面的内容:(1)对数据的描述,即数据结构。(2)对操作的描述,即算法。所以算法是程序的一个要素。2.3 何谓频度,时间复杂度,空间复杂度?说明其含义。频度:在某个算法中某个语句被重复执行的次数就是此语句的频度。时间复杂度:是用来估算一个算法的执行时间的量,以算法中频度最大的语句来度量。空间复杂度:指在算法中所需的辅助空间的单元,而不包括问题的原始数据占用的空间。2.4试编写一个求多项式Pn =anxn +an-1 xn-1+a1x+a0的值Pn(x0)的算法,要求用乘法次数最少,并说明算法中主要语句的执行次数及整个算法的时间复杂度。A=(a0, a1 an)mul 1 / sum=a0for i=1 to nmul mul * x / xsum = Ai*mul + sum /求和end(i)进行了n次时间复杂度为:2n2.5计算下列各片段程序中XX+1执行次数(1)for i=1 to n for j=1 to ifor k=1 to j xx+1end(k) end(j)end(i)执行次数:n*n*n (2)i1while i<n doxx+1ii+1end(while)执行次数:n-1(3)for i=1 to nj1for k=j+1 to nx x+1end(k)end(i)执行次数:n*(n-1)2.6 数据的存储结构主要有哪两种?它们之间的本质区别是什么?数据的存储结构:向量和链表。本质区别:向量是连续存放的,其存储空间是静态分配的,以存放顺序来表达元素的前后件的关系。链式存储结果不需要一组连续的存储单元,其数据元素可以分散存放在存储空间中,其元素关系由指针来指向。2.8已知线性表L(a1, a2, , an ) 元素按递增有序排列。用向量作为存储结构,试编写算法:删除表中值在c与d之间(c<=d)的元素大于等于c序号4大于d序号11a1a2a3a4a5a6a7a8a9a10a11a12a130a14a15找到第1个大于等于c的元素,序号为s找到第一个大于d的元素,序号为tLs LtLs+1 Lt+1Ls+m Lt+m / s+m = t -1 m = t s - 1 Ls + i Lt + i / i = 0 to t-s-1 i=1; / i 从1 循环到ns = -1; / 第1个大于等于c的元素序号t = -1; / 第1个大于d的元素序号for i = 1 to n step -1if s =-1 and Li>=c / 找到第1个大于等于c的元素 s = i if t = -1 and Li >d / 找到第1个大于d的元素 t = i ; end (i)if s != -1 and t !=-1 i = s while i < t and i + t s <=n Li = L i + t s i+end(while)else return(错误 没有找到 元素在c和d之间)end(if) for j=c to n-d+cLj<-Lj+d-c/把j+d-c项给jEnd(j)N<-n-d+c/所有项数减少Return2.9 线性表A,B中的元素为字符串类型,用向量结构存储,试编写算法,判断B是否为A的子序列(例如A=ENGLISH ,B=LIS ,则B为A的子序列)Am Bna1a2a3a4a5a6a7a8a9a10a11a12a130a14a15A:b1b2b3b4b5b6B:i=1 检查A中第1个元素开始的字符串是否与B匹配i=2 检查A中第2个元素开始的字符串是否与B匹配 i= m n + 1 检查 A中 第(m-n+1)个元素开始的字符串是否与B匹配AmBnif ( m<n ) then return errorfor ( i =1; i<= m-n+1; i+) for (j = 1; j<= n ; j+) if (Ai+j-1 != Bj ) break; end(j) if j>n then return( A字符串中第i个字符开始的子串与B匹配 ) end(i)renturn (找不到匹配的子串)设A,B两个线性表的元素个数为m,nIf (m<=n)thenreturnFor i=0 to n-1a=Aifor j=0 to m-1if(a=Bj)thenb+end(j)end(i)if(b=m)thenB 为A的子集return2.11写一个将向量L(a1 ,a2, an)倒置的算法。a1a2a3a4a5a6a7a8a9a10a11a12a130a14a15对L(a1,a2, . ., an )如果是奇数个元素,则1, 15 交换 1, n 交换2,14 交换 2, n-1 交换3,13 交换 3,n-2 交换 4,12 交换 4,n-3 交换5,11 交换 5,n-4 交换6,10 交换 6,n-5 交换7,9 交换 7,n-6 交换8,8 交换 8,n-7 交换9,7 交换 9,n-8 交换? 停止!a1a2a3a4a5a6a7a8a9a10a11a12a130a14a15如果是偶数个元素,则1,14 交换 1, n 交换2,13 交换 2, n-1 交换3,12 交换 3,n-2 交换4,11 交换 4,n-3 交换5,10 交换 5,n-4 交换6,9 交换 6,n-5 交换7,8 交换 7,n-6 交换8,7 交换? 8,n-7 交换? 停止!小结:n个元素倒置的算法是,i = 1while ( i<n-i+1)ai 与 an-i+1 交换i+end(while) 2.12试编写算法求已知单链表长度,并考虑表空的情况。p = headi = 0While(p!=nil) /表不为空P<- next(p)/移动到下一个元素i+End(while)Return i /返回数据的个数2.13试编写算法删除单链表中第k个结点。GETNODE(q)GETNODE(p)q<-headFor i=1 to k-1q<-next(q)End(i)P<-next(q);next(q)<-next(p)Ret(p)Return2.14 已知一循环链表中数值已按递增有序排列现要插入一个新结点,并使插入一个新节点,并使插入后链表仍为有序序列GETNODE(p)Data(p)=aWhile(data(p)<data(n)n<-next(n)End(while) q <-nnext(p) <-next(q)<-preturn2.18 设在长度大于1 的循环链表中,即无头结点,也无头指正,p为指向链表中每个节点的指针,试编写算法删除该节点的前趋结点。q<-Next(p)/找到该节点的前趋结点p<-next(q);next(q)<-next(p)RET(p)Return2.20试用单链表表示两个多项式;A=4x12+5x8+6x3+4,B=3x12+6x7+2x4+5(1) 设计此两个多项式的数据结构。(2) 写出两个多项式相加的算法。(3) 分析算法的时间、空间复杂度。ADD-POLY(ha ,hb )1. pnext(ha); qnext(hb)2. preha;hcha /pre指向p的前趋,为c(x)头指针/3.while (p<>nil) AND (q<>nil) do4.case5.EXP(p)<EXP(q):6.prep;pnext(p)7.EXP(p)=EXP(q):8.xCOEF(p)+COEF(q);9.if (x<>0) then COEF(p)x;prep10.else next(pre)next(p); RET(p)11.pnext(pre);uq;qnext(q);RET(u)12.EXP(p)>EXP(q):13.unext(q);next(q)p; next(pre)q;preq;qu14.end(case)15.end(while)16.if(q<>nil) then next(pre)q17.RET(hb)/释放多项式B(x)的头结点/18.return2.22 CQ0:10为一循环队列,初态 front=rear=1,画出下列操作后队的头,尾指示器状态:(1)d,e,b,g,h入队;rear=6 front=1(2)d,e出队 rear=6 front=3(3)I,j,k,l,m入队 rear=0 front=3(4)b出队 rear=0 front=4(5)n,o,p,q,r入队 rear=5 front=42.22 CQ0:10为一循环队列,初态front=rear=1,画出下列操作后队的头、尾指示器状态:(1) d,e,b,g,h入队;(2) d,e出队;(3) i,j,k,l,m,入队;(4) b出队;(5) n,o,p,q,r入队。2.23试画出表达式A*(B-D)/C*(E*F)执行过程中NS,OS栈的变化情况。2.24用一长度为m的数组存放一双向栈,两个栈顶分别为top1和top2,如图所示。上溢条件为top1=top2,从键盘输入一串整数,奇数入stack1,偶数如stack2,直到上溢时停止输入。试编写一算法实现此过程。 O_E(R,m,top1,top2,x)1. top1m;top21 /top1,top2置初值2. if (top1=top2) then 上溢,return 3. while (top1<>top2) do 4. if (x mod 2=0) thenRtop2x;top2top2+15. else Rtop1x;top1top1+16.end(while)7.retun2.25 有一个二维数组A1:m ;1:n,假设A3,2地址为1110,A2,3地址为1115,若每个单元占一个空间,问A1,4的地址是多少答案:11202.26用三元组和带行辅助向量形式表示下列的稀疏矩阵:2.28将题图2.3的一般树化为二叉树。答案:2.29 设一颗完全二叉数有1000个结点,试问:(1)有多少个叶子结点 500(2)有多少个度为2的结点 499(3) 有多少个结点只有非空左子树 12.30 设一颗二叉树其中序和后序遍历为中序:BDCEAFHG后序:DECBHGFA答案:ABCDEFHG231.对二叉树写出如下算法:(1)复制一棵二叉树;(2)判断两棵二叉树是否相等;(3)计算二叉树的树叶;(4)计算二叉树的深度;解:1)/复制一棵二叉树/*算法思想 采用递规函数来实现 (1)如果树为空,则复制一棵空树; (2)如果树不为空,则依次递规复制已知二叉树的左子树和有子树; (3)生成一个新的根结点,使复制得到的左子树和右子树的根指针分别成为这个新生成结点的左指针域和右指针域的值。 算法编写:*/BiTree *CopyTree(BiTree *T)/if(!T) return NULL;if(T->lchild)newlchild=CopyTree(T->lchild);/else newlchild=NULL;/if(T->rchild)newrchild=CopyTree(T->rchild);/else newrchild=NULL;/newnode=GetTreeNode(T->data,newlchild,newrchild); /return newnode;/CopyTreeBiTNode *GetTreeNode(TelemType item,BiTNode *lptr,BiTNode *rptr)/T=new BiTNode;T->data=item;T->lchild=lptr;T->rchild=rptr;return T;/GetTreeNode(2)在这里要对一种情况进行说明当root1的左子树与root2的左子树相同,root1的右子树与root2的右子树相同时,这两颗二叉树相同。当root1的左子树与root2的右子树相同,root1的右子树与root2的左子树相同时,这两颗二叉树同样相同。以下是实现代码bool IsBSTEqual(BNode* root1,BNode* root2) if (root1=NULL && root2=NULL) return true; else if (root1=NULL | root2=NULL) return false; else if (root1->data != root2->data) return false; bool is_left = IsBSTEqual(root1->left,root2->left); bool is_right = IsBSTEqual(root1->right,root2->right); if (is_left&&is_right) return true; else is_right = IsBSTEqual(root1->right,root2->left); is_left = IsBSTEqual(root1->left,root2->right); if (is_left&&is_right) return true; else return false; 3)4)计算叶子数和树的深度。计算叶子:递归每个节点,当没有左孩子和右孩子时即为叶子。计算深度:对每个节点计算左右子树的深度,节点的最终深度是其子树深度的最大值加1,空树返回-1.struct Tree ElementType Element; Tree *left; Tree *right;int CountLeaf(Tree *T) static int count = 0; if (T != NULL) CountLeaf(T->left); CountLeaf(T->right); if (T->left = NULL && T->right = NULL) count+; return count; int Depth(Tree *T) int depthLeft, depthRight, depth; if (T = NULL) return -1; else depthLeft = Depth(T->left); depthRight = Depth(T->right); depth = 1 + (depthLeft > depthRight ? depthLeft:depthRight); return depth;2.32.给定一组元素17,28,36,54,30,27,94,15,21,83,40,画出由此生成的二叉排序树。83283040219454361517解:272.33给定一组权值W=8,2,5,3,2,17,4,画出由此生成的哈夫曼树。2.34.有一图如题图2.4所示:(1)写出此图的邻接表与邻接矩阵;(2)由给点V1作深度优先搜索和广度优先搜索;(3)试说明上述搜索的用途。2101820191716151314121197846531解:(1)8521103121224314534641515756171867157118181089119210191210111311312201412131513414161461520171516181671719179182018111919161320(2)V1作深度优先搜索: V1作广度优先搜索:(3)为了避免同一顶点被多次访问。2.35.有一又向图如题图2.5所示:5643(1)写出每一结点的入度和出度各为多少;(2)写出上图的邻接矩阵和邻接表。解:V1:入度=3 出度=0V2:入度=2 出度=2V3:入度=1 出度=2V4:入度=2 出度=2V5:入度=2 出度=1V6:入度=0 出度=4153123456142 45 21 63.36 求题图2.6中结点a到各结点之间最短路径。hfgedcba 2 2 2 2 1 2 3 3 1 4 1解:2.37 求题图2.7中所示AOV网所有可能的拓扑顺序结果。 解: 21738546V1V2V3V4V5V6 0000013 8 68 4 8 V7 0V8 0 0 8 4 拓扑排序:V7->V5->V2->V4->V6->V3->V1->V82.38 题图2.8所示AOE网,求:(1).每一事件最早开始时间和最晚开始时间;(2).该计划最早完成时间为多少。解: 活动最早最迟开始时间a1a2a3a4a5a6a7a8a9a10a11a12a13a14E00566121212191916202325L409616121916191923202325L-E404010074007000事件最早最迟开始时间V1V2V3V4V5V6V7V8V9V10VE05612191620232527VL096121923202325272.39某校97级同学举办运动会,报名同学学号为97438,97102,97528,97136,97338,97250,97407,97239,97227,97517,97321,97421,97451,97241,97118,97543,97309画出进行分块查找的数据组织形式。2.40 画一棵对20个记录进行对分查找的判定树,并求等概率情况下的平均查找长度。ASL=(1+2*2+3*4+4*8+5*5)/20=3.72.41设有10个记录的关键字为ICKES,BARBER,ELYOT,KERN,FRENCE,LOWES,BENSDN,FONK,ERVIN,KNOX。构造=10/13的哈希表,取关键字首字母表中的序号为哈希函数值,用随机探测解决冲突,di=(d1+Rj) mod 13,Rj取自伪随机数列:3,7,1,12,10,。统计该表的平均查找长度ASL。2.42对于给定的一组关键字:41,62,13,84,35,96,57,39,79,61,15,83。分别写出:插入排序、简单选择排序、堆排序、冒泡排序、快速排序、二叉树排序的排序过程,并对各排序方法进行分析。排序,简单选择排序、堆排序、冒泡排序、快速排序、二叉树排序的排序过程,并对排序方法进行分析。插入13 41 62 84 35, 96,57,39, 79,61,15,8313 35 41 62 84 96 57 39 79 61 15 8313 35 41 57 62 84 96 39 79 61 15 8313 35 39 41 57 62 84 96 79 61 15 8313 35 39 41 57 62 79 84 96 61 15 8313 35 39 41 57 61 62 79 84 96 15 8313 15 35 39 41 57 61 62 79 84 96 8313 15 35 39 41 57 61 62 79 83 84 96 对于具有n个记录的文件,要进行n-1趟排序就地排序稳定的排序方法简单选择排序41,62,13,84,35,96,57,39,79,61,15,8341 62 13 84 35 96 57 39 79 61 15 8313 41 62 84 35 96 57 39 79 61 15 8313 15 41 62 84 35 96 57 39 79 61 8313 15 35 41 62 84 96 57 39 79 61 8313 15 35 39 41 62 84 96 57 79 61 8313 15 35 39 41 57 62 84 96 79 61 8313 15 35 39 41 57 61 62 84 96 79 8313 15 35 39 41 57 61 62 79 84 96 8313 15 35 39 41 57 61 62 79 83 84 96堆排序41 62 13 84 35 96 57 39 79 61 15 83 96, 84, 83, 79, 62, 61, 57, 41, 39, 35, 15, 13冒泡排序41,62,13,84,35,96,57,39,79,61,15,83 41, 13, 62, 35, 84, 57, 39, 79, 61, 15, 83, 96 13, 41, 35, 62, 57, 39, 79, 61, 15, 83, 84, 96 13, 35, 41, 57, 39, 62, 61, 15, 79, 83, 84, 96 13, 35, 41, 39, 57, 61, 15, 62, 79, 83, 84, 96 13, 35, 39, 41, 57, 15, 61, 62, 79, 83, 84, 96 13, 35, 39, 41, 15, 57, 61, 62, 79, 83, 84, 96 13, 35, 39, 15, 41, 57, 61, 62, 79, 83, 84, 96 13, 35, 15, 39, 41, 57, 61, 62, 79, 83, 84, 96 13, 15, 35, 39, 41, 57, 61, 62, 79, 83, 84, 96 13, 15, 35, 39, 41, 57, 61, 62, 79, 83, 84, 96 13, 15, 35, 39, 41, 57, 61, 62, 79, 83, 84, 96 13, 15, 35, 39, 41, 57, 61, 62, 79, 83, 84, 96快速排序41,62,13,84,35,96,57,39,79,61,15,83 13, 35, 39, 15, 41, 96, 57, 83, 79, 61, 84, 62 13, 35, 39, 15, 41, 96, 57, 83, 79, 61, 84, 62 13, 15, 35, 39, 41, 96, 57, 83, 79, 61, 84, 62 13, 15, 35, 39, 41, 96, 57, 83, 79, 61, 84, 62 13, 15, 35, 39, 41, 96, 57, 83, 79, 61, 84, 62 13, 15, 35, 39, 41, 62, 57, 83, 79, 61, 84, 96 13, 15, 35, 39, 41, 57, 61, 62, 79, 84, 83, 96 13, 15, 35, 39, 41, 57, 61, 62, 79, 84, 83, 96 13, 15, 35, 39, 41, 57, 61, 62, 79, 84, 83, 96 13, 15, 35, 39, 41, 57, 61, 62, 79, 84, 83, 96 13, 15, 35, 39, 41, 57, 61, 62, 79, 83, 84, 96 二叉树排序 二叉树建立过程 41 41, 62 13, 41, 62 13, 41, 62, 84 13, 35, 41, 62, 84 13, 35, 41, 62, 84, 96 13, 35, 41, 57, 62, 84, 96 13, 35, 39, 41, 57, 62, 84, 96 13, 35, 39, 41, 57, 62, 79, 84, 96 13, 35, 39, 41, 57, 61, 62, 79, 84, 96 13, 1