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

// 定义一元多项式节点
typedef struct node {
    int coef;   // 系数
    int exp;    // 次数
    struct node *next;  // 下一个节点指针
} Node;

// 创建一元多项式
Node *create() {
    Node *head, *p, *q;
    int c, e;
    head = (Node *)malloc(sizeof(Node));   // 头结点
    head->next = NULL;
    q = head;
    printf("请输入系数和指数(以-1 -1结束):\n");
    scanf("%d %d", &c, &e);
    while (c != -1 && e != -1) {
        p = (Node *)malloc(sizeof(Node));   // 创建新节点
        p->coef = c;
        p->exp = e;
        q->next = p;
        q = p;
        scanf("%d %d", &c, &e);
    }
    q->next = NULL;
    return head;
}

// 输出一元多项式
void print(Node *head) {
    Node *p = head->next;
    while (p != NULL) {
        if (p->exp == 0) {
            printf("%d", p->coef);
        } else if (p->exp == 1) {
            printf("%dx", p->coef);
        } else {
            printf("%dx^%d", p->coef, p->exp);
        }
        p = p->next;
        if (p != NULL && p->coef > 0) {
            printf("+");
        }
    }
    printf("\n");
}

// 一元多项式相加
Node *add(Node *a, Node *b) {
    Node *c, *pa, *pb, *pc;
    c = (Node *)malloc(sizeof(Node));   // 结果多项式头结点
    c->next = NULL;
    pa = a->next;
    pb = b->next;
    pc = c;
    while (pa != NULL && pb != NULL) {
        if (pa->exp == pb->exp) {
            int sum = pa->coef + pb->coef;
            if (sum != 0) {
                Node *p = (Node *)malloc(sizeof(Node));   // 新节点
                p->coef = sum;
                p->exp = pa->exp;
                pc->next = p;
                pc = p;
            }
            pa = pa->next;
            pb = pb->next;
        } else if (pa->exp > pb->exp) {
            Node *p = (Node *)malloc(sizeof(Node));   // 新节点
            p->coef = pa->coef;
            p->exp = pa->exp;
            pc->next = p;
            pc = p;
            pa = pa->next;
        } else {
            Node *p = (Node *)malloc(sizeof(Node));   // 新节点
            p->coef = pb->coef;
            p->exp = pb->exp;
            pc->next = p;
            pc = p;
            pb = pb->next;
        }
    }
    while (pa != NULL) {
        Node *p = (Node *)malloc(sizeof(Node));   // 新节点
        p->coef = pa->coef;
        p->exp = pa->exp;
        pc->next = p;
        pc = p;
        pa = pa->next;
    }
    while (pb != NULL) {
        Node *p = (Node *)malloc(sizeof(Node));   // 新节点
        p->coef = pb->coef;
        p->exp = pb->exp;
        pc->next = p;
        pc = p;
        pb = pb->next;
    }
    pc->next = NULL;
    return c;
}

int main() {
    Node *a, *b, *c;
    printf("请输入第一个多项式:\n");
    a = create();
    printf("第一个多项式为: ");
    print(a);
    printf("请输入第二个多项式:\n");
    b = create();
    printf("第二个多项式为: ");
    print(b);
    c = add(a, b);
    printf("两个多项式相加的结果为: ");
    print(c);
    return 0;
}
C语言实现一元多项式加法运算

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

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