C语言数据结构——顺序表多项式

fatal.h

#include <stdio.h>
#include <stdlib.h>

#define Error( Str )        FatalError( Str )
#define FatalError( Str )   fprintf( stderr, "%s\n", Str ), exit( 1 )

Polynomial.cpp

#include "fatal.h"

#define MaxDegree 100   // 幂的最大次数是100

typedef struct
{
    int CoeffArray[MaxDegree + 1]; // 系数数组,这里定义了数组是很大的,所以下面要单独用一个HighPower来存最高次幂
    int HighPower;  //高次幂
}* Polynomial;

// 将多项式初始化为零的过程
void ZeroPolynomial(Polynomial Poly)
{
    int i;

    for(i = 0; i <= MaxDegree; i++)
        Poly->CoeffArray[i] = 0;
    Poly->HighPower = 0;
}

int Max(int h1, int h2)
{
    return h1 > h2 ? h1 : h2;
}

// 两个多项式相加的过程
void AddPolynomial(const Polynomial Poly1, const Polynomial Poly2, Polynomial PolySum)
{
    int i;
    ZeroPolynomial(PolySum);
    PolySum->HighPower = Max(Poly1->HighPower, Poly2->HighPower);

    for(i = PolySum->HighPower; i >= 0; i--)
        PolySum->CoeffArray[i] = Poly1->CoeffArray[i] + Poly2->CoeffArray[i];
}



// 两个多项式相乘的过程
void MultPolynomial(const Polynomial Poly1, const Polynomial Poly2, Polynomial PolyProd)
{
    int i, j;
    ZeroPolynomial(PolyProd);
    PolyProd->HighPower = Poly1->HighPower + Poly2->HighPower;

    if(PolyProd->HighPower > MaxDegree)
        Error("Exceeded array size");
    else
        for(i = 0; i <= Poly1->HighPower; i++)
            for(j = 0; j <= Poly2->HighPower; j++)
                PolyProd->CoeffArray[i + j] += Poly1->CoeffArray[i] * Poly2->CoeffArray[i];
}


void PrintPoly(const Polynomial Q)
{
    int i;

    for (i = Q->HighPower; i > 0; i--)
        printf("%dx^%d + ", Q->CoeffArray[i], i); // CoeffArray[i]代表系数,i代表指数
    printf("%d\n", Q->CoeffArray[0]);
}

// 测试函数
int main()
{
    Polynomial P, Q;

    P = (Polynomial) malloc(sizeof(*P));
    Q = (Polynomial) malloc(sizeof(*Q));

    P->HighPower = 1;
    P->CoeffArray[0] = 1;
    P->CoeffArray[1] = 1; // P = x + 1
    MultPolynomial(P, P, Q); // Q = P * P = x^2 + 2x + 1
    MultPolynomial(Q, Q, P); // P = Q * Q = x^4 + 4x^3 + 6x^2 + 4x + 1
    AddPolynomial(P, P, Q); // Q = P + P = 2x^4 + 8x^3 + 12x^2 + 8x^1 + 2
    // 打印结果
    PrintPoly(Q);

    return 0;
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值