每学一章,都会更新课后习题及我做的答案,我会自己做一遍然后更正标准答案在这里,全文原创,部分习题会加一点我认为有难点的注释,一起学习。
BTW,最近浏览了一下基本上所有的有关本书学习的帖子答案都是第二版的,应该是同一个作者然后大家纷纷照搬过来的,我拿到的是07年出版的,应该是第三版的书,答案不官方,但基本可以为答案负责,如有错误请指正,THX。
1、简述下列术语:数据、数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型
数据:是指能输入计算机并被计算机程序处理的符号的介质的总成
数据元素:是数据的基本单位
数据对象:是性质相同的数据元素的集合
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合;也叫数据的逻辑结构
存储结构:数据结构在计算机中的表示称为数据存储结构,也叫物理结构
数据类型:是对数据的一个分类,用以刻画操作对象的特性
抽象数据类型:是指一个数学模型以及定义在该模型上的一组操作
2、试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别
本书数据结构的概念是:结构类型是一种数据类型和定义在其上的一组操作组成。我认为这个概念这里的一组操作就是本书与二级语言中定义的数据类型的区别。(答案也确实如此)
3、设有数据结构(D,R),其中:
D={d1,d2,d3d4}, R={r} ,r={(d1,d2), (d2,d3), (d3,d4)}
试按照图论中图的画法画出其逻辑结构图
注:此题太烦了,自己画画就行了
4、此题略
大概思路:写出三元组(D,S,P)然后在InitTriplet阶段写出复数和有理数的形式。
5、试画出下列程序的等价框图
1)
product = 1; i=1;
while(i<=n) {
product * =i; //product = product *i
i++;
}
2)
i=0;
do {
i++;
} while ((i!=n)&&(a[i]!=x));
同上
3)
switch {
case x<y; z=y-x; break;
case x ==y; z =abs(x*y); break; // abs()为取绝对值
default: z=(x-y)/abs(x)*abs(y);
}
同上
6、在程序设计中常用到下列三种不同的出错处理方式
1)用exit语句终止执行并报告错误
2)以函数的返回值区别正确返回和错误返回
3)设置一个整型变量的函数参数以区别正确返回或某种错误返回
说一说各自的优缺点;
答:1):强制终止程序或正在执行的函数,返回操作系统。优点是:方便快捷,缺点是:不知道函数的bug出现在什么地方,无法排查错误。
2):优点:可以知道具体哪一步的错误,缺点:无法知道是函数本身执行错误还是参数调用错误
3):优点:可以比较详细的知道BUG发生的原因。缺点:对于代码量较大的工程太过繁琐复杂
7、此题略
8、设n为正整数,试确定下列各程序段中前置以记号@的语句频度
注:语句频度的计算是该语句的重复执行次数
1)
i=1; k=0;
while(i<=n-1){
@ k +=10 * i;
i++;
}
@的语句频度为n-1
2)
i=1; k=0;
do {
@ k += 10*i;
i++;
} while(i<=n-1);
语句频度是:n-1
3)
i=1;k=0;
while(i<=n-1){
i++;
@ k+=10*i;
}
语句频度是n-1
4)
k=0;
for(i=1; i<=n; i++) {
for(j=i; j<=n; j++)
@ k++;
}
语句频度是 n^2
5)的思路同上
6)语句频度是n
7)语句频度同上
8)语句频度是11
9、假设n为2的乘幂,并且n>2,试求下列算法的时间算法复杂度以及变量count的值
int Time(int n) {
count = 0; x=2;
while(x<n/2) {
x *= 2; count++;
}
return count;
}
这个算法的复杂度=O(n),原因是:n为2的乘幂,设n 是2^n,x=2,则x是2^1,判断条件可以等价于
2^1<2^n-1? 于是复杂度是n,count的值是n
10、此题略
11、已知有实现同一功能的两个算法,其时间复杂度分别为和,假设现实计算机可连续运算的时间为秒(100多天),又每秒可执行基本操作(根据这些操作来估算算法时间复杂度)次。试问在此条件下,这两个算法可解问题的规模(即n值的范围)各为多少?哪个算法更适宜?请说明理由
由题可知,计算机的计算能力为10^12,则对于第一个算法,,算出来n是大于30的
第二种,n^10=10^12,得到15<n<16,所以很明显第一种的算法更优
12、13、14都比较简单
15、这题是前面基础题里面稍微有点难度的,因为数学归纳法如果不是考研党的话可能已经忘了,这里把数学归纳法贴出来。
根据上面的例子
1)
证(1):当n=1时,,等式成立
假设,n=m时,等式也成立,即原式。
则当n=m+1时,右边可知n=m+1时,也成立。证毕
持续更新中……明天更新算法题
参考文献: 1、维基百科
2、严蔚敏--《数据结构》-C语言版