数据结构编程题及解析c语言版,数据结构习题集答案(C语言版).pdf_c语言数据结构题目,c语言数据结构答案-C/C++文档类资源...

数据结构的C语言的经典练习题,有详细的答案和注释讲解

1.6在程序设计中,常用下列三种不同的出错处理方式:

(1)用exi语句终止执行并报告错误

(2)以函数的返回值区别正确返回或错误返回;

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

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

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

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

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

1.7在程序设计中,可采用下列三种方法实现输出和输入:

(1)通过 scanf和 printf语句;

(2)通过函数的参数显式传递;

(3)通过全局变量隐式传递。

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

解:(1)用 scanf和 printf直接进行输入输岀的好处是羏象、直观,但缺点是需要对其进行格式控制,

较为烦琐,如果出现错误,则会引起整个系统的崩溃。

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

(3)通过全局变量的隐式传递进行输入输出最为方便,只需修改变量的值即可,但过多的全局变量使程

序的维护较为困难

1.8设n为正整数。试确定下列各程序段中前置以记号@的语句的频度:

while(i=n-1)(

@k+=10*i;

(2)i=1;k=0

k+10*i

y while(i<=n-1)

(3)i=1;k=0;

e(i<=n-1){

i++;

@k+=10*i

(4)k=0;

for(i-1: i

for (j=i: j<=n: j++)

(5)for(i=1;i<=n;i++)

for (j-1: j<=i: j++)i

for(k=1: k<=j: k++)

while(i+j<=n)i

g if(i>j)j++;

e⊥se

(7)x=n;y=0;∥/n是不小于1的常数

while(x>=(y+1)*(y+1)1

(8)x=91;y=100;

while(y>0)[

@if(x》100){x=10;y-;}

解:(1)

(2)n

(3)n-1

n(n+

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

i(i+1)

(5)1+(1+2)+(1+2+3)+.+(1+2+3+,,,+n)

L+

1(n+1)(2n+1)+-n(+1)=n(n+1)(2n+3)

12

」向下取整

(8)1100

1.9假设n为2的乘幂,并且n>2,试求下列算法的时间复杂度及变量 count的值(以n的函数形式表示)

int Time(int n)t

t=0

while(x

2: count++

retur

unt

解:O(log2n)

2

count=log n-2

11已知有实现同一功能的两个算法,其时问复杂度分别为O2)和O(),假设现实计算机可连续

运算的时间为10′秒(100多天),又每秒可执行基本操作(根据这些操作来估算算法时间复杂度)10次。

试问在此条件下,这两个算法可解问题的规模(即n值的范围)各为多少?哪个算法更适宜?请说明理由

解:2=1012

40

n=10

n=16

则对于同样的循抔次教n,在这个规模卜,第二种算法所花費的代价婓大得多。故在这个趔模卜,第

一种算法更适宜

1.12设有以下三个函数:

f(n)=2ln4+n2+100,g{n)=15n4+500n3,h(n)=50)m35+ nlogn

请判断以下断言正确与否:

(1)f(n)是0(g(n)

(2)h(n)是0(f(n))

(3)g(n)是0(h(n)

(4)hn)是0(n35

(5)h(n)是0( nlogn)

解:(1)对(2)错(3)错(4)对(5)错

1.13试设定若干n值,比较两函数n2和50nlog2n的增长趋势,并确定n在什么范围内,函数n2的值

大于50nlog2n的值。

解:n2的增长趋势快,但在n较小的时候,50nlog2n的值较大

当n>438时,n2>50nlog2n

1,1判断下列各对函数f(n)和g(n),当n→∞时,哪个函数增长更快?

)f()=10m2+m(n+10).g)=2n+n+7

(2)f(an)=(un(n!)+5)2,g(n)=13n25

)rf(n)=n2+Vn4+1,g(n)=(n(n)2+n

(f(n)=2)+(2),g)=n)+

解:(1)g(n快(2)g(n)快(3)f(m)快(4)f(m)快

1.15试用数学归纳法证明

()∑2=m(n+1)n+1)6(n>0)

2∑x=(x1-1/(x-1)(

x≠1,n≥0

r=0

()∑2=2”-

(n≥1

∑(2i-1)

1.16试写一算法,自大至小依次输出顺序读入的三个整数X,Y和Z的值

int max 3(int x, int y,

if(x)z) return x

else return z

f(y>z)return y

else return Z

1.17已知k阶斐波那契序列的定义为

f60=0,f1=0,…,f2=0,f

f=fu-+fu2+

kk+1,

试编写求k阶斐波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现

解:k>0为阶数,n为数列的第n项

int Fibonacci ( int k, int n

if(k<1) exit ( OVERFLOW)

if(!p) exit(OVERFLOW)

1nt

for(i=0;i

if(i

else pli]=

(i=k+1;i

p[0

for(j=0:j

p[k]=2*p[k1]x;

irn pki

1.18假设有A,B,C,D,E五个高等院校进行田径对抗赛,各院校的单项成绩均已存入计算机,并构成一

张表,表中每一行的形式为

项目名称性别

校名

成绩

得分

编写算法,处理上述表格,以统计各院校的男、女总分和团体总分,并输出。

typedef enuma, B, C, D, E) SchoolName:

typedef enum [ Female, Molc) ScxTypc

typedef struct

chur event「31;//目

SexType sex

SchoolNane school

Int sco

t

typedef struct

int Malesun

//男团总分

int femalesum;//女团总分

int Totalsun://团体总分

Sum SumScore(SchoolName sn, Component a[, int n)

Sum tem

Males

temp. Femalesum-0;

temp. TotalSum=0

Int

f(ali] school==sn)i

if (ali]. sex==Male) temp. MaleSum+=ali. score

I[i]. sex==Female) temp FemaleSumt=alil. score

temp.TotalSumtemp MaleSumttemp. FemaleSum

return temp:

1.9试编写算法,计算i*的值并存入数组a[0. arrsize1]的第i-1个分量中(i=1,2,…,n)。假设计

算机中允许的整数最大值为 maxint,则当 narrsiz或对某个k(1≤k≤n),使k2k> max int时,

应按出错处理。注意选择你认为较好的出错处理方法

解:

#inc lude

#define MAXINT 65535

tdefine ArrSize 10

i ( int i)

t main

nt i, k

int aLArrs1zel

cou

Enter k

cin>>k

if(k>ArrSize-D) exit(o)

for(i-0: i

if(i=0)a[i]=1;

else i

if(2*i=*a[i-1]>MAXINT) exit(O)

else a[i]=2**ali-1

for (i=0:i<=k: i++)

if(ali]>MAXINT) exit(o)

else cout

return o

120试编写算法求一元多项式的值P(x)=∑ax的值Pn(x),并确定算法中每一语句的执行次数

和整个算法的时间复杂度注意选择你认为较好的输入和输出方法,本题的输入为a:(=0,1,…,n),x

和n,输出为P(xn)

#includeiostream. h>

tincludexstdlib, h>

Defined 1o

double pol ynomail(int all, int i, double x, int n

nt main o

double

int n, i

int aInI

cout("输入变量的值x:"

cout《"输入多项式的阶次n:";

if(n N-1) exit (0

cout<

for(i=0; i

cout<

return

double polynomail(int a[l, int i, double x, int n

if(i>0) return a[n-i]+polynomail(a, i-1,x,n)*x

本算法的时间复杂度为on)。

第2章线性表

2.1描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点〕

解:头指针是指向链表中第一个结点的指针。首元结点是指链表中存储第一个数据元素的结点。头结

点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为

了方使对链表的操作。它可以对空表、非空表以及首元结点的操作进行统一处理。

2.2填空题。

解:(1)在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元索个数与元素

在表中的位置有关。

(2)顺序表中逻辑上相邻的元素的物理位置必定紧邻。单链表中逻辑上相邻的元素的物理位置不一定

紧邻。

(3)在单链表中,除了首元结点外,任一结点的存储位置由某前练点的链域的值指示。

(4)在单链表中设置头结点的作用是入和酈除苣元结点不逝行殊处理。

2.3在什么情况下用顺序表比链表好?

解:当线性表的数据元紊在物理位臀上是连续存偕的时候,用顺序表比用表好,其特点是可以进行

随机存取。

2.4对以下单链表分别执行下列各程序段,并画出结果示意图。

1-26_738

解:

(1)L-2573

P

R

2)一?381

R

(3)L

t2L5758

R

(4)L

25778}→

()L-25{735

R

(6)1-210{14_6416

R

(7)L

10

14

+6161→

2.5画出执行下列各行语句后各指针及链表的示意图

L=(LinkListmalloc(sizeof(LNode)): P=L:

for(i=1;i<=4;i+)

P->next=(LinkList)malloc(sizeof(lnode)

P=->next

P->data=i=k2

P->next-NULL

for (i=4; i>=1; i-) Ins LinkList(L, i+1, i=2)

for(i=l: 1<=3; 1++) Del LinkList( l, i)

解:

L:3_57

P

L一123458-78k

L[424678区

26已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中

选择合适的语句序列。

a.在P结点后插入S结点的语句序列是

你可能感兴趣的:(数据结构编程题及解析c语言版)