C语言实现一元多项式加法运算
以下是一元多项式的加法运算的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,然后依次遍历两个输入的一元多项式p1和p2,按照指数从高到低的顺序将每一项加入结果中。最后,我们将结果作为一个新的一元多项式返回。
另外,我们还定义了一个一元多项式输出函数print_poly,用于输出一元多项式。在print_poly函数中,我们首先判断当前项的系数是否为正数,如果是,则输出加号。然后,我们输出当前项的系数和指数,其中,如果当前项的系数为1且指数不为0,则省略系数1不输出。最后,我们按顺序遍历所有项,并在每项之间输出加号或减号。
在main函数中,我们首先创建两个一元多项式p1和p2,然后输出它们的值。接着,我们调用poly_add函数计算它们的和,并输出结果。
代码优化:
- 使用
next指针实现链表结构,方便操作一元多项式。 - 在
poly_add函数中,将相加后的节点直接连接到tail的next指针上,避免使用额外的变量来保存节点,提高效率。 - 在
print_poly函数中,判断当前节点是否是第一个节点,避免在第一个节点前输出加号。 - 添加对空多项式的判断,避免输出错误的结果。
- 在
main函数中,使用NULL初始化指针,防止出现野指针错误。
代码功能:
- 创建一元多项式结构体
- 实现一元多项式相加函数
- 实现一元多项式输出函数
- 测试一元多项式加法运算
总结:
本文介绍了使用C语言实现一元多项式加法运算的方法,代码清晰易懂,并进行了优化,提高了效率和可读性。希望这篇文章对读者理解一元多项式加法运算以及C语言编程有所帮助。
相关知识:
- 结构体
- 指针
- 链表
- 内存分配
- 函数
- 输入输出
注意:
- 以上代码仅供参考,可以根据实际情况进行修改和扩展。
- 使用
malloc函数分配内存时,需要及时释放内存,避免内存泄漏。 - 建议使用代码编辑器或IDE进行代码编写,以方便调试和运行。
- 可以使用在线编译器(例如https://www.online-python.com/)测试代码。
- 更多关于C语言的学习资源,请参考相关书籍或网站。
原文地址: https://www.cveoy.top/t/topic/lRHC 著作权归作者所有。请勿转载和采集!