#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\n");
    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("\n");
    h2=Creatpoly();
    printf("the Polyomial is P2(x)=");
    UnitePoly(h2);
    Insort(h2);
    Prin_poly(h2);
    printf("\n");
    printf("press any key to check the result\n");
    getch();
    printf("after multi the result is P(x)=");
    h=polymuti(h1,h2);
    UnitePoly(h);
    Insort(h);
    Prin_poly(h);
    printf("\n");
    return 0;
}

C语言实现一元多项式求积的更多相关文章

  1. 数据结构算法C语言实现(六)---2.4一元多项式的表示及相加

    一.简述 利用链表表示稀疏多项式,并基于之前的一些操作(编程实现上还是有所不同的)组合新的操作实现一元多项式的表示及相加. 二.ADT 抽象数据类型一元多项式的定义 ADT Polyomail{ 数据 ...

  2. 链表一元多项式计算器的实现(Java语言描述)

    链表的经典应用,程序在多项式相加同类项合并还有小的瑕疵,有待改进. 代码如下: package 一元多项式计算器; public class PolyNode { private double a; ...

  3. 1010 一元多项式求导 (25 分) C语言

    设计函数求一元多项式的导数.(注:x​n​​(n为整数)的一阶导数为nx​n−1​​.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数).数字间以空格分隔. ...

  4. 一元多项式的乘法与加法运算(C语言)

    输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 输出分2行,分别以指数递降方 ...

  5. 一元多项式Polynomial的C语言实现

    /* 编译器:Dev-c++ 5.4.0 文件名:Polynomial.cpp 代码版本号:1.0 时间:2015年10月9日21:53:26 */ /* 总结: 1.结构体指针指向的区域要手动分配内 ...

  6. 基于visual Studio2013解决C语言竞赛题之0613递归求积

     题目

  7. 一道 google曾出过的笔试题:编程实现对数学一元多项式的相加和相乘操作(1)

    数学中一元n次多项式可表示成如下的形式:  Pn(x)=p0+p1x+p2x^2+…+pnx^n     (最多有 n+1 项,n +1 个系数唯一确定她)      (1)请设计一套接口用以表示和操 ...

  8. C语言细节总结笔记

    C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...

  9. 【编程练习】收集的一些c++代码片,算法排序,读文件,写日志,快速求积分等等

    写日志: class LogFile { public: static LogFile &instance(); operator FILE *() const { return m_file ...

随机推荐

  1. git 如何删除远程提交方法总结

    今天不小心把代码提到主分支了,虽然改动只有一点点,但感觉asdasdasdsadd(要被骂死) 怎么样才能删除掉远程的分支呢. 假设我们有提交 commit commit commit 手残把3提交错 ...

  2. UESTC - 1137 数位DP

    #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #i ...

  3. HOW TO MAKE IT FLOW ?

      FLEXnet Licensing is a member of the FLEXnet Publisher family of products. It is the most popular ...

  4. JS中||的某些用法

    var a = 0 ||'sda';console.log(a);//sda var a = '' ||'sda';console.log(a);//sda

  5. jQuery常用的方法

    each() 以每一个匹配的元素作为上下文来执行一个函数. size()  jQuery 对象中元素的个数.

  6. linux下安装软件的方法(mariadb)

    一.方式 1. rpm (不推荐使用) 2. yum 安装(非常方便快捷) 3. 编译安装(需要自定制的时候才使用) 二.技术栈 #闭源收费的技术栈: svn + java + apache(web服 ...

  7. centos 安装xrdp远程连接桌面

    1. 安装epel库,否则无法安装xrdp yum install epel-release 2.安装 xrdp yum install xrdp 3. 安装tigervnc-server yum i ...

  8. PIXI 太空玉兔游戏(6)

    想法来源  出于练习看到这篇文章   没有什么难度  效果如下,接下来会用pixijs讲解如何实现 创建应用及舞台 HTML部分只创建标签引入 pixi.min.js  即可: <script ...

  9. GraphQL 暂停

    别人的文章 http://blog.csdn.net/imwebteam/article/details/53888708 Java 文档都打不开,已经在GitHub上提了 in README.md ...

  10. Java 继承初探

    Java继承的基础 Java中,被继承的类叫做超类,继承超类的类叫子类.(一个子类亦可以是另一个类的超类) 继承一个类,只需要用关键字 extends 把一个类的定义合并到另一个类中就可以了. 例子中 ...