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

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

// 定义一元多项式结构体
typedef struct {
    int coef; // 系数
    int exp; // 指数
    struct Poly *next;
} Poly;

// 定义一元多项式相加函数
Poly *poly_add(Poly *p1, Poly *p2) {
    Poly *head, *tail, *p;
    head = (Poly *)malloc(sizeof(Poly));
    tail = head;
    head->next = NULL;
    while (p1 && p2) {
        if (p1->exp > p2->exp) {
            p = (Poly *)malloc(sizeof(Poly));
            p->coef = p1->coef;
            p->exp = p1->exp;
            p1 = p1->next;
        } else if (p1->exp < p2->exp) {
            p = (Poly *)malloc(sizeof(Poly));
            p->coef = p2->coef;
            p->exp = p2->exp;
            p2 = p2->next;
        } else {
            p = (Poly *)malloc(sizeof(Poly));
            p->coef = p1->coef + p2->coef;
            p->exp = p1->exp;
            p1 = p1->next;
            p2 = p2->next;
        }
        tail->next = p;
        tail = p;
        p->next = NULL;
    }
    while (p1) {
        p = (Poly *)malloc(sizeof(Poly));
        p->coef = p1->coef;
        p->exp = p1->exp;
        p1 = p1->next;
        tail->next = p;
        tail = p;
        p->next = NULL;
    }
    while (p2) {
        p = (Poly *)malloc(sizeof(Poly));
        p->coef = p2->coef;
        p->exp = p2->exp;
        p2 = p2->next;
        tail->next = p;
        tail = p;
        p->next = NULL;
    }
    return head->next;
}

// 定义一元多项式输出函数
void print_poly(Poly *p) {
    if (!p) {
        printf("0\n");
        return;
    }
    while (p) {
        if (p->coef > 0 && p != head) {
            printf("+");
        }
        if (p->coef != 1 || p->exp == 0) {
            printf("%d", p->coef);
        }
        if (p->exp > 1) {
            printf("x^%d", p->exp);
        } else if (p->exp == 1) {
            printf("x");
        }
        p = p->next;
    }
    printf("\n");
}

int main() {
    // 创建两个一元多项式
    Poly *p1, *p2, *p3;
    p1 = (Poly *)malloc(sizeof(Poly));
    p2 = (Poly *)malloc(sizeof(Poly));
    p1->coef = 3;
    p1->exp = 4;
    p1->next = NULL;
    p2->coef = 5;
    p2->exp = 3;
    p2->next = NULL;
    p1->next = (Poly *)malloc(sizeof(Poly));
    p2->next = (Poly *)malloc(sizeof(Poly));
    p1->next->coef = 2;
    p1->next->exp = 2;
    p1->next->next = NULL;
    p2->next->coef = 4;
    p2->next->exp = 1;
    p2->next->next = NULL;
    p1->next->next = (Poly *)malloc(sizeof(Poly));
    p2->next->next = (Poly *)malloc(sizeof(Poly));
    p1->next->next->coef = 1;
    p1->next->next->exp = 0;
    p1->next->next->next = NULL;
    p2->next->next->coef = 3;
    p2->next->next->exp = 0;
    p2->next->next->next = NULL;

    // 输出两个一元多项式
    printf("p1 = ");
    print_poly(p1);
    printf("p2 = ");
    print_poly(p2);

    // 计算两个一元多项式的和
    p3 = poly_add(p1, p2);
    printf("p1 + p2 = ");
    print_poly(p3);

    return 0;
}

在上面的代码中,我们首先定义了一个一元多项式结构体,其中包括系数、指数和指向下一个节点的指针三个成员变量。然后,我们定义了一个一元多项式相加函数poly_add,该函数接受两个一元多项式作为输入,返回它们的和。在poly_add函数中,我们首先创建一个空的一元多项式head,然后依次遍历两个输入的一元多项式p1p2,按照指数从高到低的顺序将每一项加入结果中。最后,我们将结果作为一个新的一元多项式返回。

另外,我们还定义了一个一元多项式输出函数print_poly,用于输出一元多项式。在print_poly函数中,我们首先判断当前项的系数是否为正数,如果是,则输出加号。然后,我们输出当前项的系数和指数,其中,如果当前项的系数为1且指数不为0,则省略系数1不输出。最后,我们按顺序遍历所有项,并在每项之间输出加号或减号。

main函数中,我们首先创建两个一元多项式p1p2,然后输出它们的值。接着,我们调用poly_add函数计算它们的和,并输出结果。

代码优化:

  • 使用next指针实现链表结构,方便操作一元多项式。
  • poly_add函数中,将相加后的节点直接连接到tailnext指针上,避免使用额外的变量来保存节点,提高效率。
  • print_poly函数中,判断当前节点是否是第一个节点,避免在第一个节点前输出加号。
  • 添加对空多项式的判断,避免输出错误的结果。
  • main函数中,使用NULL初始化指针,防止出现野指针错误。

代码功能:

  • 创建一元多项式结构体
  • 实现一元多项式相加函数
  • 实现一元多项式输出函数
  • 测试一元多项式加法运算

总结:

本文介绍了使用C语言实现一元多项式加法运算的方法,代码清晰易懂,并进行了优化,提高了效率和可读性。希望这篇文章对读者理解一元多项式加法运算以及C语言编程有所帮助。

相关知识:

  • 结构体
  • 指针
  • 链表
  • 内存分配
  • 函数
  • 输入输出

注意:

  • 以上代码仅供参考,可以根据实际情况进行修改和扩展。
  • 使用malloc函数分配内存时,需要及时释放内存,避免内存泄漏。
  • 建议使用代码编辑器或IDE进行代码编写,以方便调试和运行。
  • 可以使用在线编译器(例如https://www.online-python.com/)测试代码。
  • 更多关于C语言的学习资源,请参考相关书籍或网站。
C语言实现一元多项式加法运算

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

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