下面是我们前段时间做的实验报告:(数据结构c版)
【设计题目】
一元多项式的代数运算
【问题描述】
计算任意两个一元多项式的加法、减法以及乘法。
【基本要求】
由键盘输入二多项式的每一项的指数、系数,输出这二个多项式的和、积。
【实现说明】
可以采用链接存储线性表的方式。
以下是我写的代码,所用的语言是c,运行环境在 window xp 下的 Turbo C 2.0 实现 :
#include "stdio.h"
#include "alloc.h"
typedef struct node{
int c,e; /*c 为系数,e为指数*/
struct node *next;
}Polytype;
Polytype *create() /*输入并建立多项式*/
{
Polytype *head=malloc(sizeof(Polytype)),*p;
int n,e,c; /*n 为项数,e为指数,c为系数*/
p=head;
printf("/n n:"); scanf("d%",&n);
while(n){
printf("/n c,e:"); scanf("%d,%d",&c,&e);
n--;
p->next=malloc(sizeof(Polytype)); /* 创建空单链表*/
p=p->next;
p->c=c; p->e=e;
}
p->next=NULL;
return head; /* 返回指针*/
}
void PrintPoly(Polytype *head) /*输出多项式*/
{
Polytype *p=head->next;
while(p){
printf("(%d,%d),",p->c,p->e);
p=p->next;
}
printf("/n");
}
Polytype *polyadd(Polytype *ha,Polytype *hb){/*多项式相加*/
Polytype *hc=malloc(sizeof(Polytype)),*pc=hc,*pa=ha->next,*pb=hb->next;
int e,c; /*c 为系数,e为指数*/
while(pa || pb){
if(pa&&(pb==NULL||(pa->ee))){
c=pa->c; e=pa->e;
pa=pa->next;
}
else if(pb&&(pa==NULL||(pa->e>pb->e))){
c=pb->c; e=pb->e;
pb=pb->next;
}
else{
c=pa->c+pb->c;
e=pa->e; /*or e=pb->e*/
pa=pa->next; pb=pb->next;
}
if(c){
pc->next=malloc(sizeof(Polytype));
pc=pc->next;
pc->c=c;
pc->e=e;
}
}
pc->next=NULL;
return hc;
}
Polytype *polyminus(Polytype *ha,Polytype *hb){/*多项式相减*/
Polytype *hc=malloc(sizeof(Polytype)),*pc=hc,*pa=ha->next,*pb=hb->next;
int e,c; /*c 为系数,e为指数*/
while(pa || pb){
if(pa&&(pb==NULL||(pa->ee))){
c=pa->c; e=pa->e;
pa=pa->next;
}
else if(pb&&(pa==NULL||(pa->e>pb->e))){
c=pb->c; e=pb->e;
pb=pb->next;
}
else{
c=pa->c-pb->c;
e=pa->e; /*or e=pb->e*/
pa=pa->next; pb=pb->next;
}
if(c){
pc->next=malloc(sizeof(Polytype));
pc=pc->next;
pc->c=c;
pc->e=e;
}
}
pc->next=NULL;
return hc;
}
Polytype *onexmul(Polytype *pa,Polytype *hb){/*单项乘多项*/
Polytype *pb=hb->next,*pc,*hc=malloc(sizeof(Polytype));
pc=hc;
while(pb){
pc->next=malloc(sizeof(Polytype));
pc=pc->next;
pc->e=pa->e+pb->e;
pc->c=pa->c*pb->c;
pb=pb->next;
}
pc->next=NULL;
return hc;
}
Polytype *mulxmul(Polytype *ha,Polytype *hb){/*多项乘多项*/
Polytype *t,*hc=malloc(sizeof(Polytype)),*pa;
pa=ha->next;
hc->next=NULL;
while(pa){
t=onexmul(pa,hb);
hc=polyadd(hc,t);
freepoly(t);
pa=pa->next;
}
return hc;
}
void freepoly(Polytype *head){
Polytype *p=head;
while(p){
head=head->next;
free(p);
p=head;
}
}
main(){
Polytype *ha,*hb,*hc;
ha=create(); PrintPoly(ha);
hb=create(); PrintPoly(hb);
hc=polyadd(ha,hb);
printf("a+b:");
PrintPoly(hc);
freepoly(hc);
hc=polyminus(ha,hb);
printf("a-b:");
PrintPoly(hc);
freepoly(hc);
hc=mulxmul(ha,hb);
printf("a*b:");
PrintPoly(hc);
freepoly(hc);
freepoly(ha);
freepoly(hb);
}
上面的代码可以实现题目的要求,但本人觉的它还不是很完好,.不过它还是对初学者有定帮助的..所以仅做为参考...如果你想学好技术的话,建议你还是亲手写写.........。