• 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;
    }

  • 相关阅读:
    【java】jfairy和java-faker假数据利器
    【Spring boot】【gradle】idea新建spring boot+gradle项目
    【mac】mac上使用brew 安装速度慢/每次使用brew 都会卡在updating homebrew不动/更换homebrew的镜像源
    【gradle】mac上安装gradle
    【mac】mac上安装JDK
    如何解决ajax跨域问题(转)
    java实现点选汉字验证码(自己修改后的)
    AES加解密
    java随机打乱集合顺序
    利用StringEscapeUtils对字符串进行各种转义与反转义(Java)
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3655214.html
Copyright © 2020-2023  润新知