以下是一元多项式加法的C语言代码:

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

typedef struct PolyNode *PtrToPolyNode;
struct PolyNode {
    int coef;  // 系数
    int expon;  // 指数
    PtrToPolyNode Next;  // 指向下一个结点的指针
};
typedef PtrToPolyNode Polynomial;

Polynomial ReadPoly();
Polynomial Add(Polynomial P1, Polynomial P2);
void PrintPoly(Polynomial P);

int main()
{
    Polynomial P1, P2, PP;

    P1 = ReadPoly();
    P2 = ReadPoly();
    PP = Add(P1, P2);
    PrintPoly(PP);

    return 0;
}

Polynomial ReadPoly()
{
    Polynomial P, Rear, TmpCell;
    int N, c, e;

    scanf("%d", &N);
    P = (Polynomial)malloc(sizeof(struct PolyNode));
    P->Next = NULL;
    Rear = P;
    while (N--) {
        scanf("%d %d", &c, &e);
        TmpCell = (Polynomial)malloc(sizeof(struct PolyNode));
        TmpCell->coef = c;
        TmpCell->expon = e;
        TmpCell->Next = NULL;
        Rear->Next = TmpCell;
        Rear = TmpCell;
    }
    return P;
}

Polynomial Add(Polynomial P1, Polynomial P2)
{
    Polynomial front, rear, temp;
    int sum;

    rear = (Polynomial)malloc(sizeof(struct PolyNode));
    front = rear;
    while (P1 && P2) {
        if (P1->expon == P2->expon) {
            sum = P1->coef + P2->coef;
            if (sum) {
                temp = (Polynomial)malloc(sizeof(struct PolyNode));
                temp->coef = sum;
                temp->expon = P1->expon;
                rear->Next = temp;
                rear = temp;
            }
            P1 = P1->Next;
            P2 = P2->Next;
        } else if (P1->expon > P2->expon) {
            temp = (Polynomial)malloc(sizeof(struct PolyNode));
            temp->coef = P1->coef;
            temp->expon = P1->expon;
            rear->Next = temp;
            rear = temp;
            P1 = P1->Next;
        } else {
            temp = (Polynomial)malloc(sizeof(struct PolyNode));
            temp->coef = P2->coef;
            temp->expon = P2->expon;
            rear->Next = temp;
            rear = temp;
            P2 = P2->Next;
        }
    }
    for (; P1; P1 = P1->Next) {
        temp = (Polynomial)malloc(sizeof(struct PolyNode));
        temp->coef = P1->coef;
        temp->expon = P1->expon;
        rear->Next = temp;
        rear = temp;
    }
    for (; P2; P2 = P2->Next) {
        temp = (Polynomial)malloc(sizeof(struct PolyNode));
        temp->coef = P2->coef;
        temp->expon = P2->expon;
        rear->Next = temp;
        rear = temp;
    }
    rear->Next = NULL;
    temp = front;
    front = front->Next;
    free(temp);
    return front;
}

void PrintPoly(Polynomial P)
{
    int flag = 0;
    if (!P) {
        printf("0 0\n");
        return;
    }
    while (P) {
        if (!flag)
            flag = 1;
        else
            printf(" ");
        printf("%d %d", P->coef, P->expon);
        P = P->Next;
    }
    printf("\n");
}

代码中,定义了一个结构体 PolyNode 作为链表的结点,其中包含了系数、指数和指向下一个结点的指针。同时,还定义了链表的头结点为 Polynomial 类型。

输入一元多项式时,先输入多项式的项数 N,然后依次输入每一项的系数和指数。读入后创建一个新结点,并将其插入到链表的尾部。

进行多项式加法时,使用两个指针 P1P2 分别指向两个多项式的当前结点,然后依次比较它们的指数,如果相等,则将系数相加并创建一个新结点插入到结果链表中;如果 P1 的指数较大,则将 P1 的当前结点插入到结果链表中;如果 P2 的指数较大,则将 P2 的当前结点插入到结果链表中。当其中一个多项式遍历结束后,将另一个多项式剩余的结点插入到结果链表的尾部。

最后,输出结果链表中的每一项,注意处理一些特殊情况,如结果多项式为 0 时,输出 0 0。

C语言实现一元多项式加法运算

原文地址: https://www.cveoy.top/t/topic/lRHu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录