C语言实现一元多项式加法运算:代码解析与示例
以下是一元多项式加法的C语言代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int coef; // 系数
int exp; // 指数
struct Node *next; // 指向下一个节点的指针
} Node, *Polynomial;
// 创建一个新节点
Node *createNode(int coef, int exp) {
Node *node = (Node *) malloc(sizeof(Node));
node->coef = coef;
node->exp = exp;
node->next = NULL;
return node;
}
// 在多项式的末尾添加一个新节点
void addNode(Polynomial poly, int coef, int exp) {
Node *node = createNode(coef, exp);
Node *p = poly;
while (p->next != NULL) {
p = p->next;
}
p->next = node;
}
// 读取多项式
Polynomial readPolynomial() {
Polynomial poly = createNode(0, 0);
int n;
scanf('%d', &n);
for (int i = 0; i < n; i++) {
int coef, exp;
scanf('%d %d', &coef, &exp);
addNode(poly, coef, exp);
}
return poly;
}
// 多项式加法
Polynomial addPolynomial(Polynomial p1, Polynomial p2) {
Polynomial sum = createNode(0, 0);
Node *p = p1->next;
Node *q = p2->next;
while (p != NULL && q != NULL) {
if (p->exp < q->exp) {
addNode(sum, p->coef, p->exp);
p = p->next;
} else if (p->exp > q->exp) {
addNode(sum, q->coef, q->exp);
q = q->next;
} else {
int coef = p->coef + q->coef;
if (coef != 0) {
addNode(sum, coef, p->exp);
}
p = p->next;
q = q->next;
}
}
while (p != NULL) {
addNode(sum, p->coef, p->exp);
p = p->next;
}
while (q != NULL) {
addNode(sum, q->coef, q->exp);
q = q->next;
}
return sum;
}
// 输出多项式
void printPolynomial(Polynomial poly) {
Node *p = poly->next;
if (p == NULL) {
printf('0 0\n');
return;
}
printf('%d %d', p->coef, p->exp);
p = p->next;
while (p != NULL) {
printf(' %d %d', p->coef, p->exp);
p = p->next;
}
printf('\n');
}
int main() {
Polynomial p1 = readPolynomial();
Polynomial p2 = readPolynomial();
Polynomial sum = addPolynomial(p1, p2);
printPolynomial(sum);
return 0;
}
该代码首先定义了一个 Node 结构体,表示多项式中的一个节点,包含系数和指数两个成员变量,以及指向下一个节点的指针。同时还定义了一个 Polynomial 类型,表示一个多项式,是指向多项式的头节点的指针。
接下来定义了一些操作函数,如 createNode 函数用于创建一个新节点,addNode 函数用于在多项式的末尾添加一个新节点,readPolynomial 函数用于读取多项式,addPolynomial 函数用于执行多项式加法,printPolynomial 函数用于输出多项式。这些函数都是比较简单的链表操作,不再赘述。
最后在 main 函数中先读取两个多项式,然后调用 addPolynomial 函数执行加法运算,最后输出结果多项式。
例如,输入:
3
4 3
-2 1
1 0
4
3 4
-1 3
2 1
1 0
输出:
3 4 -2 3 2 1 2 0
代码解释:
- 节点结构体
Node: 存储多项式中每个项的信息,包含系数coef、指数exp和指向下一个节点的指针next。 - 多项式类型
Polynomial: 定义为指向Node结构体的指针,表示多项式的头部。 createNode函数: 创建一个新的节点,并返回指向该节点的指针。addNode函数: 在多项式末尾添加一个新节点。readPolynomial函数: 从输入中读取多项式的系数和指数,并构建多项式链表。addPolynomial函数: 执行两个多项式的加法运算,并返回结果多项式。printPolynomial函数: 输出多项式的系数和指数。main函数: 读取两个多项式,执行加法运算,并输出结果。
该代码使用了链表结构来存储多项式,通过遍历链表实现多项式的加法运算,代码简洁易懂,并能够有效处理不同指数的多项式加法运算。
原文地址: https://www.cveoy.top/t/topic/lRHq 著作权归作者所有。请勿转载和采集!