这是这个学期数据结构课程的习题参考答案,注意:不是我上课布置的作业的答案,作业答案晚些再贴出来,现在比较忙,没太多时间做这件事情,抱歉.
说明:下面的代码在VC6上编译测试通过,稍加改动可以在turbo c或者gcc上编译,同样我没有那么多时间在多个编译器上测试.此外,这只是参考答案,可能不是最好的答案,甚至可能存在错误.如果你发现错误或者有更好的解答,欢迎发email给我.
#include "stdafx.h"
#include "stdio.h"
//习题1.16算法实现
//辅助函数,实现两个数的交换
void swap(int *a, int *b)
{
int tmp=*a;
*a=*b;
*b=tmp;
}
void print_descend(void)
{
int x,y,z;
scanf("%d,%d,%d",&x,&y,&z);
if(x<y)
swap(&x,&y);
if(y<z)
swap(&y,&z);
if(x<y)
swap(&x,&y);
printf("%d\t%d\t%d\n",x,y,z);
}
//习题1.17
int kfib(int m,int k)
{
int i,result=0;
if(m<k-1)
return 0;
if (m==k-1)
return 1;
for (i=1;i<=k;i++)
{
result+=kfib(m-i,k);
}
return result;
}
//习题1.19
#define ARRAYSIZE 32
#define MAXINT 32768
bool cal(unsigned int i,int *result)
{
int tmp="1";
unsigned int j;
if(i>ARRAYSIZE)
return false;
for(j=1;j<=i;j++)
{
tmp=tmp*2*j;
}
if(tmp>MAXINT)
return false;
*result=tmp;
return true;
}
int main(int argc, char* argv[])
{
//测试习题1.16
// print_descend();
// getchar();
//测试习题1.17
int i,result=0;
for(i=0;i<13;i++)
{
result=kfib(i,5);
printf("kfib:%d\n",result);
}
getchar();
//测试习题1.19
int ret1;
if(!cal(5,&ret1))
printf("error\n");
else
{
printf("cal result: %d\n",ret1);
}
return 0;
}
文章评论(0条评论)
登录后参与讨论