以下是用C语言解决一元多项式的加法运算的代码:

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

typedef struct Node {
    float coef; // 系数
    int exp; // 指数
    struct Node *next; // 指向下一个节点的指针
} Node, *Polynomial;

// 创建一个新的节点
Node *createNode(float coef, int exp) {
    Node *p = (Node*)malloc(sizeof(Node));
    p->coef = coef;
    p->exp = exp;
    p->next = NULL;
    return p;
}

// 创建一个多项式
Polynomial createPolynomial() {
    Polynomial p = createNode(0, 0); // 头节点
    Node *last = p; // 尾节点
    int n;
    printf("请输入多项式的项数:");
    scanf("%d", &n);
    printf("请依次输入每一项的系数和指数(以空格分隔):\n");
    while (n--) {
        float coef;
        int exp;
        scanf("%f %d", &coef, &exp);
        Node *node = createNode(coef, exp);
        last->next = node;
        last = node;
    }
    return p;
}

// 打印一个多项式
void printPolynomial(Polynomial p) {
    Node *node = p->next;
    if (!node) {
        printf("0\n");
        return;
    }
    while (node) {
        if (node->coef > 0 && node != p->next) {
            printf("+");
        }
        printf("%0.2f", node->coef);
        if (node->exp == 1) {
            printf("x");
        } else if (node->exp != 0) {
            printf("x^%d", node->exp);
        }
        node = node->next;
    }
    printf("\n");
}

// 释放一个多项式的内存
void freePolynomial(Polynomial p) {
    Node *node = p;
    while (node) {
        Node *next = node->next;
        free(node);
        node = next;
    }
}

// 多项式相加
Polynomial add(Polynomial p1, Polynomial p2) {
    Polynomial p = createNode(0, 0);
    Node *last = p;
    Node *node1 = p1->next;
    Node *node2 = p2->next;
    while (node1 && node2) {
        if (node1->exp > node2->exp) {
            last->next = createNode(node1->coef, node1->exp);
            node1 = node1->next;
        } else if (node1->exp < node2->exp) {
            last->next = createNode(node2->coef, node2->exp);
            node2 = node2->next;
        } else {
            float coef = node1->coef + node2->coef;
            if (coef != 0) {
                last->next = createNode(coef, node1->exp);
            }
            node1 = node1->next;
            node2 = node2->next;
        }
        last = last->next;
    }
    while (node1) {
        last->next = createNode(node1->coef, node1->exp);
        node1 = node1->next;
        last = last->next;
    }
    while (node2) {
        last->next = createNode(node2->coef, node2->exp);
        node2 = node2->next;
        last = last->next;
    }
    return p;
}

int main() {
    printf("请输入第一个多项式:\n");
    Polynomial p1 = createPolynomial();
    printf("请输入第二个多项式:\n");
    Polynomial p2 = createPolynomial();
    printf("第一个多项式为:");
    printPolynomial(p1);
    printf("第二个多项式为:");
    printPolynomial(p2);
    printf("它们的和为:");
    Polynomial p = add(p1, p2);
    printPolynomial(p);
    freePolynomial(p1);
    freePolynomial(p2);
    freePolynomial(p);
    return 0;
}

运行结果:

请输入第一个多项式:
请输入多项式的项数:3
请依次输入每一项的系数和指数(以空格分隔):
1 2
-2.5 1
3 0
请输入第二个多项式:
请输入多项式的项数:2
请依次输入每一项的系数和指数(以空格分隔):
-1.5 1
2 0
第一个多项式为:1.00x^2-2.50x+3.00
第二个多项式为:-1.50x+2.00
它们的和为:1.00x^2-4.00x+5.00
C语言实现一元多项式加法运算

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

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