自主设计实验二多项式求和

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("请按多项式X的次数由大到小输入系数,缺少项用0补齐\n");
for(i=n,D->last=0;i>=0;i--)
{
scanf("%d",&D->data[i]);
D->last++;
}
}
void main()
{ SeqList A,B,C;
printf("\n生成多项式A(x):\n");
(5)撰写实验报告。
3、实验步骤与源程序
(一)顺序存储结构的实现。
一、源程序代码:
#include<stdio.h>
#define MAXLEN 100
typedef struct
{ int data[MAXLEN];
int last;
} SeqList; //多项式相加
void add_List(SeqList A, SeqList B, SeqList *C)
pc->next=pa;
else
pc->next=pb;
}
void main()
{
Node *LA,*LB,*LC;
LA=(Node *)malloc(sizeof(Node));
LA->next=NULL;
LB=(Node *)malloc(sizeof(Node));
LB->next=NULL;
}
if(i==0)
printf("%d",C.data[i]);
} //生成一个多项式
void create_list(SeqList *D)
{ int n,i;
printf("请给出多项式X的最高次数:");
scanf("%d",&n);
for(int k=99;k>=0;k--)
D->data[k]=0;
求和结果:f(x)+g(x)=100x100+150x90+40x20-10x10+3x+10。
(3)编程实现多项式求和的运算。
2、实验目的与要求
(1)利用C(或C++)语言完成算法设计和程序设计。
(2)上机调试通过实验程序。
(3)输入数据,检验程序运行结果。
(4)给出具体的算法分析,包括时间复杂度和空间复杂度等。
p->coef=x;p->expn=n;
p->next=NULL;
q->next=p;
q=p;
}
}
}
//显示一个多项式
void show_link_list(Node *L)
{
Node *p;
p=L->next;
while(p&&p->next)
{ printf("\(%.2fx^%d\) + ",p->coef,p->expn);p=p->next;}
pb=Lb->next;
while(pa && pb)
{
if(pa->expn > pb->expn)
{pc->next=pa;pc=pa;pa=pa->next;}
else if(pa->expn < pb->expn)
{pc->next=pb;pc=pb;pb=pb->next;}
else if(fabs(pa->coef+pb->coef)<0.000001)
电子信息学院
实验报告书
课程名:数据结构
题目:多项式求和
实验类别自主设计实验
班级:BX1206
学号:23
******
1、实验内容或题目
(1)顺序存储结构的实现。
例如,已知:f(x)=8x6+5x5-10x4+32x2-x+10,g(x)=7x5+10x4-20x3-10x2+x,求和结果:f(x)+g(x)=8x6+12x5-20x3+22x2+10。
printf("\(%.2fx^%d\) ",p->coef,p->expn);
printf("\n");
}
//多项式合并
void mergelist(Node *La,Node *Lb,Node *Lc)
{Node *pa,*pb,*pc;
Node *q1,*q2;
Lc=La;
pc=Lc;
pa=La->next;
LC=LA;
printf("\n创建多项式LA:\n");
create_link_list( LA);
printf("多项式LA(x) = ");
show_link_list(LA);
printf("\n创建多项式LB:\n");
create_link_list( LB);
printf("多项式LB(x) = ");
C->last++;
} //显示多项式
void show_list(SeqList C)
{
int i;
for(i=C.last-1;i>0;i--)
{
if(C.data[i]==0) C.last--,i--;
if(C.data[i]==0) C.last--,i--;
printf("(%dX^%d)+",C.data[i],--C.last);
{ int i,j,k,l;
C->last=-1;
if(A.last>B.last) k=A.last,l=B.last;
else k=B.last,l=A.last;
for(i=0;i<l;i++) C->data[i]=A.data[i]+B.data[i],C->last++;
for(j=i;j<=k;j++) C->data[j]=A.data[j]+B.data[j],C->last++;
show_link_list(LB);
mergelist(LA,LB,LC);
printf("\n合并后的多项式LA(x)+LB(x)= ");
show_link_list(LC);
}
二、运行结果:
按照要求输入相应的系数及指数,以0结束输入。结果如图2所示。
图2
4、结果分析与实验体会
经过同学的帮助还有自己查阅一些资料,程序已经汇编调试完好了。对于本次的设计实验,经过对比发现,链式储存结构的设计相对于顺序结构较为复杂,但是在程序的健壮性方面,链式结构是占优势的,因为逻辑性强,需要同学们具有坚实的C语言基础,对待一般同学来说编程会有一定的困难。在今后的日子里我会更加加强语言的汇编,复习。
{Node *p,*q;
int n=1;
float x=1;
q=L;
printf("请按多项式指数由大到小输入系数和指数:\n");
while(fabs(x)>0.000001 )
{scanf("%f %d",&x,&n);
if(fabs(x)>0.00001)
{p=(Node *) malloc(sizeof(Node));
{q1=pa;q2=pb;pa=pa->next;
pb=pb->next;free(q1);free(q2);}
else
{q1=pb;pa->coef=pa->coef+pb->coef;
pc->next=pa;pc=pa;pa=pa->next;
pb=pb->next;free(q1);}
}
if(pa)
create_list(&A);
printf("\nA(x)=");
show_list(A);
printf("\n生成多项式B(x):\n");
create_list(&B);
printf("\nB(x)=");
show_list(B);
printf("\n多项式A(x)和B(x)的和");
add_List (A,B,&C);
printf("C(x)=");
show_list(C);
}
二、运行结果。
输入A(x)最高次数7,再输入系数-11、23、0、-4、11、28、0、23,再输入B(x)最高次数5,再输入0、-20、14、5、34、19,然后得到两个多项式的和C(x)结果如图1所示。
如图1
(二)链式多项式求和wk.baidu.com
一、源程序代码:
顺序表数据类型定义如下:
#define MAXLEN 100
typedef struct
{int data[MAXLEN];
int last;
}SeqList;
(2)链式存储结构的实现。
例如,已知:f(x)=100x100+5x50-30x10+10,g(x)=150x90-5x50+40x20+20x10+3x,
#include<stdio.h>
#include<malloc.h>
#include<math.h>
typedef struct linknode
{
float coef;
int expn;
struct linknode *next;
} Node;
//创建一个链式存储结构的多项式
void create_link_list(Node *L)
相关文档
最新文档