#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. python之常用的数据类型

    1. 变量的定义以及声明 在学习变量之前,咱们需要知道变量的命名规则: ① 变量必须由数字字母下划线构成,如a_1 ② 变量名不能以数字开头,如1a ③ 需要遵循驼峰命名法 给变量赋值通常采用“=”, ...

  2. Hero

    Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Description When pl ...

  3. [原创]在Centos7上搭建私有的Gitlab服务器

    前言 Git作为后起之秀,在版本控制领域占据了头把交椅.Github作为托管式的代码仓库,从代码安全性和网络传输等各个方面考虑,对于个人和公司来讲,具有一定的局限性.Gitlab提供的不同版本的安装包 ...

  4. nodejs fs读取静态json文件

    let fs = require('fs'),stream = fs.createReadStream('./obd.json'),data = ""; stream.on('da ...

  5. AES/ECB/NoPadding 加减密

    package unit; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache. ...

  6. 选择IM云服务供应商

    选择IM云服务供应商,其实最重要是有三个因素:费用.技术稳定性.以及后续运维服务. 对于不少创业公司来讲,可能需要找到成本和稳定性的最佳平衡点.目前国内不少IM云服务产品都推出了免费服务项目或者一定期 ...

  7. JAVA WEB开发环境搭建

    JAVA WED开发环境搭建 JDK的安装和配置 到https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21 ...

  8. win10 sshsecureshellclient删除profile保存的信息

    C:\Users\joe\AppData\Roaming\SSH

  9. daterangepicker

    官方文档 http://www.daterangepicker.com/#examples 与angular结合 html <div date-range-picker class=" ...

  10. TOJ 1690 Cow Sorting (置换群)

    Description Farmer John's N (1 ≤ N ≤ 10,000) cows are lined up to be milked in the evening. Each cow ...