基本功能定为
(1) 输入并建立多项式
(2) 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,.....,Cn,en,其中n是多项式的相数,Ci和Ei分别是第i项的系数和指数,序列按指数降序排列
(3) 两个多项式相加,建立并输出和多项式
(4) 两个多项式相减,建立并输出差多项式
(5) 两个多项式相乘, 建立乘积多项式
(6) 计算多项式在x处的值
实现提示:用带表头结点的单链表存储多项式
程序代码如下:
#include "stdio.h"
#include "malloc.h"
typedef struct lnode{
int coef; //系数
int expn; //指数
struct lnode *next;
}lnode,*linklist;
/*-----------排序多项式-------------*/
linklist sort(linklist t) // 最麻烦了!
{ linklist p,s,x,end,temp;
int temp1,temp2;
p=t->next; //p才是实际含数据的首结点
for(x=t;x->next!=NULL;x=x->next)
; //走到链尾
end=x;
while(p!=end) //气泡按指数从小到大排序
{
s=p;
while(s!=end) //一趟排序
{
temp=s; //保存s的pre前一个结点,以便下面赋值给end
if(s->expn > s->next->expn) //前面项的结点的指数高于后面,则两项数据交换
{
temp1=s->coef; s->coef=s->next->coef; s->next->coef=temp1;
temp2=s->expn; s->expn=s->next->expn; s->next->expn=temp2;
}
s=s->next;
}
end=temp; //保存排好的末结点,end一直被重复赋值,并不断回溯.
}
return p;
}
/*-----------创建多项式-------------*/
linklist create(linklist p)
{ linklist r,s,t;
r=p; //用r保存首结点
while(1)
{
int coef1,expn1;
printf("输入系数:\n");
scanf("%d",&coef1);
if(coef1==0) break;
printf("输入指数:\n");
scanf("%d",&expn1);
s=(linklist)malloc(sizeof(lnode));
s->coef=coef1;
s->expn=expn1;
s->next=NULL;
p->next=s;
p=p->next; //p结点前移,保证始终指向末结点
}
t=sort(r); //传递首结点,按指数从小到大排序
return t;
}
/*-----------输出多项式-------------*/
void print(linklist h)
{
while(h!=NULL){
printf("%d",h->coef);
printf("*X");
if(h->expn!=1) printf("%d",h->expn); //指数是1就不用显示出来了,不是1则显示
if(h->next->coef >0 && h->next!=NULL) //下一项的系数为正,则显示“+”
printf("+");
h=h->next;
}
}
void ADD(linklist s, linklist t)
{ linklist c,k,head;
c=(lnode*)malloc(sizeof(lnode));
c->next=NULL;
head=c;
while(t!=NULL&&s!=NULL){
if(s->expn < t->expn){ //比较指数谁的大,然后按指数低的先入链表
k=(lnode*)malloc(sizeof(lnode));
k->next=NULL;
k->coef=s->coef;
k->expn=s->expn;
c->next=k;
c=c->next;
s=s->next;
if(s==NULL)
c->next=t;
}
else if(s->expn > t->expn){
k=(lnode*)malloc(sizeof(lnode));
k->next=NULL;
k->coef=t->coef;
k->expn=t->expn;
c->next=k;
c=c->next;
t=t->next;
if(t==NULL)
c->next=s;
}
else{ //指数相同则做相加运算
k=(lnode*)malloc(sizeof(lnode));
k->next=NULL;
k->coef=s->coef+t->coef;
k->expn=s->expn;
c->next=k;
c=c->next;
t=t->next;
s=s->next;
}
}
print(head); //输出函数
}
void main()
{ linklist p,q,m,n;
p=(lnode*)malloc(sizeof(lnode));
p->next=NULL;
q=(lnode*)malloc(sizeof(lnode));
q->next=NULL;
printf("请输入第一个多项式\n");
m=create(p);
printf("请输入第二个多项式\n");
n=create(q);
printf("\n第一个多项式为:\n");
print(m);
printf("\n第二个多项式为:\n");
print(n);
ADD(p,q); //加法
//Minus(p,q); //减法
}
PS:逻辑错误。
[此贴子已经被作者于2007-7-1 13:45:07编辑过]