这道编程我不知道哪里错了,求帮助。
这段程序是通过尾差法对于2个一元多项式相加,其中多项式的系数和指数通过input.txt输入,结果通过 output.txt输出我的问题在于相加之后的结果还是等于第一个多项式。
求大神帮忙看一下。
程序如下:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct polynode
{
int coef; //系数
int exp; //指数
struct polynode *next;
}node;
node * create(void) //用尾插法建立一元多项式的链表的函数
{
FILE *fil;
node *h,*r,*s;
int c,e;
fil=fopen("input.txt","rb");
h=(node *)malloc(sizeof(node)); //建立多项式的头结点
r=h; //r始终指向链表的表尾
fscanf(fil,"%d",&c); //输入系数
fscanf(fil,"%d",&e); //输入指数
while(c!=0) //输入系数不为0时
{
s=(node *)malloc(sizeof(node)); //申请新结点
s->coef=c; //申请新结点后赋值
s->exp=e; //申请新结点后赋值
r->next=s; //做尾插,插入新结点
r=s; //r始终指向单链表的表尾
fscanf(fil,"%d",&c);
fscanf(fil,"%d",&e);
}
r->next=h; //将表的最后一个结点的next置NULL,以示表结束
return(h);
}
void polyadd(node *polya, node *polyb)//一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式ployb删除
{
node *p,*q,*pre,*temp;
int sum;
p=polya->next;//令p和q分别指向polya和polyb多项式链表中的第一个结点
q=polyb->next;
pre=polya; //位置指针,指向和多项式polya
while(p!=NULL&&q!=NULL) //当两个多项式均未扫描结束时,执行以下操作
{
if(p->expexp) //若p指向的多项式指数小于q指的指数
{
pre->next=p; //将p结点加入到和多项式中
pre=pre->next;
p=p->next;
}
else if(p->exp==q->exp) //若指数相等,则相应的系数相加
{
sum=p->coef+q->coef;
if(sum!=0)
{
p->coef=sum;
pre->next=p;pre=pre->next;p=p->next;
temp=q;q=q->next;free(temp);
}
else //如果系数和为零,则删除结点p与q,并将指针指向下一个结点
{
temp=p->next;free(p);p=temp;
temp=q->next;free(q);q=temp;
}
}
else //若p指数大于q指数
{
pre->next=q; //p结点不动,将q结点加入到和多项式中
pre=pre->next;
q=q->next;
}
}
if(p!=NULL) //多项式A中还有剩余,则将剩余的结点加入到和多项式中
pre->next=p;
else //否则将B的结点加入到和多项式中
pre->next=q;
}
void print(node * p) //输出函数,打印出一元多项式
{
FILE *fil;
fil=fopen("output.txt","wb");
while(p->next!=NULL)
{
p=p->next;
fprintf(fil," %d %d\r\n",p->coef,p->exp);
}
fclose(fil);
}
int main()
{
node * polya,* polyb;
printf("\n 结果在output文件中! \n");
polya=create(); //调用建立链表函数,创建多项式A
print(polya);
polyb=create(); //同理,创建B
print(polyb);
polyadd(polya,polyb); //调用一元多项式相加函数
print(polya); //调用输出函数,打印结果
printf("\n");
return 0;
}
[ 本帖最后由 WZX945 于 2013-5-17 14:52 编辑 ]