严蔚敏版数据结构课后习题答案-完整版 下载本文

(1) product=1; i=1; while(i<=n){ product *= i; i++; } (2) i=0; do { i++;

} while((i!=n) && (a[i]!=x)); (3) switch {

case x

1.6 在程序设计中,常用下列三种不同的出错处理方式: (1) 用exit语句终止执行并报告错误; (2) 以函数的返回值区别正确返回或错误返回;

(3) 设置一个整型变量的函数参数以区别正确返回或某种错误返回。

试讨论这三种方法各自的优缺点。

解:(1)exit常用于异常错误处理,它可以强行中断程序的执行,返回操作系统。

(2)以函数的返回值判断正确与否常用于子程序的测试,便于实现程序的局部控制。

(3)用整型函数进行错误处理的优点是可以给出错误类型,便于迅速确定错误。

1.7 在程序设计中,可采用下列三种方法实现输出和输入: (1) 通过scanf和printf语句; (2) 通过函数的参数显式传递; (3) 通过全局变量隐式传递。 试讨论这三种方法的优缺点。

解:(1)用scanf和printf直接进行输入输出的好处是形象、直观,但缺点是需要对其进行格式控制,较为烦琐,如果出现错误,则会引起整个系统的崩溃。

(2)通过函数的参数传递进行输入输出,便于实现信息的隐蔽,减少出错的可能。

(3)通过全局变量的隐式传递进行输入输出最为方便,只需修改变量的值即可,但过多的全局变量使程序的维护较为困难。 1.8 设n为正整数。试确定下列各程序段中前置以记号@的语句的频度:

(1) i=1; k=0; while(i<=n-1){ @ k += 10*i; i++;

}

(2) i=1; k=0; do {

@ k += 10*i; i++; } while(i<=n-1); (3) i=1; k=0; while (i<=n-1) { i++; @ k += 10*i; } (4) k=0;

for(i=1; i<=n; i++) { for(j=i; j<=n; j++) @ k++; }

(5) for(i=1; i<=n; i++) { for(j=1; j<=i; j++) { for(k=1; k<=j; k++) @ x += delta; }

(6) i=1; j=0;

while(i+j<=n) { @ if(i>j) j++; else i++; }

(7) x=n; y=0; // n是不小于1的常数 while(x>=(y+1)*(y+1)) { @ y++; }

(8) x=91; y=100; while(y>0) {

@ if(x>100) { x -= 10; y--; } else x++; } 解:(1) n-1 (2) n-1 (3) n-1

(4) n+(n-1)+(n-2)+...+1=

n(n?1) 2n (5) 1+(1+2)+(1+2+3)+...+(1+2+3+...+n)=?i?1i(i?1) 21n1n21n21n =?i(i?1)??(i?i)??i??i

2i?12i?12i?12i?1 =

111n(n?1)(2n?1)?n(n?1)?n(n?1)(2n?3) 12412 (6) n