C语言实现一元多项式求积

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct Node
{
    int coef;//系数
    int exp;//指数
    struct Node *next;
}PolyNode;

PolyNode *Creatpoly()//创建多项式的单链表,尾插法
{
    PolyNode *h,*p,*q;
    h=(PolyNode *)malloc(sizeof(PolyNode));//链表头结点
    p=h;
    p->next=NULL;
    printf("please input the Polyomial coef & exp a,b,when input 0 stop ");
    q=(PolyNode *)malloc(sizeof(PolyNode));
    scanf("%d,%d",&q->coef,&q->exp);
    while(q->coef!=0)
    {
        p->next=q;
        p=q;
        q=(PolyNode *)malloc(sizeof(PolyNode));
        scanf("%d,%d",&q->coef,&q->exp);
    }
    p->next=NULL;
    return(h);
}

void Prin_poly(PolyNode *h)//将多项式输出函数
{
    PolyNode *p;
    p=h->next;
    while(p!=NULL)
    {
        if(p->coef>0&&p!=h->next)
        {
            if(p->exp>0)
                printf("+%dx^%d",p->coef,p->exp);
            else if(p->exp<0)
                printf("+%dx^(%d)",p->coef,p->exp);
            else
                printf("+%d",p->coef);
        }
        else if(p->coef<0&&p!=h->next)
        {
            if(p->exp>0)
                printf("%dx^%d",p->coef,p->exp);
            else if(p->exp<0)
                printf("%dx^(%d)",p->coef,p->exp);
            else
                printf("%d",p->coef);
        }
        else
        {
            if(p->exp>0)
                printf("%dx^%d",p->coef,p->exp);
            else if(p->exp<0)
                printf("%dx^(%d)",p->coef,p->exp);
            else
                printf("%d",p->coef);
        }
        p=p->next;
       }
}

void Insort(PolyNode *h)//排序函数,使多项式中的各项按X的升幂排列
{
    PolyNode *s,*p;
    int t,m;
    for(p=h->next;p!=NULL;p=p->next)//类似于冒泡排序
    {
        for(s=h->next;s->next!=NULL;s=s->next)
        {
            if(s->exp>s->next->exp)
            {
                t=s->exp;
                m=s->coef;
                s->coef=s->next->coef;
                s->exp=s->next->exp;
                s->next->coef=m;
                s->next->exp=t;
            }
        }
    }
}

void UnitePoly(PolyNode *h)//合并同类项
{
    PolyNode *p1,*p2,*q1,*q2,*temp;
    q1=h;
    p1=q1->next;
    while(p1!=NULL)
    {
        p2=p1->next;
        q2=p1;
        while(p2!=NULL)
        {
            if(p1->exp==p2->exp)
            {
                p1->coef=p1->coef+p2->coef;
                if(p1->coef==0)
                {
                    temp=p2;
                    q2->next=p2->next;
                    free(temp);
                    temp=p1;
                    q1->next=p1->next;
                    p1=q1;
                    free(temp);
                    break;
                }
                else
                {
                    temp=p2;
                    q2->next=p2->next;
                    p2=p2->next;
                    free(temp);
                }
            }
            else
            {
                q2=p2;
                p2=p2->next;
            }
        }
        q1=p1;
        p1=p1->next;
    }
}

PolyNode *polymuti(PolyNode *h1,PolyNode *h2)//多项式相乘
{
    PolyNode *h,*p,*p1,*p2,*q;
    p1=h1->next;
    h=p=(PolyNode *)malloc(sizeof(PolyNode));
    p->next=NULL;
    while(p1)
    {
        p2=h2->next;
        while(p2)
        {
            q=(PolyNode *)malloc(sizeof(PolyNode));
            q->coef=p1->coef*p2->coef;
            q->exp=p1->exp+p2->exp;
            p->next=q;
            p=q;
            p2=p2->next;
        }
        p1=p1->next;
    }
    p->next=NULL;
    return(h);
}
int main()
{
    PolyNode *h1,*h2,*h;
    h1=Creatpoly();
    printf("the Polyomial is P1(x)=");
    UnitePoly(h1);
    Insort(h1);
    Prin_poly(h1);
    printf(" ");
    h2=Creatpoly();
    printf("the Polyomial is P2(x)=");
    UnitePoly(h2);
    Insort(h2);
    Prin_poly(h2);
    printf(" ");
    printf("press any key to check the result ");
    getch();
    printf("after multi the result is P(x)=");
    h=polymuti(h1,h2);
    UnitePoly(h);
    Insort(h);
    Prin_poly(h);
    printf(" ");
    return 0;
}

原文地址:https://www.cnblogs.com/nannanITeye/p/3655214.html