陈陈陈大老板
2020-02-03 16:31
采纳率: 33.3%
浏览 982

C语言 一元多项式的加法运算(单链表)

#include
#include
#include
typedef struct PNode
{
float coef; //系数
int expn; //指数
struct PNode *next; //指向下一项的指针
}PNode; //一元多项式中的项

struct PNode *creatPoly(PNode *head,int n) //建立一元多项式
{
int i=1;
struct PNode *s,*pre;
head=(struct PNode *)malloc(sizeof(struct PNode));
head->next=NULL;
pre=head;
printf("请输入各项的系数与指数");
for(i=1;i<=n;i++)
{
scanf("%d%d",&pre->coef,&pre->expn);
s=(struct PNode *)malloc(sizeof(struct PNode));
pre->next=s;
pre=s;
}
pre->next=NULL;

return 0;

}
struct PNode *addPoly(PNode *L1,PNode *L2) //实现多项式加法运算
{
int sum;
struct PNode *p1,*p2,*p3,*r;

p3=p1;
p1=p1->next;
p2=p2->next;

while(p1&&p2)
{
    if(p1->expn==p2->expn)
    {
        sum=p1->coef+p2->coef;
        if(sum!=0)
        {

            p1->coef = sum;
            p3->next=p1;
            p3=p1;
            p1=p1->next;
        }

        else //(p3!=NULL)
        {
            r=p1;
            p1=p1->next;
            free(r);
        }
        r=p2;
        p2=p2->next;
        free(r);
    }
    else if (p1->expn < p2->expn && p3!=NULL)
    {
        p3->next=p1;
        p3=p1;
        p1=p1->next;
    }
    else //(p1->expn > p2->expn && p3!=NULL)
    {
        p3->next = p2;
        p3 = p2;
        p2 = p2->next;

    }
}
p3->next = p1 ? p1:p2;

free(p2);

return p1;

}

struct PNode *output(PNode *p) //打印该链表的结果
{
while(p->next!=NULL)
{
printf("%d%2d",p->coef,p->expn);
p=p->next;
}
printf(",");
return 0;
}

int main()
{
int n,m;
struct PNode *headA,*headB;
printf("请输入多项式A的项数:");
scanf("%d",&n);
creatPoly(headA,n);
printf("输出多项式A:");
output(headA);
printf("请输入多项式B的项数:");
scanf("%d",&m);
creatPoly(headB,m);
printf("输出多项式B:");
output(headB);
addPoly(headA,headB);
printf("输出两个多项式相加后的结果多项式A:");

return 0;

}

图片说明

哪位大神能帮忙看一下代码哪里出问题了吗?运行结果不正确,输出不了多项式的结果!谢谢

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题