没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
数据结构习题集 第 1 章答案
◆1.16 ② 试写一算法,如果三个整数 X,Y 和 Z 的值不是依次非递增的,则通过交换,令
其为非递增。
要求实现下列函数:
void Descend(int &x, int &y, int &z); /* 按从大到小顺序返回 x,y 和 z 的值 */
void Descend(int &x, int &y, int &z)
/* 按从大到小顺序返回 x,y 和 z 的值 */
{
int t;
if(x<=y){t=x;x=y;y=t;}
if(y<=z){t=y;y=z;z=t;}
if(x<=y){t=x;x=y;y=t;} /*把 x,y,z 进行从大到小排序*/
printf("%d,%d,%d",x,y,z);
}
◆1.17 ③ 已知 k 阶裴波那契序列的定义为 f0=0, f1=0, ..., fk-2=0, fk-1=1;fn=fn-1+fn-2+...+fn-
k, n=k,k+1,...试编写求 k 阶裴波那契序列的第 m 项值的函数算法,k 和 m 均以值调用的形
式在函数参数表中出现。
要求实现下列函数:
Status Fibonacci(int k, int m, int &f);
/* 如果能求得 k 阶斐波那契序列的第 m 项的值 f,则返回 OK;*/
/* 否则(比如,参数 k 和 m 不合理)返回 ERROR */
Status Fibonacci(int k, int m, int &f)
/* 求 k 阶斐波那契序列的第 m 项的值 f */
{ int t[60],sum,i,j;
if(k<2||m<0) return ERROR; /*参数 k 和 m 不合理*/
if(m<k-1) f=0;
else if(m==k-1) f=1;
else
{for(i=0;i<=k-2;i++)
t[i]=0;
t[k-1]=1;
for(i=k;i<=m;i++)
{ sum=0;
for(j=i-k;j<=i;j++)
sum+=t[j];
t[i]=sum;
}
1
f=t[m];
}
return OK;
}
◆1.18 ③ 假设有 A、B、C、D、E 五个高等院校进行田径对抗赛,各院校的单项成绩均以
存入计算机并构成一张表,表中每一行的形式为:
项目名称 性别 校名 成绩 得分
编写算法,处理上述表格,以统计各院校的男、女总分和团体总分,并输出。
要求实现下列函数:
void Scores(ResultType *result, ScoreType *score);
/* 求各校的男、女总分和团体总分, 并依次存入数组 score */
/* 假设比赛结果已经储存在 result[ ]数组中, */
/* 并以特殊记录 {"", male, ' ', "", 0 }(域 scorce=0)*/
/* 表示结束 */
相关数据类型定义如下:
typedef enum {female,male} Sex;
typedef struct{
char *sport; // 项目名称
Sex gender; // 性别(女:female;男:male)
char schoolname; // 校名为'A','B','C','D'或'E'
char *result; // 成绩
int score; // 得分(7,5,4,3,2 或 1)
} ResultType;
typedef struct{
int malescore; // 男子总分
int femalescore; // 女子总分
int totalscore; // 男女团体总分
} ScoreType;
void Scores(ResultType *result, ScoreType *score)
/* 求各校的男、女总分和团体总分, 并依次存入数组 score */
/* 假设比赛结果已经储存在 result[ ]数组中, */
/* 并以特殊记录 {"", male, ' ', "", 0 }(域 scorce=0)*/
/* 表示结束 */
{ // ScoreType score;
int i=0;
while(result[i].sport!=NULL)
{
switch(result[i].schoolname) /*使用 switch 语句记录各院校的成绩*/
2
{
case 'A':
score[0].totalscore+=result[i].score;
if(result[i].gender==male)
score[0].malescore+=result[i].score;
else
score[0].femalescore+=result[i].score;
break;
case 'B':
score[1].totalscore+=result[i].score;
if(result[i].gender==male)
score[1].malescore+=result[i].score;
else
score[1].femalescore+=result[i].score;
break;
case 'C':
score[2].totalscore+=result[i].score;
if(result[i].gender==male)
score[2].malescore+=result[i].score;
else
score[2].femalescore+=result[i].score;
break;
case 'D':
score[3].totalscore+=result[i].score;
if(result[i].gender==male)
score[3].malescore+=result[i].score;
else
score[3].femalescore+=result[i].score;
break;
case 'E':
score[4].totalscore+=result[i].score;
if(result[i].gender==male)
score[4].malescore+=result[i].score;
else
score[4].femalescore+=result[i].score;
break;
}
i++;
}
int j;
for( j=0;j<5;j++)
{
printf("the school %s: ", result[i].schoolname) ; /*输出各院校的男女总分和团体总分*/
3
printf("total: %f",&score[i].totalscore);
printf("male: %f",&score[i].malescore);
printf("female: %f",&score[i].femalescore);
}
}
◆1.19 ④ 试编写算法,计算 i!×2^i 的值并存入数组 a[0..ARRSIZE-1]的第 i-1 个分量中 (i=1,2,
…,n)。假设计算机中允许的整数最大值为 MAXINT,则当 n>ARRSIZE 或对某个 k(1≤k≤n)
使 k!×2^k>MAXINT 时,应按出错处理。注意选择你认为较好的出错处理方法。
要求实现下列函数:
Status Series(int ARRSIZE, int a[]);
/* 求 i!*2^i 序列的值并依次存入长度为 ARRSIZE 的数组 a; */
/* 若所有值均不超过 MAXINT,则返回 OK,否则返回 OVERFLOW */
Status Series(int ARRSIZE, int a[])
/* 求 i!*2^i 序列的值并依次存入长度为 ARRSIZE 的数组 a; */
/* 若所有值均不超过 MAXINT,则返回 OK,否则返回 OVERFLOW */
{ int last=1;
int i;
if(ARRSIZE<0)
return ERROR; /*当 ARRSIZE<0 时错误*/
for(i=1;i<=ARRSIZE;i++)
{
a[i-1]=last*2*i;
if(a[i-1]>MAXINT) /*溢出判断*/
return OVERFLOW;
last=a[i-1];
} return OK;
}
◆1.20 ④ 试编写算法求一元多项式 P(x) = a0 + a1x + a2x^2 + ... + anx^n 的值 P(x0),并确定
算法中每一语句的执行次数和整个算法的时间复杂度。注意选择你认为较好的输入和输出
方法。
要求实现下列函数:
float Polynomial(int n, int a[], float x0);
/* 求一元多项式的值 P(x0)。 */
/* 数组 a 的元素 a[i]为 i 次项的系数,i=0,1,...,n */
float Polynomial(int n, int a[], float x)
/* 求一元多项式的值 P(x)。 */
/* 数组 a 的元素 a[i]为 i 次项的系数,i=0,...,n */
{ int i,j;
float s=0; /*定义一个数 s,并赋初值 0*/
4
for(i=0;i<=n;i++)
{ float k=1;
if(i==0) k=1; /*循环判断*/
else
k=1;
for(j=1;j<=i;j++) k=x*k;
s=s+a[i]*k;
}
return s;
}
数据结构习题集 第 2 章答案
◆2.11② 设顺序表 L 中的数据元素递增有序。试写一算法,将 x 插入到 L 的适当位置上,
并保持该表的有序性。
要求实现下列函数:
void InsertOrderList(SqList &L, ElemType x)
/* 在有序的顺序表 L 中保序插入数据元素 x */
顺序表类型定义如下:
typedef struct {
ElemType *elem;
int length;
int listsize;
} SqList;
voidInsertOrderList(SqList &L, ElemType x)
// 在有序的顺序表 L 中保序插入数据元素 x
{
ElemType *p,*q;
p=L.elem;
while(*p<x&&p<=(L.elem+L.length-1)){//注意此处必须要注意-1,
//容易粗心犯错的地方!
++p;
}
//p 为大于 X 的第一个元素指针
5
剩余63页未读,继续阅读
资源评论
蜡笔小勋
- 粉丝: 36
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功