计算机软件技术基础第三版答案.docx
《计算机软件技术基础第三版答案.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础第三版答案.docx(17页珍藏版)》请在冰豆网上搜索。
计算机软件技术基础第三版答案
计算机软件技术基础第三版答案
【篇一:
《计算机软件技术基础(第三版)》的课后答案】
是信息?
信息与数据的区别和联系在何处?
信息定义之一:
信息是现实世界中存在的客观实体、现象、关系进行描述的数据。
信息定义之二:
信息是经过加工后并对实体的行为产生影响的数据。
与数据的区别和联系:
数据定义:
数据是现实世界客观存在的实体或事物的属性值,即指人们听到的事实和看到的景象。
我们把这些数据收集起来,经过处理后,即得到人们需要的信息。
信息和数据的关系可以归结为:
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软件技术发展的几个阶段各有什么特点?
它与硬件的关系如何?
第一阶段:
高级语言阶段
特点:
这一时期,编译技术代表了整个软件技术,软件工作者追求的主要
目的是设计和实现在控制结构和数据结构方面表现能力强的高级语言。
但在这一时期内,编译系统主要是靠手工编制,自动化程度很低。
硬件关系:
此时期计算机的硬件要求仅能用机器指令来编制可运行的程序。
第二阶段:
结构程序设计阶段
特点:
在程序的正确性方面,提出了结构化程序设计思想使程序的可靠性
提高了。
程序设计方法论方面,提出由顶向下法和自底向上法。
使程序模块
化,使问题的复杂性和人的思维统一起来了。
出现了软件生产管理。
硬件关系:
磁盘问世,操作系统发展,非数值计算应用发展,通信设备完
善,网络发展,集成电路发展等使软件复杂性增加产生软件危机,在此背景下发展了软件技术。
第三阶段:
自动程序设计阶段
特点:
向集成化、一体化发展。
出现了软件开发环境。
程序设计基本方法
进一步改进。
硬件关系:
集成电路迅速发展以及高分辨率终端的出现,为个人计算机发
展提供了条件,再加上人工智能、专家系统研究的发展,使程序设计进入成熟期。
第二章
2.1什么是数据结构?
它对算法有什么影响?
数据结构是指同一数据对象中各数据元素间存在的关系。
对算法是影响:
算法的实现必须借助程序设计语言中提供的数据类型及其
运算。
一个算法的效率往往与数据的表达形式有关,因此数据结构的选择对数据处理的效率起着至关重要的作用。
它是算法和程序设计的基本部分,它对程序的质量影响很大。
2.2何谓算法?
它与程序有何区别?
广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。
计算机算法是通过计算机能执行的算法语言来表达的。
和程序的区别:
一个程序包括两个方面的内容:
(1)、对数据的描述,即数据结构。
(2)、对操作的描述,即算法。
所以算法是程序的一个要素。
2.3何谓频度,时间复杂度,空间复杂度?
说明其含义。
频度:
在某个算法中某个语句被重复执行的次数就是此语句的频度。
时间复杂度:
是用来估算一个算法的执行时间的量,以算法中频度最大的语句来度量。
空间复杂度:
指在算法中所需的辅助空间的单元,而不包括问题的原始数据占用的空间。
2.6数据的存储结构主要有哪两种?
它们之间的本质区别是什么?
数据的存储结构:
向量和链表。
本质区别:
向量是连续存放的,其存储空间是静态分配的,以存放顺序来表
达元素的前后件的关系。
链式存储结果不需要一组连续的存储单元,其数据元素可以分散存放在存储空间中,其元素关系由指针来指向。
2.16试比较顺序表和链表的优缺点。
1.线性表的长度是否固定方面:
由于向量的存储空间是静态分配的,链表的存储空间是动态分配的,因此若表长不固定时采用线性链表较好。
2.线性表的主要操作是什么:
由于向量是连续存放的,所以适用于查找操作,不适用插入、删除操作。
由于线性链表只能顺序存取,所以适用于插入、删除操作,不适用于查找操作。
3.采用的算法语言:
线性链表要求所使用的语言工具提供指针类型变量。
2.17试比较单向链表与双向链表的优缺点。
1.单向链表只能单方向地寻找表中的结点,双向链表具有对称性,从表中某一给定的结点可随意向前或向后查找。
2.在作插入、删除运算时,双向链表需同时修改两个方向上的指针,单向链表则简便些。
2.23试画出表达式a*(b-d)/d+c**(e*f)执行过程中ns,os栈的变化情况。
b-d=t1d/t1=t2t2*a=t3e*f=t4t4**c=t5
2.26用三元组和带行辅助向量形式表示下列稀疏矩阵:
80
0?
1300026?
1500
220?
15?
0?
?
?
?
0113
000?
?
1500
600050?
?
(1):
?
?
?
0?
30
403000?
?
?
0
00?
600?
?
(2):
200040?
?
000000?
?
00
0?
?
?
?
000000?
?
9100000?
?
00?
12?
02
0000000?
?
?
?
00
28000?
?
?
?
?
0004000
00?
?
70
0000000?
?
?
?
12002060030?
?
(1):
三元组
带行辅助向量
2.27试说明树与二叉树有何不同?
为何要将一般树转换为二叉树?
树与二叉树区别:
树是由n个(n=0)结点组成的有限集合t,其中有且仅有一个结点称为根结点,在此类元素结点之间存在明显的分支和层次关系。
二叉树是一种特殊的树结构,每一个结点最多只有两个孩子,即最多只有两个分支。
为何要转换:
一般树,树中结点次序没有要求,分支庞杂。
而二叉树,元素之间存在严谨的前后代关系,在对数据元素进行删除、查找、插入等运算时更加有效率。
2.28将下列(题图2.3)的一般树化为二叉树。
题图2.3
转换后:
2.30设一棵二叉树其中序和后序遍历为
中序:
bdceafhg后序:
decbhgfa
画出这棵二叉树的逻辑结构,并写出先序遍历结果。
先序遍历:
abcdefgh其逻辑结构如下:
【篇二:
《计算机软件技术基础》课后题答案】
一节概论
一、选择题
1.要求同一逻辑结构的所有数据元素具有相同的特性,这意味着()。
a.数据元素具有同一的特点*b.不仅数据元素包含的数据项的个数要相同,而且对应数据项的类型要一致c.每个数据元素都一样d.数据元素所包含的数据项的个数要相等
2.数据结构是一门研究非数值计算的程序设计问题中计算机的(
(1))以及它们之间的(
(2))和运算的学科。
(1)a.操作对象b.计算方法*c.物理存储d.数据映像
(2)a.结构*b.关系c.运算d.算法
3.数据结构被形式地定义为(d,r),其中d是(
(1))的有限集合,r是d上(
(2))的有限集合。
(1)a.算法*b.数据元素c.数据操作d.逻辑结构
(2)a.操作b.映像c.存储*d.关系
4.在数据结构中,从逻辑上可以把数据结构分为()。
a.动态结构和静态结构b.紧凑结构和非紧凑结构*c.线性结构和非线性结构
d.内部结构和外部结构
5.线性表的顺序存储结构是一种()的存储结构。
*a.随机存取b.顺序存取c.索引存取d.hash存取
6.算法分析的目的是()。
a.找出数据结构的合理性b.研究算法中的输入和输出的关系*c.分析算法的效率以求改进d.分析算法的易懂性和文档性
7.计算机算法指的是(
(1)),它必须具备输入、输出和(
(2))等五个特征。
(1)a.计算方法b.排序方法*c.解决某一问题的有限运算序列d.调度方法
(2)a.可行性、可移植性和可扩充性*b.可行性、确定性和有穷性c.确定性,有穷性和稳定性d.易读性、稳定性和安全性
8.线性表若采用链表存储结构,要求内存中可用存储单元的地址()。
a.必须是连续的b.部分必须是连续的c.一定是不连续的*d.连续不连续都可以
9.在以下的叙述中,正确的是()。
a.线性表的线性存储结构优于链式存储结构*b.二维数组是它的每个数据元素为一个线性表的线性表c.栈的操作方式是先进先出d.队列的操作方式是先进后出
10.根据数据元素之间关系的不同特性,以下四类基本的逻辑结构反映了四类基本的数据组织形式,其中解释错误的是()。
*a.集合中任何两个结点之间都有逻辑关系但组织形式松散b.线性结构中结点按逻辑关系依次排列形成一条“锁链”c.树形结构具有分支、层次特性,其形态有点像自然界中的树d.图状结构中的各个结点按逻辑关系互相缠绕,任何两个结点都可以邻接
11.以下说法正确的是()。
a.数据元素是数据的最小单位b.数据项是数据的基本单位c.数据结构是带有结构的各数据项的集合*d.数据结构是带有结构的数据元素的集合
二、判断题
╳1.数据元素是数据的最小单位。
√2.数据结构是带有结构的数据元素的集合。
√3.数据结构、数据元素、数据项在计算机中的映像分别称为存储结构、结点、数
据域。
╳4.数据项是数据的基本单位。
√5.数据的逻辑结构是指各数据元素之间的逻辑关系,是用户按使用需要建立的。
√6.数据的物理结构是数据在计算机中实际的存储形式。
╳7.算法和程序没有区别,所以在数据结构中二者是通用的。
√8.顺序存储结构属于静态结构,链式存储结构属于动态结构。
三、填空题
1.所谓数据的逻辑结构指的是数据元素之间的____逻辑关系_____。
2,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,它包括三方面的内容___数据的逻辑结构、数据的存储结构、对数据施加的操作___。
3.数据的逻辑结构包括_____集合结构___、_____线性结构___、____树型结构_____和__图状结构_____四种类型。
4.在线性结构中,开始结点__没有_前驱结点,其余每个结点有且只有__一个_个前驱结点。
6.在图形结构中,每个结点的前驱结点和后继结点可以有___任意个___。
7.算法的五个重要特性是__可行性___、___确定性___、___有穷性___、___输入__、___输出__。
8.下列程序段的时间复杂度是__o(n)___。
for(i=1;i=n;i++)a[i,i]=0;
9.下列程序段的时间复杂度是__o(n2)___。
s=0;
for(i=1;i=n;i++)
for(j=1;j=n;j++)s=s+b[i,j];
sum=s;
10.存储结构是逻辑结构的___物理__实现。
11.从数据结构的观点看,通常所说的“数据”应分成三个不同的层次,即__数据__、__数据元素_和__数据项___。
12.根据需要,数据元素又被称为__结点__、__记录__、___元素__或__顶点_。
13.通常,存储结点之间可以有___顺序存储__、____链式存储__、____索引存储__、___散列存储_四种关联方式,称为四种基本存储方式。
14.通常从___确定性___、__可读性_、___健壮性__、_高效性__等几方面评价算法(包括程序)的质量。
15.一个算法的时空性能是指该算法的_时间复杂度___和___空间复杂度_,前者是算法包含的__计算量__,后者是算法需要的___存储量__。
16.在一般情况下,一个算法的时间复杂度是__问题规模__的函数。
17.常见时间复杂度的量级有:
常数阶o(__1_)、对数阶o(__log2n___)、线性阶
o(__n__)、平方阶o(_n2_)和指数阶o(__2n_)。
通常认为,具有指数阶量级的算法是__不可行__的。
18.数据结构的基本任务是数据结构的__设计__和__实现__。
19.数据对象是性质相同的__数据元素_的集合。
20.抽象数据类型是指一个__数学模型__以及定义在该模型上的一组操作。
四、应用题
1.分析下列程序段的时间复杂度。
?
?
i=1;
while(i=n)i=i*2;
?
?
答:
o(log2n)
2.叙述算法的定义及其重要特性。
答:
算法是对特定问题求解步骤的一种描述,是指令的有限序列。
其中每一条指令表示一个或多个操作。
算法应该具有下列特性:
可行性、确定性、有穷性、输入和输出。
3.简述下列术语:
数据,数据元素,数据结构,数据对象。
答:
数据是信息的载体,是描述客观事物的数、字符,以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。
数据元素是数据的基本单位。
在不同的条件下,数据元素又可称为元素、结点、顶点、记录等。
数据结构是指相互之间存在着一种或多种关系的数据元素的集合。
数据对象是性质相同的数据元素的集合。
4.逻辑结构与存储结构是什么关系?
答:
在数据结构中,逻辑结构与存储结构是密切相关的,存储结构不仅将数据元素存储到计算机中,而且还要表示各数据元素之间的逻辑关系。
逻辑结构与计算机无关,存储结构是数据元素之间的关系在计算机中的表示。
5.将数量级210,n,n2,n3,nlog2n,log2n,2n,n!
,(2/3)n,n2/3按增长率进行排
列。
答:
(2/3)n,210,log2n,n2/3,n,nlog2n,n2,n3,2n,n!
6.设有数据逻辑结构为:
d={k1,k2,k3,?
,k9},r={k1,k3,k1,k8,k2,k3,k2,k4,k2,k5,k3,k9,k5,k6,k8,k9,k9,k7,k4,k6},画出这个逻辑结构的图示,并确定相对于关系r,哪些结点是开始结点,哪些结点是终端结点?
答:
图略。
开始结点k1、k2,终端结点k6、k7。
7.设有如图1.1所示的逻辑结构图,给出它的逻辑结构,并说出它是什么类型的逻辑结构。
【篇三:
《计算机软件技术基础》复习题(含答案)】
txt>1.线性表的链式存储结构与顺序存储结构相比优点是cd。
a.所有的操作算法实现简单b.便于随机存取
c.便于插入和删除d.便于利用零散的存储器空间
2.线性表是具有n个c的有限序列。
a.表元素b.字符c.数据元素
d.数据项e.信息项
3.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为c。
(1≤i≤n+1)
a.o(0)
c.o(n)b.o
(1)d.o(n)2
4.设a是一个线性表(a1,a2,?
an),采用顺序存储结构,则在等概率的前提下,平均每插入
一个元素需要移动的元素个数为b,平均每删除一个元素需要移动的元素个数为a;若元素插在ai与ai+1之间(0≤i≤n-1)的概率为
元素所要移动的元素个数为c;2(n?
i),则平均每插入一个n(n?
1)
n?
12
2n?
1c.3a.n23n?
1d.4b.
5.下列函数中,按它们在n?
?
时的无穷大阶数,最大的是d。
a.lognb.nlogn
c.2n/2d.n!
6.
a.s-next=p+1;p-next=s;
b.(*p).next=s;(*s).next=(*p).next;
c.s-next=p-next;p-next=s-next;
d.s-next=p-next;p-next=s;
7.将两个各有n个元素的有序表归并为一个有序表时,其最少的比较次数是a。
a.nb.2n-1
c.n-1d.2n
8.下面的程序段是合并两个无头结点链表(ha和hb)为一个无头结点链表ha的过程,作为参数的两个链表都是按结点的data域由大到小链接的。
合并后新链表的结点仍按此方式链接。
请填写下述空框,使程序能正确运行。
#definenull0
typedefstructnode{
intdata;
structnode*next;
}node,linklisttype;
voidcombine(linklisttype*ha,linklisttype*hb){
linklisttype*h,*p;
h=(linklisttype*)malloc(sizeof(linklisttype));h-next=null;p=h;while(ha!
=nullhb!
=null)
if(ha-data=hb-data){/*较大的元素先插入*/p-next=
(1);p=
(2);(3);
}else{p-next=(4);p=(5);(6);
}
if(ha==null)(7);if(hb==null)(8);ha=h-next;free(h);
(2)p-next(3)ha=ha-next}参考答案:
(1)ha
(4)hb(5)p-next(6)hb=hb-next
(7)p-next=hb(8)p-next=ha
9.如果表a中所有元素(a1,a2,?
an)与表b的一个顺序子表(bk,bk+1,?
bk+n-1)完全相同(即
a1=bk,a2=bk+1,?
an=bk+n-1),则称表a包含在表b中。
设ha,hb为带头结点的单链表,分别表
示有序表a和b,下面的函数用于判别表a是否包含在表b中,若是,则返回true,否则返回false。
(提示:
用递归实现)
#definetrue1
#definefalse0
#definenull0
typedefstructnode{
intdata;structnode*next;
}node,linklisttype;
intinclusion(linklisttype*ha,linklisttype*hb){
linklisttype*pa,*pb;
pa=ha-next;
}pb=hb-next;
(1);while(
(2))if(pa-data=pb-data)else(5);(3);(4);
参考答案:
(1)if(pa==null)return(true)
(2)pb!
=nullpa-data=pb-data
(3)return(inclusion(pa,pb))
(4)pb=pb-next;
(5)return(false)
10.在本题的程序中,函数create_link_list(n)建立一个具有n个结点的循环链表;函数josephus(n,i,m)对由create_link_list(n)所建立的具有n个结点的循环链表按一定的次序逐个输出,并删除链表中的所有结点。
参数n(n0)指明循环链表的结点个数,参数i(1≤i≤n)指明起始结点,参数m(m0是步长),指明从起始结点或前次被删除并输出的结点之后的第m个结点作为本次被输出并删除的结点。
例如,对于下图所示的具有6个结点的循环链表,在调用josephus(6,3,2)后,将输出5,1,3,6,4,2。
请在空框处填上适当内容,每框只填一个语句。
#definenull0
typedefstructnode{
intdata;
structnode*next;
}node,linklisttype;
linklisttype*create_link_list(intn){
linklisttype*head,*p,*q;
inti;
head=null;if(n0){
head=(linklisttype*)malloc(sizeof(linklisttype));
p=head;for(i=1;i=n-1;i++){
}p-data=i;q=(linklisttype*)malloc(sizeof(linklistttype));
(1);
(2);/*此循环用于建立一个链表,链表的内容从1至n-1*/
p-data=n;(3);
}/*建立从尾链到首的环形结构*/
return(head);
}
voidjosephus(intn,intj,intm){
linklisttype*p,*q;
}
参考答案:
(1)p-next=q;
(2)p=q;
(3)p-next=head
(4)j=0
(5)q=p-next;
(6)p-next=q-next
空集合,表示非空集合的链表根据元素之值按递增排列,执行c=a-b之后,表示集合a和b的链表不变,若结果集合c非空,则表示它的链表应根据元素之值按递增序排列。
函数append()用于在链表中添加结点。
#includestdio.h
#definenull0
typedefstructnode{
intdata;structnode*next;intj;p=create_link_list(n);for(;i1;i--)p=p-next;(4);while(jn){}for(i=1;i=m-1;i++)p=p-next;(5);printf(“%8d”,q-data);(6);free(q);j=j+1;
}node;
node*append(node*last,intx){
}
last-next=(node*)malloc(sizeof(node));last-next-data=x;return(last-next);
node*difference(node*a,node*b){
node*c,*last;c=last=(node*)malloc(sizeof(node));while(
(1))if(a-datab-data){
last=append(last,a-data);a=a-next;
}
else
if(
(2)){a=a-next;b=b-next;}else(3);while((4)){
}last=append(last,a-data);a=a-next;
(5);
last=c;